1

这到底是什么原因造成的?我尝试在 Java 程序中创建的一种方法出现两个相互矛盾的错误

public void numberOfTrianglesIncidentToVertex(){
  for(List<Integer> pairs: neighbors.get(2)){     // Type mismatch: cannot convert from element type Integer to List<Integer>

  }
    int fail = neighbors.get(2);       // Type mismatch: cannot convert from List<Integer> to int
}

邻居变量在超类中声明如下:

List<List<Integer>> neighbors 
= new ArrayList<List<Integer>>();

我不知道为什么它会在一行上告诉我它是一个整数并且不能转换为整数列表,然后在下一行只是改变主意并说完全相反。是哪一个?

4

2 回答 2

5

鉴于您的邻居声明,以下调用:

neighbors.get(2);  

会给你一个List<Integer>

现在在一个片段中,您正在尝试迭代返回值。所以,当你迭代时List<Integer>,你会得到 type 的值Integer。而且您正在使用List<Integer>类型循环变量。因此,该错误消息。您不能将Integer引用分配给List<Integer>引用。

您应该将循环更改为:

for(int val: neighbors.get(2)) {  // 'int' works in place of 'Integer', due to unboxing
}

但是,如果您在 上进行迭代neighbors,您的循环将正常工作,因为您将List<Integer>在迭代时获得参考。

for(List<Integer> val: neighbors) { 
}

第二个片段中,您直接将获取的值分配List<Integer>给一个int原语。这显然是你做不到的。它们根本不兼容。因此出现错误消息。作业应该是这样的:

List<Integer> list = neighbors.get(2);
于 2013-08-17T07:54:52.023 回答
1
 neighbors.get(2)

回报你List<Integer>。第二个警告很清楚。

类型不匹配:无法从元素类型 Integer 转换为 List

要遍历此列表,您需要遍历 i - 整数。

 for(Integer pairs: neighbors.get(2))
于 2013-08-17T08:00:30.933 回答