2011-04-07 6 views
1

D'accord, j'essaie de créer une méthode appelée: setIncrement(). J'ai deux classes que j'utilise, FourDigit, qui contient deux objets TwoDigit que j'ai créés. J'ai appelé chacun un segment1 et segment2. Leur relation est: segment1.segment2. Cette méthode va incrémenter le segment2 et quand elle sera remise à zéro, la méthode incrémentera le segment1.Appel Java à partir d'une classe getValue

Le problème est dans ce morceau de code:

public void setIncrement(){ 
    segment2.incrementValue(); 
    if(segment2.getValue == 0){ 
     segment1.value = segment1.value +1; 
    }else{ 
     segment2=aNum%tooHighB; 
    } 
    getDisplayString(); 
} 

Il dit: ne peut pas trouver variable symbole: getValue() ???

Voici les classes:

classe FourDigits:

public class FourDigits 
{ 
/** 
* Fields 
*/ 
private Digits segment1; 
private Digits segment2; 
private String displayString; 

/** 
* Constructor for objects of class FourDigits 
*/ 
public FourDigits(int anyHigha, int anyHighb) 
{ 
    segment1 = new Digits(anyHigha); 
    segment2 = new Digits(anyHighb); 
} 

/** 
* Mutator method to set values 
*/ 
public void setValues(int anyNuma, int anyNumb){ 
    segment1.setValue(anyNuma); 
    segment2.setValue(anyNumb); 
} 
/** 
* Mutator method to set the increments 
*/ 
public void setIncrement(){ 
    segment2.incrementValue(); 
    if(segment2.getValue == 0){ 
     segment1.value = segment1.value +1; 
    }else{ 
     segment2=aNum%tooHighB; 
    } 
    getDisplayString(); 
} 
/** 
* Mutator method to getDisplayString 
*/ 
public void getDisplayString(){ 
    System.out.println(segment1.displayString() ="." + segment2.displayString()); 
} 
} 

qui prend des méthodes de la classe Digits:

public class Digits 
{ 
/** 
* Fields 
*/ 
private int value; 
private int tooHigh; 
private String displayString; 

/** 
* Constructors 
*/ 
public Digits(int anyNum) 
{ 
    value = 0; 
    tooHigh=anyNum; 
    displayString = ""; 
} 
/** 
* Mutator method to set the value 
*/ 
public void setValue(int anyValue){ 
    if((anyValue < tooHigh) && (anyValue >= 0)){ 
     value = anyValue; 
    }else{ 
     value=0; 
    } 
} 
/** 
* Mutator method to add to the value 
*/ 
public void addValue(){ 
    if(value < tooHigh){ 
     value=value+1; 
    }else{ 
     value=tooHigh; 
    } 
} 
/** 
* Mutator method to increment the value 
*/ 
    public void incrementValue(){ 
    int incrementValue; 
    incrementValue = value + 1; 
    value = incrementValue % tooHigh; 
} 
/** 
* Mutator method to display the string 
*/ 
public void displayString(){ 
    if(value<10){ 
     displayString="0" + value; 
    }else{ 
     displayString="" + value; 
    } 
    System.out.println(displayString); 
} 
public int getValue(){ 
    return value; 
} 

} 
+0

Il vous manque un signe "=" dans votre 'setIncrement()' function, dans l'instruction 'if'. ça devrait être "==". De plus, une trace de pile serait utile. – gnomed

+0

Un conseil pour éviter l'erreur que j'ai mentionné est d'inverser l'ordre de vos comparaisons. donc 'if (0 == var)' au lieu de 'if (var == 0)'. De cette façon, vous ne recevrez pas une assignation erronée dans vos déclarations if. – gnomed

Répondre

0

En plus de ce que tout le monde a dit:

segment2.incrementValue() 

Votre méthode de classe Digits.incrementValue() est de type void donc cette vérification de comparaison sera jamais travail:

