2013-03-11 48 views
2

我在遍历ArrayList时遇到了一些麻烦。我有一个名为的课程,它延伸到ArrayList<String>。我有另一个名为Table的课程,它延伸到ArrayList<Row>通过ArrayList迭代<对象<String>>

我想遍历Table类来将行的ArrayList转换为字符串的二维数组。

这里是我的Table类代码:

public class Table extends ArrayList<Row> 
{ 
public Row[] appArray; //Array of single applicant details 
public String tableArray[][]; //Array of every applicant 
private ArrayList<Row> ar; 
private Row r; 

public Table() 
{ 
} 

public void addApplicant(Row app) 
{ 
    add(app); 
    displayable(); 
} 

public void convertToArray() 
{ 
    int x = size(); 
    appArray=toArray(new Row[x]); 
} 

public void displayable() 
{ 
int i,j; 
for (Row r: ar) 
    i=0; 
    for(String s: r){ 
     j=0; 
     tableArray[i][j]=s; 
     j++; 
    } 

}} 

这里是类:

public class Row extends ArrayList<String> 
{ 
public Row(String appNumber, String name, String date, String fileLoc, String country, Table table) 
{ 
    addDetails(appNumber,name,date,fileLoc,country); 
    table.addApplicant(this); 
} 

public void addDetails(String appNumber, String name, String date, String fileLoc, String country) 
{ 
    add(appNumber); 
    add(name); 
    add(date); 
    add(fileLoc); 
    add(country); 
}} 

我有麻烦的方法是在Tabledisplayable()。它告诉我i may not have been initialized但是,如果我在每个循环的第二个初始化它,它将只遍历我的​​中的第一个元素?

在此先感谢任何指针。

+0

设置'i'和'j'为'0' * *内各自'for'循环似乎是一个可能的逻辑错误给我。 – 2013-03-11 15:39:51

+1

没有'ArrayList >'这样的事情,因为'Object'类没有类型参数('Object '无效)。 – Jesper 2013-03-11 15:40:24

回答

3

可显示方法有两个错误:

  • 第一for循环不具有{}
  • 我不递增(I ++;失踪)

代码:

public void displayable() 
{ 
    int i,j; 
    for (Row r: ar){ 
    i=0; 
    for(String s: r){ 
     j=0; 
     tableArray[i][j]=s; 
     j++; 
    } 
    i++; 
    } 
} 
+2

我认为这样的增量不是我们想要的,因为在下一次迭代中每个计数器都会变成零。 因此,还需要将'i = 0'和'j = 0'向上移一层 – alno 2013-03-11 15:51:24

+0

它的工作原理!感谢所有帮助的人。愚蠢的错误可以是这样的麻烦。再次感谢。 – Hoggie1790 2013-03-11 15:54:58

4

你刚刚错过了for (Row r: ar)循环中的块。

此外,由于Fortega指出,您永远不会在您的代码中增加i,并且我认为您将计数器归零错误。

因此,而不是:

for (Row r: ar) 
    i=0; 
    for(String s: r){ 
    j=0; 
    tableArray[i][j]=s; 
    j++; 
    } 

你应该写类似:

i=0; 
for (Row r: ar) { 
    j=0; 
    for(String s: r){ 
    tableArray[i][j]=s; 
    j++; 
    } 
    i++; 
} 

或者更好的缩小计数器的可视区域,并加入声明与初始化:

// Remove previous declarations 

int i=0; 
for (Row r: ar) { 
    int j=0; 
    for(String s: r){ 
    tableArray[i][j]=s; 
    j++; 
    } 
    i++; 
} 
+0

以及'i ++;'? – Fortega 2013-03-11 15:44:16

+0

哦,你说得对。 '我'从来没有在代码中增加。 – alno 2013-03-11 15:47:01

2

更改为:

for (Row r : ar) 
      i = 0; 
     for (String s : r) { 
      j = 0; 
      tableArray[i][j] = s; 
      j++; 
     } 

到:

for (Row r : ar) { 
      i = 0; 
      for (String s : r) { 
       j = 0; 
       tableArray[i][j] = s; 
       j++; 
      } 
      i++; 
     } 
相关问题