2010-11-27 14 views
1

Je suis assez nouveau pour Java et cela m'a vraiment confus.Utilisation d'une méthode d'une classe différente

J'ai deux classes. Un (controlNumber) a deux champs int utilisés pour les nombres, un est le nombre actuel et un est le nombre maximum (une fois que le nombre actuel atteint ce nombre, il est réinitialisé à 1). Le constructeur initialise le nombre courant à 1 et prend le max comme paramètre (et vérifie que le maximum est positif et inférieur à 100). Des méthodes j'en ai une qui renvoie le nombre actuel, une qui renvoie le nombre maximum, une qui fixe le maximum comme le courant, une qui ajoute 1 au nombre courant (travaillant son était vers le maximum) et enfin celui qui renvoie a Chaîne avec le nombre actuel où il met "0" devant si le nombre actuel est seulement un chiffre (donc 5 devient 05).
Le toString ressemble à ceci:

Cette classe fonctionne très bien.
La deuxième classe est l'endroit où je commence à rencontrer des problèmes. Il a deux champs qui sont de la classe ci-dessus. Le constructeur les initialise avec deux valeurs max différentes. Tout cela semble fonctionner.
Maintenant, j'ai besoin d'une méthode toString qui retourne une chaîne avec la valeur actuelle des deux champs, un "/" entre et "0" devant si c'est un chiffre (donc si le jour est 3 et le mois 11 Nous reviendrons "03/11"). Ma première pensée était juste d'utiliser quelque chose comme ce que j'ai utilisé ci-dessus avec Integer.toString, mais il s'avère que vous ne pouvez pas faire cela (même si les champs de la classe controlNumber sont ints). Alors j'ai pensé à utiliser ma méthode d'en haut (qui est dans une classe différente) comme elle fait la plupart de ce que je veux, mais je ne sais pas comment.

J'espère que j'ai fait sens et que quelqu'un peut m'aider à comprendre comment résoudre mon problème.

Répondre

1

Si vous avez deux champs du type ci-dessus, appelé a et b

public String toString() { 
    return a + "/" + b; 
} 

Vous n'avez pas besoin d'appeler toString() explicitement car c'est le comportement de toute façon. La seule différence est que si a ou b est nul, cela affichera "null" alors qu'appeler toString() lancera une exception NullPointerException.

BTW Vous pouvez raccourcir votre méthode pour

public String toString() { 
    return (currentNumber > 9 ? "" : "0") + currentNumber; 
} 
+0

a et b ne peuvent jamais être nul (s'ils sont mon code a mal joué: P). – GeorgeWChubby

+2

Bien que l'utilisation de l'opérateur ternaire est une grande amélioration à ce qu'il avait, je dirais que prendre l'habitude de formater correctement les chaînes. String.format ("% 1 $" + n + "0", s); Cela retournerait une chaîne de 0 à gauche si la longueur de la chaîne s est inférieure à n. Donc disons n = 4 et s = "3", alors le retour serait "0003". – bitxwise

1

Je suppose que vous voulez dire avoir une classe SomeClass qui a deux champs de type ControlNumber, et que vous voulez mettre en œuvre SomeClass.toString() pour imprimer les valeurs combinées des champs. Si tel est le cas, alors vous feriez quelque chose comme ceci:

class SomeClass 
{ 
    ControlNumber number1; 
    ControlNumber number2; 

    [...] 

    public String toString() 
    { 
     return number1.toString() + "/" + number2.toString(); 
    } 
} 

Mise à jour:

Comme Pierre l'a souligné, les appels explicites à number.toString() peut être omis, de sorte que le pourrait plus haut être réécrite comme:

public String toString() 
    { 
     return number1 + "/" + number2; 
    } 
+0

Merci beaucoup pour votre aide. Merci – GeorgeWChubby

0

La façon dont j'approcherais ceci:

Tout d'abord, créez une fonction d'utilité pour le formatage des entiers:

public class StringUtil { 

    public static String format(int i) { 
     if (i > 9) { 
      return String.valueOf(i); 
     } else { 
      return ("0" + String.valueOf(i)); 
     } 
    } 

} 

Maintenant, vous pouvez utiliser ce code utilitaire à partir de vos autres classes:

public String toString() { 
    return StringUtil.format(currentNumber); 
} 

et

public String toString() { 
    return StringUtil.format(max1) + "/" + StringUtil.format(max2); 
} 
Questions connexes