所以我有一个错误检测程序,如果当前单词(String cWrd)不包含在静态数组中(作为参数传递),它应该检测到“错误”。如果在数组中找不到该单词,则“boolean found”保持为false,并且JLabel在一段时间内设置为“错误类别”。 但是,即使cWrd未包含在数组中,该方法似乎也不会执行。
CODE:
//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();
}
答案 0 :(得分:4)
虽然found == false
(不 found = false
)之类的测试有效,但如果将代码更改为等效{{1},代码将更具可读性且不易出错}}
我修改了你的程序以进行输出而不是睡眠以使结果更加可见,这是在缩小错误时应该做的事情,而且在我看来它正在工作。无论是否找到字符串,它都会到达if语句并通过它获取正确的路径。
!found
输出:
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!");
}
}
}
答案 1 :(得分:2)
您正在使用赋值运算符而不是比较运算符。
此:
if (found = false)
应该是:
if (found == false)
否则if (found = false)
将始终评估为false
并且永远不会进入循环。
如果更改运算符不起作用,那么我们只能假设找到cWrd
的值并将found
变量设置为true,这就是语句isn&#的原因39; t执行。
就个人而言,我设置我的调试器并逐步完成代码并弄清楚代码在做什么。
答案 2 :(得分:0)
在你的情况下改变= = =。
答案 3 :(得分:-1)
纠正这个:
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();
}
}