2015-03-29 1 views
0

Alors j'écris pour la première fois ma propre classe et la seule méthode que je n'ai pas réussi à comprendre est la méthode compareTo qui est censée avoir "un paramètre: un objet SavingsAccount, nommez-le comme vous voulez. "Problème de passage d'un objet à la méthode dans une classe séparée

public int compareTo(SavingsAccount secAccount) 
{ 
    int result; 
    if (balance > secAccount.getBalance()) 
     result = 1; 
    else if (balance == secAccount.getBalance()) 
     result = 0; 
    else 
     result = -1; 

    return result; 
} 

Lorsque je tente de compiler je reçois cette erreur:
erreur: manque instruction return}

dans le client (écrit par mon professeur, que je ne suis pas censé modifier) ​​c'est la ligne qui appelle ma méthode compareTo:

if (savings1.compareTo(savings2) > 0) 
     System.out.println("[client] Savings1 has the larger balance"); 
    else if (savings1.compareTo(savings2) == 0) 
     System.out.println("[client] Savings1 and Savings2 " 
     + "have the same balance"); 
    else 
     System.out.println("[client] Savings2 has the larger balance"); 

d'après ce que je comprends l'argument savings2 est transmis à compareTo puis dans ma classe SavingsAccount, le paramètre est secAccount en tant qu'objet SavingsAccount.

+0

sur quelle ligne est-ce qu'il y a une instruction manquante? –

Répondre

0

Vous pouvez avoir une orthèse. Voici un exemple de travail complet:

Contenu du fichier Test.java:

package com.jlb; 

public class Test{ 

    public static void main(String[] args) 
    { 
     SavingsAccount savings1 = new SavingsAccount(200); 
     SavingsAccount savings2 = new SavingsAccount(100); 

     if (savings1.compareTo(savings2) > 0) 
      System.out.println("[client] Savings1 has the larger balance"); 
     else if (savings1.compareTo(savings2) == 0) 
      System.out.println("[client] Savings1 and Savings2 " 
      + "have the same balance"); 
     else 
      System.out.println("[client] Savings2 has the larger balance"); 
    } 


} 

Contenu du fichier SavingsAccount.java:

package com.jlb; 

public class SavingsAccount { 

    private int balance = 0; 

    public SavingsAccount(int amount){ 
     this.balance = amount; 
    } 
    public int getBalance(){ 
     return this.balance; 
    } 

    public int compareTo(SavingsAccount secAccount) 
    { 
     int result; 
     if (balance > secAccount.getBalance()) 
      result = 1; 
     else if (balance == secAccount.getBalance()) 
      result = 0; 
     else 
      result = -1; 

     return result; 
    } 
} 

Vous pouvez le tester en changeant les valeurs lors de la création savings1 et savings2, puis exécutez-le comme un programme Java dans Eclipse ou quel que soit votre IDE préféré.

+0

Merci pour votre aide. J'ai fini par ajouter toutes mes méthodes une par une à cela et j'ai finalement compris qu'il me manquait une déclaration de retour dans l'une de mes méthodes. Je ne sais toujours pas pourquoi cette erreur n'est pas survenue à la place, mais de toute façon, elle compile bien. Je vous remercie. – RolandoE

0

Au lieu de déclarer un résultat int, vous pouvez faire quelque chose comme ça.

public int compareTo(SavingsAccount secAccount) 
{ 
    if (balance > secAccount.getBalance()) 
     return 1; 
    else if (balance == secAccount.getBalance()) 
     return 0; 
    else 
     return -1; 
} 

Si vous n'avez pas besoin de cette variable de résultat, cela fonctionnera. Il n'est pas nécessaire d'écrire des valeurs de paramètres de code supplémentaires lorsque vous pouvez le faire de cette façon.

+0

cela n'explique pas pourquoi le compilateur dit qu'il n'y a pas d'instruction de retour, car il est clairement –

+0

@BenKnoble J'ai fini par découvrir qu'il me manquait une instruction return dans une méthode séparée. Je ne sais toujours pas pourquoi cette erreur n'est pas survenue à la place, mais de toute façon, elle compile bien. Je vous remercie. – RolandoE

+0

@CMilby Merci d'avoir répondu – RolandoE