1

我有一个包含对象的arrayList。每个对象包含许多字符串。我正在尝试获取这些字符串并将它们添加到二维数组中。

public void iterateRow(Row row)
{ 
    int x = 0;
    int y = size();
    tableArray = new String[y][5];
    while(x < y){
       int z = 0;
       for (String s: row.rowString()){
          tableArray[x][z] = s;
          z++;
       }
       x++;
    }
}

每当我运行并为行类创建一个新实例时,该方法应该将包含在 Row 中的字符串添加到数组中。但是,它将最新条目复制 x 次(其中 x 是条目总数)。

这是 Row 类以供进一步参考:

public class Row
{   
public String appNumber;
public String name;
public String date;
public String fileLoc;
public String country;
public String elementString;
public String results[];

public Row(String appNumber, String name, String date, String fileLoc, String country, Table table)
{
    this.appNumber = appNumber;
    this.name = name;
    this.date = date;
    this.fileLoc = fileLoc;
    this.country = country;
    table.addApplicant(this);
}

public String[] rowString()
{
    String[] a = {appNumber, name, date, fileLoc, country};
    return a;
}}

我认为在 iterateRow() 方法中这是一个愚蠢的逻辑错误,但我似乎无法弄清楚是什么。任何帮助,将不胜感激。

编辑:在大家的帮助下,我删除了 while 循环。然而,它似乎仍然是复制行而不是移动到下一个?

public void iterateRow(Row row)
{ int x = 0;
    int y = size();
    tableArray = new String[y][row.rowString().length];
    for(int i =0; i<y;i++){
    int z = 0;
    for (String s: row.rowString()){
       tableArray[x][z] = s;
       z++;
    }x++;}
} 
4

5 回答 5

2

问题看起来像是在while循环中。例如,如果 size() 返回 3,则 while 循环将以 x=0,1,2 执行,因此您将分配 tableArray[0],然后是 tableArray[1],然后是 tableArray[2]。

很难说出解决方案是什么,因为我完全不明白为什么你的代码中有 while 循环。

于 2013-03-12T18:06:32.940 回答
1

看起来您想遍历 List of Rows 的每个元素

也许您想使用类似于以下的方法:

public void iterateRows(List<Row> rows) {
    int cols = 5;
    int row = 0, col = 0;
    tableArray = new String[rows.size()][cols];
    for(Row row : rows) {
        col = 0;
        for(String c : row.rowString()) {
            tableArray[row][col] = c;
            col++;
        }
        row++:
    }
}

但是,如果有超过 5 列,最好实现自己的错误检查...

编辑

这可能不是用于您的程序的最佳设计,我建议您更改它,以便在添加新行时,您不必遍历每个旧行。

于 2013-03-12T18:30:46.563 回答
0

您的方法在每次调用时都会iterateRow重新创建。tableArray由于while循环,您的Row对象在数组中获得了复制y次数。

我怀疑您想在iterateRow方法之外创建数组,而不是使用 while 循环(只是 for 循环)来填充数组中的下一个插槽。

于 2013-03-12T18:03:48.373 回答
0

您没有注意相对于 Row 的大小来调整二维数组的大小。

虽然这可能不是确凿的证据,但这样做会更安全

 tableArray = new String[y][row.rowString().length];

代替

 tableArray = new String[y][5];
于 2013-03-12T18:04:23.953 回答
0

我不知道这是否出于实际目的或如何调用 IterateRow(),但实现此工作的合乎逻辑的方法是首先声明数组,在 IterateRow 中添加 2 个参数(数组和 currentRow 的引用)。然后,在 iterateRow 中,您摆脱了 while 循环,您只需循环字符串属性。

于 2013-03-12T18:32:01.057 回答