2017-06-10 4 views
-1

Dans le cadre d'une affectation que je dois faire pour ma classe, je dois créer un fichier ADT qui acceptera l'entrée de l'utilisateur pour les numérateurs et les dénominateurs des fractions, comparez le deux, et déterminez si les fractions sont égales, puis testez-le dans une classe de harnais. Un des problèmes que je rencontre est que je dois avoir une méthode equals (Fraction f) qui compare les deux en utilisant la formule suivante: return getNum()*f.getDenom() == f.getNum()*getDenom();.Les méthodes ne peuvent pas être appliquées à des types donnés en Java

Voici le code de ma classe jusqu'à présent:

public class Fraction { 
    int numerator; 
    int denominator; 

    //default constructor 
    public Fraction() { 
     numerator = 0; 
     denominator = 0; 
    } 

    public Fraction(int newNum, int newDenom) { 
     numerator = newNum; 
     denominator = newDenom; 
    } 

    //accessor 
    public void setNewNum(int newNum) { 
     numerator = newNum; 
    } 

    public void setNewDenom(int newDenom) { 
     numerator = newDenom; 
    } 

    public int getNum(int newNum) { 
     return newNum; 
    } 

    public int getDenom(int newDenom) { 
     return newDenom; 
    } 

//Error here - "Methods getNum/getDenom in class Fraction cannot be applied to the given types:" 
    public boolean equals(Fraction f) { 
     return getNum()*f.getDenom() == f.getNum()*getDenom(); 
    } 
} 

La lecture du message d'erreur dans NetBeans dit que le "actual and formal argument lists differ in length." je travaille à essayer de comprendre ce que je fait de mal, mais j'avais l'impression que newNum et newDenom renvoient déjà des valeurs qui sont des entiers, étant donné que newNum et newDenom sont définis comme égaux au numérateur et au dénominateur.

Merci d'avance.

+1

'getNum (int newNum)' = 'getNum()' – Yahya

+0

Un peu hors-sujet, mais pensez-vous qu'il est sûr de mettre 'dénominateur 'à 0 dans le constructeur par défaut? Je veux dire, nous parlons de fractions. Je voudrais le mettre à 1 – Pelocho

+0

Pelocho - J'ai toujours pensé que les constructeurs ont été mis à 0. Est-ce pas correct? Je m'excuse, je suis encore très novice en ce qui concerne tout ce qui va au-delà du codage de base. – KMN

Répondre

2

La raison pour laquelle vous obtenez cette erreur est, vos méthodes getter sont définies pour accepter un argument int (par exemple getNum(int newNum)), alors que la méthode equals ne passe aucun argument tout en appelant getNum.

Idéalement, le but de la méthode getter est de renvoyer une valeur, il n'a donc pas besoin d'accepter aucun argument. Changement getNum et getDenom ci-dessous pour résoudre le problème:

public int getNum() { 
    return numerator; 
} 

public int getDenom() { 
    return denominator; 
} 

Here's la documentation et des exemples pour getter et setter conventions de nommage.

+0

Quel commentaire? –

+0

@Yahya Doit avoir écrit une réponse. Je ne peux pas blâmer Darshan. –

+0

Merci beaucoup !! Cela ressemble à ça a fonctionné. – KMN

1

getNum(),getDenom()/getters/doivent être déclarés ainsi:

public int getNum() {//without any parameters 
    return numerator; // not newNum 
} 

public int getDenom() {//without any parameters 
    return denominator; //not newDenom 
}