Java:如何在for循环中使变量递增

4
我正在参加一门初级Java课程,为了一个项目,我需要用循环中的循环来计算条件返回TRUE(correctGuess)或FALSE(incorrectGuess)的次数。我的问题在于内部循环中被递增的变量不会保持它们递增的值,因此外部while循环的条件永远不会为false。我是编程的新手,无法找出解决方案。提前感谢您花时间回答这个愚蠢的问题,如果有任何问题,我将很乐意做更好的解释。代码如下:
    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;   

        }   
    }

不,那些值将会保持。什么让你觉得它们没有被保持? - musical_coder
3
在这个带有退出条件“i < WORD_LENGTH”的for循环中,如果(i == WORD_LENGTH),将永远不会(永远?永远永远?)评估为真。 - Taylor
1
incorrectGuess 到底是用来追踪什么的?请注意,由于 incorrectGuess 在一个带有条件 i < WORD_LENGTH 的 for 循环中被递增,在一个带有条件 i==WORD_LENGTH 的 if 语句中也被递增,因此它实际上永远不会被递增,因为两个条件不可能同时成立。也许你想要在 if 语句中使用 i==WORD_LENGTH-1 - Flight Odyssey
抱歉,这个程序是用于玩“绞刑游戏”的。如果用户猜测的字母不是单词的一部分,则称之为“错误的猜测”。因为这是一个绞刑游戏,所以您只能猜错6次(首先画头(1),身体(2),手臂(3和4)和腿(5和6)来绞死一个人)。当用户正确猜出所有字母时,正确的猜测会跟踪数量,程序将终止而不是继续要求另一个猜测。编辑:是的,我是说i==WORD_LENGTH-1。 - neonroses
此外,这个 if 条件语句是错误的,如果(letterGuessed.equals(letterArray_value))。letterGuessed 是一个字符串(String),而 letterArray_value 是一个字符(char),所以它们永远不会相等。 - Taylor
显示剩余2条评论
1个回答

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;   

我认为你需要重新设计整个算法,但如果你想继续使用现有算法,只需将"incorrectGuess"增量行移出"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++;   

不会的,如果(letterGuessed.equals(letterArray_value))。其中,letterGuessed是一个字符串,letterArray_value是一个字符。 - Taylor
看得更仔細一點。他的目標是在 for 循環結束時,增加 incorrectGuess,無論是否猜對。 correctGuess 將使用上述方法進行增量。我認為他的算法不正確,我只是試圖解釋他的 while 循環為什麼沒有結束。 - Captain Skyhawk
谢谢@CaptainSkyhawk。我原本有一个更复杂的算法,但是由于这个项目一直让我头疼不已,所以我决定重新开始并简化它。不幸的是,我认为你完全正确,我的简化导致了更多问题。我会重写它。*在角落里哭泣 - neonroses
@Taylor,以这个速度,我可能需要更像白蒸酒的东西才能熬过今晚。 - neonroses

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接