2016-04-05 5 views
0

これを理解するのに何か問題があります。私は各ループで評価されるべき式を持つwhileステートメントを持っています。私はこの間違いを考えているように感じます。Java動的while式

私がしようとしているのは、偽になるまで式experience >= experienceCapをループすることです。各ループでexperienceCapが正しく設定されていますが、実際には各ループで値が変更されても、式の値は変更されません(while)。

experience: 10 
experienceCap: 100 
experience: 10 
experienceCap: 450 
experience: 10 
experienceCap: 1120 
experience: 10 
experienceCap: 2337 

および不可避クラッシュ:

public void refreshExperience() { 
    int experience = getExperience(); //10 
    int experienceCap = getExperienceCap(); //100 

    while (experience >= experienceCap) { 
      newExperienceCap(); 
      refreshExperience(); 
    } 

} 

これは、のようないくつかのログ出力になります。 私は非常に入力を感謝します、ありがとう!

+1

あなたはnewExperienceCap(呼び出したときに多分ちょうどexperienceCapを返し、ループ内でint型の値を更新する必要があります) –

+0

だけに 'experienceCap'を設定するようにあなたは、はい' 'newExperienceCap()' ' –

答えて

1

ループの値が更新されていないため、出力ではexperienceCapが表示されることがわかります。すべてのコードを見ることなく、あなたが記録している値がで宣言された値ではないことを推測することができます。refreshExperiece

public class Test { 

    int experience = 10; 
    int experienceCap = 100; 

    public void refreshExperience() { 
     while (experience <= experienceCap) { 
      experience = getExperience(); 
      experienceCap = getExperienceCap(); 
     } 
    } 

上記のコードは、経験experienceCapそれぞれ10及び100に初期化さを示しています。ループ内では、これらの値はの戻り値で更新されます。getExperienceおよびgetExperienceCapそれぞれです。どのようにして経験experienceCapを更新しているあなた次第ですが、これは単純な例です:

private int getExperience() { 
    return experience + 5; 
} 

private int getExperienceCap() { 
    return experienceCap - 10; 
} 
+0

ためのコードを投稿してくださいすることができは'100'はいつも、そう? あなたの質問に答えるために、私の投稿されたコードで 'newExperienceCap()'が新しい上限を設定します。なぜなら、デバッグ出力が新しい値で表示されるからです。したがって、新しいループの値を設定しますが、while文の式はその新しい値に更新されず、最初のものにとどまります: '10'ありがとう – zngb

1

これは対reference問題の典型的なvalueです。 int experienceは参考になると思われますが、そうではありません。