2017-10-18 52 views
0

J'apprends à coder et j'ai des problèmes avec mes méthodes de classe et je teste ces méthodes. Voici le problème:Problèmes avec les méthodes de classe et test de ces méthodes?

Dans ce TP, nous allons créer une classe Fraction. Cette classe est utilisée pour représenter un ratio de deux nombres entiers. La méthode principale de la classe FractionDriver contiendra le code qui teste votre classe Fraction. Je vous recommande de tester votre classe Fraction par incrément.

Votre classe Fraction doit avoir deux variables d'instance d'entier privé, le numérateur et le dénominateur. Dans un premier temps, la valeur du numérateur doit être 0 et la valeur du dénominateur doit être 1.

Ecrire deux méthodes mutator, setNumerator() et setDenominator(), qui permettent à l'utilisateur de définir le numérateur et le dénominateur à une valeur entière. Votre code ne doit pas autoriser le dénominateur à 0. Si l'utilisateur essaie de définir le dénominateur sur 0, la valeur ne doit pas être modifiée.

De même, incluez une méthode nommée getValue() qui renvoie la valeur du numérateur divisé par le dénominateur en tant que double.

Ajoutez une méthode toString() qui renvoie une représentation String de la fraction sous la forme numérateur/dénominateur, par exemple 5/3.

Enfin, ajoutez une méthode equals qui détermine si deux objets de type Fraction sont égaux. Notez que 3/5 et 6/10 doivent être considérés égaux.

Voici mon code pour ma classe Fraction:

public class Fraction { 

private int numerator = 0; 
private int denominator = 1; 
private double divide; 
//setting numerator and denominator 
public void setNumerator(int numerator) { 
    this.numerator = numerator; 
} 
public void setDenominator(int denominator) { 
    if (denominator == 0) { 
     return; 
    } 
    this.denominator = denominator; 
} 

//returning value of the numerator divided by a denominator as a double 
public void getValue() { 
    divide = numerator/denominator; 
    this.divide = divide; 
    System.out.println("The value of this fraction in decimal form is: " + divide); 
} 
//returning the fraction as a string #/# 
public String toString() { 
    return "Your fraction is: " + numerator + "/" + denominator; 
} 
public boolean equals(Fraction other) { 
    if(other.divide == divide) { 
     return true; 
    } 
    return false; 
} 

}

Voici le code de mon chauffeur jusqu'à présent:

public class FractionDriver { 

public static void main(String[] args) { 
    Fraction fract1 = new Fraction(); 
    Fraction fract2 = new Fraction(); 

    //initialize variables 
    fract1.setNumerator(1); 
    fract1.setDenominator(2); 
    fract2.setNumerator(5); 
    fract2.setDenominator(10); 

    for(int i = 0; i < 1; i++) { 
     //testing toString method 
     System.out.println(fract1.toString()); 
     System.out.println(fract2.toString()); 
     fract1.getValue(); 
     fract2.getValue(); 

    } 
} 

}

Quand je test ma méthode getValue() pour les deux fractions, chacune a le résultat de 0,0 et je ne suis pas sûr de ce que Je fais mal dans ma méthode de classe. En outre, comment puis-je tester ma méthode égale?

+3

SUGGESTION: vous divisez ints. qu'est-ce que 1/2 dans un entier? – crumbug

+0

Samantha, je voulais juste dire un excellent travail pour tester votre code. Les tests sont très importants, continuez votre bon travail. Assurez-vous de tester les «cas limites» ainsi que les valeurs négatives, les zéros, etc. En outre, pensez à créer des tests que vous pouvez conserver et exécuter encore et encore. Si vous êtes ambitieux, vous pouvez jeter un oeil à [Junit] (http://junit.org), mais si cela est trop avancé pour vous, il suffit de créer une méthode pour chaque test et chaque méthode jette une exception quand le test échoue. Ensuite, vous exécutez simplement toutes vos méthodes. –

Répondre

-2

Votre méthode pour obtenir la valeur est NUL ... donc c'est votre problème. Il devrait être

//returning value of the numerator divided by a denominator as a double 
public double getValue() { 
    divide = numerator/denominator; 
    this.divide = divide; 
    return this.divide; 
} 

Mais mieux pour le rendre

public double getValue() { 
    return numerator/denominator; 
} 
+1

Il est certainement non conventionnel, mais ce n'est pas le problème. Le "getter" imprime la ligne. – user1675642