【问题标题】:Java: Incrementing a variable inside of a for loopJava:在 for 循环中增加变量
【发布时间】:2013-11-25 12:09:48
【问题描述】:

我在一个初学者 Java 课程中,对于一个项目,我需要计算一个条件返回 TRUE(correctGuess) 或 FALSE(incorrectGuess) 的次数,其中循环内有一个循环。我遇到的问题是,在循环重复时,内部循环中递增的变量不会保持其递增的值。因此,外部 while 循环的条件永远不会为假。我对编程真的很陌生,我无法弄清楚解决方案。提前感谢您花时间回答这个愚蠢的问题,如果有任何问题,我很乐意做出更好的解释。代码如下所示:

    int incorrectGuess = 0;
    int correctGuess = 0;   

    while(incorrectGuess < 6 && correctGuess < WORD_LENGTH) {

        //Gets the users first guess
        System.out.print("Please guess a letter [A-Z]: ");
        letterGuessed = keyboard.nextLine();

        for (int i = 0; i < WORD_LENGTH; i++){
            char value = wordLetterArray[i];
            String letterArray_value = String.valueOf(value);

            if(letterGuessed.equals(letterArray_value)){
                ++correctGuess;
            }

            else
                System.out.println("Bad comparison!");  

            if(i == WORD_LENGTH)
                ++incorrectGuess;   

        }   
    }

【问题讨论】:

  • 不,这些值将保持不变。什么告诉你他们没有持有?
  • 这:if(i == WORD_LENGTH) 在具有此退出条件的 for 循环内:i
  • incorrectGuess 到底应该跟踪什么?请注意,由于incorrectGuess 在带有条件i &lt; WORD_LENGTH 的for 循环内以及在带有条件i==WORD_LENGTH 的if 语句内递增,它实际上永远不会递增,因为这两个条件不可能同时为真。也许你的意思是 i==WORD_LENGTH-1 用于 if 语句?
  • 对不起,这个程序是一个刽子手游戏。 “不正确的猜测”是指用户猜测的字母不是单词的一部分。因为这是一个刽子手游戏,所以你只会猜到 6 次错误的猜测(要得到一个被绞死的人,你首先画出头(1)、身体(2)、手臂(3 和 4)和腿(5 和 6))。正确猜测然后跟踪正确猜测的数量,以便当用户正确猜测所有字母时,程序将终止,而不是继续要求另一个猜测。编辑:是的,我的意思是 i==WORD_LENGTH-1。
  • 另外,如果条件错误,if(letterGuessed.equals(letterArray_value)) letterGuessed 是一个字符串,letterArray_value 是一个字符,所以它们永远不会相等。

标签: java loops nested increment operator-keyword


【解决方案1】:

看起来你可能需要重新设计整个算法,但我可以告诉你这个永远循环的主要问题是什么:

// Seems legit
while(incorrectGuess < 6 && correctGuess < WORD_LENGTH) {

// Still seems legit
for (int i = 0; i < WORD_LENGTH; i++)

    // Well, there's a problem, i will never be equal to word length 
    //because a condition of the for loop is i < WORD_LENGTH
    if(i == WORD_LENGTH)
        ++incorrectGuess;   

再一次,我觉得你需要重新设计你的整个算法,但如果你想让它继续,只需将不正确的Guess增量线拉出 for 循环。这将为您提供预期的结果:

    for (int i = 0; i < WORD_LENGTH; i++){
      char value = wordLetterArray[i];
      String letterArray_value = String.valueOf(value);

      if(letterGuessed.equals(letterArray_value)){
            ++correctGuess;
      }
      else {
            System.out.println("Bad comparison!");  
      }
    }   

   incorrectGuess++;   

【讨论】:

  • 不它不会 if(letterGuessed.equals(letterArray_value)) letterGuessed 是一个字符串,letterArray_value 是一个字符
  • 仔细看看。他的预期结果是如果 for 循环结束,则增加不正确的猜测,不管它是否是正确的猜测。 correctGuess 仍将使用上述方法递增。我不认为他的算法是正确的,我只是想解释为什么他的 while 循环没有结束。
  • 谢谢@CaptainSkyhawk 我有一个更复杂的算法,但是我在这个项目上遇到了很多麻烦,所以我决定从头开始简化。不幸的是,我认为你是完全正确的,我的简化产生的问题比它解决的问题多。我会重写它。 *在角落里抽泣
  • @Taylor,按照这个速度,我今晚可能需要更像月光的东西才能熬过。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
  • 2017-03-22
  • 2011-02-24
  • 2016-04-14
  • 1970-01-01
  • 2018-12-25
  • 1970-01-01
相关资源
最近更新 更多