if(segment2.incrementValue() == 0){ //Corrected your equals operation 

I suggérerait de faire:

  • Créer une méthode getter pour la variable d'instance value (comme value est privé) dans la classe Digits.
  • Faites une vérification de comparaison comme dans l'exemple (en supposant un getter pour value est mis en œuvre):

Exemple:

segment2.incrementValue(); 
if (segment2.getValue() == 0) { 
    //Do work.... 
    segment1.setValue(segment1.getValue() + 1); 
} 
+0

J'ai pensé que la valeur est privée, donc cela ne fonctionnera pas, mais j'ai fait une méthode appelée getValue qui est juste la valeur de retour dans les chiffres. Maintenant, quand j'utilise votre suggestion, il est dit ne peut pas trouver la variable de symbole getValue ?? – tekman22

+0

Où est votre implémentation de la méthode 'getValue()'? Est-ce ** exactement ** comme 'public int getValue() {return value; } '? –

+0

c'est dans la classe Digits, et oui, c'est exactement comme ça et j'ai même essayé de le tester dans sa propre classe et ça marche !! – tekman22

0

Vous devez utiliser '==' lorsque l'on compare deux nombres au lieu de '=' qui assigne des valeurs.

par exemple:

+0

Dans la question OP, 'segment2.incrementValue()' est de type 'void'. –

0

Votre problème est cette ligne:

if(segment2.incrementValue() = 0){ 

Et le compilateur vous dit exactement ce qui ne va pas: vous essayez d'attribuer à quelque chose qui est une valeur, pas une variable . On peut supposer que vous voulez comparer plutôt que de céder, de sorte que la ligne doit être:

+0

MERCI !!!!!! – tekman22

+0

Dans la question OP, 'segment2.incrementValue()' est de type 'void'. –

2

En plus d'utiliser l'opérateur d'affectation au lieu d'une comparaison d'égalité, vous aussi essayer de mettre segment2 au lieu de segment2.value. Je soupçonne que le bloc doit être:

if (segment2.incrementValue() == 0) { 
    segment1.setValue(segment1.getValue() + 1); 
} else { 
    segment2.setValue(aNum % tooHighB); 
} 

Je ne vois aucune déclaration pour aNum ou tooHighB, vous l'esprit ... et incrementValue() retours vide au moment, alors que probablement vous voulez revenir la nouvelle valeur.

(je vous encourage à utiliser des espaces pour rendre votre code plus facile à lire, en passant.)

+0

+1 pour avoir remarqué le segment2.value. Personne d'autre n'a fait. :) –

+0

@Swaranga Sarma, c'est Jon Skeet dont nous parlons :) Il est le SO Compiler et le débogueur! LOL –

+0

Pour une raison quelconque mais maintenant je reçois une erreur que je ne peux pas avoir VOID? – tekman22

0

Pourquoi avez-vous ce genre de comparaison [qui est une affectation au lieu d'une comparaison] :

if(segment2.incrementValue() = 0) 

devrait-il pas être

if(segment2.incrementValue() == 0) 

aussi changer votre méthode pour cet incrément():

public int incrementValue(){ 
    int incrementValue; 
    incrementValue = value + 1; 
    value = incrementValue % tooHigh; 
    return value; 
} 
+0

le premier n'est pas une comparaison du tout .... – jberg

+0

Droit ... exactement :) –

0

Tout le monde a obtenu le ==, donc je signalerai une erreur différente.

FourDigits n'a pas les droits d'accès à Digits.value. Vous devriez utiliser la méthode setValue() que vous avez dans Digits.

Modifier la mise à jour:

if(segment2.getValue == 0){ 

getValue est une méthode et doivent avoir entre parenthèses à la fin de celui-ci. Au lieu de cela vous avez besoin ceci:

if(segment2.getValue() == 0){ 
+0

setValue ne fait pas ce que j'ai besoin de faire ici dans cette classe. Je ne veux pas qu'ils définissent la valeur, je veux qu'il stoart de 0 et augmente chaque fois. J'ai fait une méthode appelée getValue qui est juste la valeur de retour; en chiffres, mais cela ne fonctionne pas. des idées? – tekman22

+0

@ jtm22: Incrément de base avec jsut get et set. 'segment1.setValue (segment1.getValue() + 1)' – unholysampler

+0

Question mise à jour, des idées? – tekman22

Questions connexes