所以我有一个错误检测程序,如果当前单词(字符串cWrd)不包含在静态数组中(作为参数传递),则应该检测"错误"。如果在数组中没有找到该单词,"布尔发现"将保持为假,并在一段时间内将JLabel设置为"错误类别"。但是,即使cWrd不包含在数组中,该方法也不会执行。
代码://Mistake method
public void mistake(String[] arr) {
int i = 0;
boolean found = false;
while (i < arr.length && found == false) {
if (arr[i].equals(cWrd)) {
found = true;
}
i++;
}
if (found == false) //The program never enters this if statement
{
lmid.setText("Wrong Category!");
try {
t1.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
编辑:下面是我用
测试的两个数组String[] positive =
{"Happy","Beautiful","Wonderful","Generous","Loving","Supportive","Caring"};
String[] negative = {"Nasty","Gross","Horrible","Obnoxious","Mean","Disaster","Angry"};
下面是将cWrd =设置为正负数组组合中的一个随机单词的方法(ArrayList不在图中)
public void wordGen()
{
wchooser = rand.nextInt(words.length);
lmid.setText(" " + words[wchooser]);
cWrd = lmid.getText();
}
虽然像found == false
(不是 found = false
)这样的测试是有效的,但如果将其更改为等效的!found
,代码将更具可读性,更少出错。
我修改了你的程序做输出,而不是睡眠,使结果更明显,当缩小一个错误应该做的事情,它似乎在我的工作。无论是否找到字符串,它都会到达if语句并使用正确的路径。
public class Test {
public static void main(String[] args) {
Test t = new Test();
t.mistake(new String[] { "aaa", "bbb" });
t.mistake(new String[] { "xyzzy", "aaa", "bbb" });
}
String cWrd = "xyzzy";
public void mistake(String[] arr) {
int i = 0;
boolean found = false;
while (i < arr.length && !found) {
if (arr[i].equals(cWrd)) {
found = true;
}
i++;
}
if (!found) // The program never enters this if statement
{
System.out.println("Wrong Category!");
} else {
System.out.println("Found!");
}
}
}
输出:Wrong Category!
Found!
您使用的是赋值操作符,而不是比较操作符。
:
if (found = false)
应:if (found == false)
否则if (found = false)
将始终求值为false
,并且永远不会进入循环。
如果更改操作符不起作用,那么我们只能假设找到了cWrd
的值,并将found
变量设置为true,这就是语句没有执行的原因。
就我个人而言,我会设置我的调试器并逐步检查代码并弄清楚代码在做什么。
根据您的情况更改= to ==
更正:
if (found == false) //The program never enters this if statement
{
lmid.setText("Wrong Category!");
try {
t1.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}