程序不会输入if语句

时间:2015-05-29 21:24:49

标签: java arrays user-interface if-statement

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

4 个答案:

答案 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();
    }
    }