我的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
答案 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