2015-04-08 74 views
-2
Scanner input = new Scanner(System.in); 
ArrayList<String[]> contact = new ArrayList<String[]>(); 
String[] record = new String[2]; 
int x1=1; 

while(x1==3){ 

    for(int i=0;i<2;i++){ 
     record[i]=input.nextLine(); 
    } 
    contact.add(record); 
    x1++; 
} 

我尝试打印列表,发现列表中包含三次最后一个记录。前两个记录(在前两个循环中给出)由第三个记录替换。使用for循环将字符串[]添加到ArrayList中

+0

你总是从索引0进行迭代。所以你总是用最后一个字符串替换所有的字符串。 – Zlopez

回答

-3

您应该在while循环中初始化字符串数组。这样可以避免列表中的旧数组被覆盖。喜欢这个。

while (x1 <= 3) { 
     String[] record = new String[2]; 
     for (int i = 0; i < 2; i++) { 
      record[i] = input.nextLine(); 
     } 
     contact.add(record); 
     x1++; 
    } 
+0

为什么要投票?我可以知道原因吗?此代码已被提问者接受。 – Rajesh

3

我假设你正在尝试将数组添加到列表多次。你应该在while循环的每次迭代中添加不同的阵列:

while(x1<=3){ 
    String[] record = new String[2]; 
    for(int i=0;i<2;i++){ 
     record[i]=input.nextLine(); 
    } 
    contact.add(record); 
    x1++; 
} 

我还假设while(x1==3)是一个错字,你的意思<=

0

我认为你的代码有缺陷。我试图在下面解决它;

while(x1<=3){ 
    //create new string array 
    String[] record = new String[2]; 

    for(int i=0;i<2;i++){ 
     record[i]=input.nextLine(); 
    } 
    contact.add(record); 
    x1++; 
} 

没有重新声明数组“记录”,你将有一个对原来的三次增加的引用。

编辑:看到伊兰有同样的事情,但我错过了< =而不是==比较。如果您使用==,那么您将无法进入循环,因为条件最初会失败

相关问题