gpt4 book ai didi

java - if语句不断打印

转载 作者:行者123 更新时间:2023-12-01 13:41:15 24 4
gpt4 key购买 nike

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

          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

最佳答案

显然错误总是>= 6。一种可能性是level长于1个字符,因此包含检查总是错误的。也就是说,即使猜测“正确”,它也总是“错误”。

更可能的可能性是,因为您递增错误的位置的检查位于循环内部,因此任何时候wordList[level]的长度都是6个或更多字符并且不会不包含字母错误将增加6次或更多。

您可能应该将检查放在循环之外。

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,您不妨先检查它,然后以某种方式跳过“revealing”循环(如果 contains)是假的。

看起来错误可能应该是某个地方的字段。此处所示,我已将其声明为 ActionListener 上的一个字段。不要将其放在 ActionListener 上,而应将其放在其他位置,最好放在包含的类上。我不知道还能把它放在哪里,这最初可能会起作用。重点是跟踪 actionPerformed 中单个猜测之外的“错误”猜测。这意味着您必须在方法范围之外的某个地方声明它。

tf.addActionListener(new ActionListener() {
int wrong;

@Override
public void actionPerformed(ActionEvent e) {
JTextField tf = (JTextField)e.getSource();

char userEntry = tf.getText().charAt(0);
jlLetsUsed.setText(jlLetsUsed.getText() + userEntry + " ");

int level = 2;

if (!wordList[level].contains(String.valueOf(userEntry))) {
wrong++;

if (wrong >= 6) {
System.out.println("dead");
}

return;
}

char[] jlabelText = jlLines.getText().toCharArray();

for (int i = 0; i < wordList[level].length(); i++) {
if (wordList[level].charAt(i) == userEntry) {
jlabelText[3 * i] = ' ';
jlabelText[3 * i + 1] = userEntry;
}
}

jlLines.setText(String.valueOf(jlabelText));
}
});

关于java - if语句不断打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20756357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com