程序没有输入if语句



所以我有一个错误检测程序,如果当前单词(字符串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();
    }
    }

相关内容

  • 没有找到相关文章

最新更新