2016-02-12 86 views
0

我是新来的Java,我试图学习如何通过ArrayList中的ArrayList解析,我无法弄清楚它。我习惯于Python,你所要做的只是list[index][index]。为什么在尝试使用list.get(index).get(index)时出现读取Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous tree type: <any>的错误?这不正确的语法?使用解析ArrayList中的ArrayList不起作用。

import java.io.*; 
    import java.util.*; 
    public class Practice { 
     public static void main(String[] args){ 
      ArrayList list = new ArrayList(Arrays.asList(new Integer[]{1,2,3,4,5,6,7,8,9,10})); 
      ArrayList list1 = new ArrayList(Arrays.asList(new Integer[]{1,2,3,4,5,6,7,8,9,10})); 
      list.add(list1); 
      System.out.println(list.get(10).get(0)); 

     } 

    } 
+0

为什么要使用原始类型,而不是仿制药? – Nayuki

回答

2

试试这个:

list.addAll(list1);

+0

OP似乎意识到了什么'list.add(list1)',因为他显式地试图调用'list.get(10).get(0)',所以这不是问题。问题在于第二个'get(0)',因为编译器不能安全地假定第一个'get(10)'返回ArrayList。 – Pshemo

+0

换句话说,这个答案不能使这个代码'list.get(10).get(0)'工作。 – Pshemo

+0

@Pshemo这是正确的,我将如何去调用内部列表? –

3

Java和Python是完全不同的,当谈到类型:Java Types vs Python Types

Java要求明确的类型声明,并就如何类型非常严格被使用。例如,您需要明确指定您正在使用的ArrayLists类型。

假设你想创建2周的ArrayList,包含innerLists每个包含数字1-10 outerList,这是Java代码将这样的伎俩:

import java.io.*; 
import java.util.*; 
public class Practice { 
    public static void main(String[] args) { 
     ArrayList<Integer> innerList = new ArrayList<Integer>(Arrays.asList(new Integer[]{1,2,3,4,5,6,7,8,9,10})); 
     ArrayList<ArrayList<Integer>> outerList = new ArrayList<ArrayList<Integer>>(); 
     for (int i = 0; i < 10; i++) { 
      outerList.add(innerList); 
     } 
     System.out.println(outerList.get(9).get(0)); 
    } 
} 
+0

谢谢你这样做,但为什么它不能用我最初发布的代码工作? –

+1

@ Swanson7你可能应该阅读[什么是原始类型,为什么我们不应该使用它?](http://stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-不应该,我们使用-IT) – Pshemo