Bonjour,
Première conseil : si tu poste du code sur ce forum utilise la balise code. Exemple dans ton cas :
1 2
| myRational r1 = new myRational(1,3);
myRational r2 =new myRational("1/3") |
1 2 3 4 5 6 7 8 9 10 11 12 13
| public class MyRational {
public MyRational(int i, int j) {
int numerateur = i;
int denominateur = j;
int retour;
if (denominateur != 0) {
retour = numerateur / denominateur;
}
}
} |
Pour ce qui est de tes constructeurs :
i/j/retour sont déclaré comme des variables de fonction et non de classe.
Ce qui fait qu'à la fin de ton constructeur les valeurs sont perdu.
La valeur de retour ne devrait pas être calculer dans le constructeur. Mais dans une méthode d'accès.
Note : Ici ton retour est un résultat entre type int et est un int. Donc tu n'aura que la partie entière du résultat.
Pour le constructeur avec le string. Il te fait faire un slipt par rapport au "/". et convertir les deux parties en entier. (et gérer les différents cas)
Voici une solution :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| public class MyRational {
private int numerateur = 0;
private int denominateur = 1;
public int getDenominateur() {
return denominateur;
}
public void setDenominateur(int denominateur) {
this.denominateur = denominateur;
}
public int getNumerateur() {
return numerateur;
}
public void setNumerateur(int numerateur) {
this.numerateur = numerateur;
}
public MyRational(int i, int j) {
numerateur = i;
denominateur = j;
}
public float getRetour() {
return ((float) numerateur) / ((float) denominateur);
}
public MyRational(String fraction) {
if (fraction.length() == 0) {
throw new IllegalArgumentException(
"L'argument n'est pas correcte : chaîne vide.");
}
String[] nombres = fraction.split("/");
switch (nombres.length) {
case 0:
throw new IllegalArgumentException(
"L'argument n'est pas correcte : chaîne vide.");
case 2:
try {
denominateur = Integer.parseInt(nombres[1]);
} catch (Exception e) {
throw new IllegalArgumentException(
"L'argument n'est pas correcte : le dénominateur n'est pas un nombre.");
}
case 1:
try {
numerateur = Integer.parseInt(nombres[0]);
} catch (Exception e) {
throw new IllegalArgumentException(
"L'argument n'est pas correcte : le numérateur n'est pas un nombre.");
}
break;
default:
throw new IllegalArgumentException(
"L'argument n'est pas correcte : n'est pas le format d'une fraction simple");
}
}
public static void main(String[] args) {
MyRational r1 = new MyRational(1, 3);
MyRational r2 = new MyRational("45");
MyRational r3 = new MyRational("45/45");
System.out.println(r1.getNumerateur());
System.out.println(r1.getDenominateur());
System.out.println(r1.getRetour());
System.out.println(r2.getNumerateur());
System.out.println(r2.getDenominateur());
System.out.println(r2.getRetour());
System.out.println(r3.getNumerateur());
System.out.println(r3.getDenominateur());
System.out.println(r3.getRetour());
}
} |
Je te dé-conseil de l'utiliser directement. Recherche plus à comprendre la logique et faire ton propre code.
Cordialement,
Patrick Kolodziejcyzk.
Partager