如果声明不断印刷

时间:2013-12-24 06:59:19

标签: java if-statement

我的if语句表现得很奇怪,而不是只有当错误大于6时打印,它每次都会不断打印“死”。关于为什么会这样的想法?我已经更新了代码,因此您可以更好地理解我的逻辑。

          int j = 0;
          String line = "";
          for(j = 0; j<64; j++) {
              wordLength[j] = wordList[j].length();//gets length of words in wordList
          }//end for

          int f = 2;//change num to change level
          int m = 0;
        //creates line first then put into .setText
          while(m<wordLength[f]) {
              line += "__ ";
              m++;
          }//end for
          jlLines.setText(line);

          tf.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {//when enter key pressed
              JTextField tf = (JTextField)e.getSource();
             letter = tf.getText();
              jlLetsUsed.setText(jlLetsUsed.getText() + letter + " ");//sets jlabel text to users entered letter


              char[] jlabelText = jlLines.getText().toCharArray();//converts string to character array (array length is length of string)
              char userEnteredChar = letter.charAt(0);
              int wrong = 0;
              int level = 2;//change num to change level
              int i = 0;
              for(i = 0; i<wordList[level].length(); i++){
                  if(wordList[level].charAt(i) == userEnteredChar){
                      jlabelText[3 * i] = ' ';
                      jlabelText[3 * i + 1] = userEnteredChar;
                      jlLines.setText(String.valueOf(jlabelText));
                  }else{ 
                      wrong++;
                      System.out.println(wrong);
                  }if(wrong >= 6){
                      System.out.println("dead");
                      break;
                  }
}//end for

              }//end actionPerformed method

1 个答案:

答案 0 :(得分:1)

显然wrong总是&gt; = 6.一种可能性是level长于1个字符,因此包含检查始终为false。如果它总是“错误的”,那就是这样。即使是一个正确的&#39;猜测。

可能性更大的可能性是因为检查增加wrong的位置在循环内部,任何时候wordList[level]的长度为6个或更多字符且不包含letter,{ {1}}将增加6次或更多次。

你可能应该把检查放在循环之外。

wrong

顺便提一下,这里有一个明显的建议是,如果你正在检查for(int i = 0; i<wordList[level].length(); i++){ if(wordList[level].charAt(i) == userEnteredChar){ jlabelText[3 * i] = ' '; jlabelText[3 * i + 1] = userEnteredChar; jlLines.setText(String.valueOf(jlabelText)); } } if(!wordList[level].contains(letter)){ wrong++; } if(wrong>=6){ System.out.println("dead"); } ,你可以先检查一下,然后跳过“揭示”。如果contains为假,则以某种方式循环。

看起来contains应该是某个地方的某个字段。在这里显示我已经将它声明为ActionListener上的一个字段。不要把它放在ActionListener上,把它放在别的地方,最好放在包含的类上。我不知道在哪里可以放置它,这可能最初起作用。关键是要跟踪“错误”。在行动中猜出单一猜测之外的猜测。这意味着你必须在方法范围之外的某个地方声明它。

wrong