编译代码后出错 - 无法找到符号

时间:2011-07-18 23:15:06

标签: java

我有这段代码:

static ArrayList<Integer> output_list = new ArrayList<Integer>();
static ArrayList<Integer> pair_list = new ArrayList<Integer>();

    for (Iterator it=output_list.iterator(); it.hasNext();)
        {
            int pair_test = (int)output_list.next();
            for (int i=0; i<pair_list.length; i++)
            {

                if(!pair_list[i]==0)
                {
                    if (pair_list[i]==pair_test[i])
                    {
                        boolean check;
                        check=true;
                    }
                }
            }
        }

但是我在编译时遇到了“无法找到符号”的错误。

symbol  : variable length
location: class java.util.ArrayList<java.lang.Integer>
                        for (int i=0; i<pair_list.length; i++)
                                                 ^
Prior.java:79: array required, but java.util.ArrayList<java.lang.Integer> found
                                if(!pair_list[i]==0)
                                             ^
Prior.java:79: incomparable types: boolean and int
                                if(!pair_list[i]==0)
                                                ^
Prior.java:81: array required, but java.util.ArrayList<java.lang.Integer> found
                                        if (pair_list[i]==pair_test[i])
                                                     ^
Prior.java:81: array required, but int found
                                        if (pair_list[i]==pair_test[i])
                                                                   ^

任何人都可以帮助我为什么会收到此错误?

2 个答案:

答案 0 :(得分:5)

使用pair_list.size()代替pair_list.lengthpair_list是List而不是数组。我建议也查看the for-each loop语法。 这个pair_list[i]也不会编译。它是数组语法。请改用pair_list.get(i)

答案 1 :(得分:1)

这段代码有一些工作

  • 正如zacheusz已经说过的那样,List不是一个数组,我认为留在List中会更好,但这意味着.length变为.size()[i]变为.get(i)
  • 你定义int pair_test = (int)output_list.next();但是你说pair_test[i],有些事情是错误的......
  • if(!pair_list[i]==0)应该成为if(!(pair_list[i]==0))

这使我们成为第一次迭代:

static List<Integer> output_list = new ArrayList<Integer>();
static List<Integer> pair_list = new ArrayList<Integer>();

for (Integer pair_test: output_list) {
    for (int i=0; i<pair_list.size(); i++) {
            if(!(pair_list.get(i)==0)) {
                // i suppose that this is what you mean 
                if (pair_list.get(i)==pair_test) { 
                    boolean check;
                    check=true;  
                    // this is pretty useless as it lives very locally and does 
                    // absolutely nothing anywhere else in the program....
                }
            }
        }
    }
}

现在,您可以像

那样重写内循环
for (Integer pair_list_element : pair_list) {
    if ((pair_list_element != 0) && (pair_list_element==pair_test)) {
        boolean check = true;
        // and then probably, because your condition was satisfied
        do_something_useful();
        // and get out
        break;
    }
}
相关问题