Java While和for循环用于添加到二维数组

Java While和for循环用于添加到二维数组,java,arrays,object,arraylist,add,Java,Arrays,Object,Arraylist,Add,我有一个包含对象的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()){ tableAr

我有一个包含对象的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++;
    }
}
我认为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++;}
} 
public void iterateRow(行)
{int x=0;
int y=大小();
tableArray=新字符串[y][row.rowString().length];

对于(int i=0;i您的
iterateRow
方法每次调用时都会重新创建
tableArray
。由于
while
循环,您的
对象在数组中被复制
y


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

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

虽然这可能不是冒烟的枪,但这样做要安全得多

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

 tableArray = new String[y][5];

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


很难说解决方案是什么,因为我根本不明白为什么代码中会有while循环。

看起来您希望遍历行列表中的每个元素

也许您希望使用类似于以下内容的方法:

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++:
    }
}
public void iterateRows(列出行){
int cols=5;
int行=0,列=0;
tableArray=新字符串[rows.size()][cols];
用于(行:行){
col=0;
对于(字符串c:row.rowString()){
tableArray[row][col]=c;
col++;
}
行++:
}
}
但是,如果有超过5列,最好实现自己的错误检查

编辑


对于您的程序来说,这可能不是最好的设计,我建议您对其进行更改,以便在添加新行时,您也不必遍历每一个旧行。

我不知道这是否是出于实际目的,也不知道迭代器是如何工作的()调用,但实现此功能的逻辑方法是首先声明数组,在IterateRow(数组和currentRow的引用)中添加2个参数。然后,在IterateRow中去掉while循环,只循环字符串属性。

由于添加的是同一行
rowString()
数组中的元素
“size()”
times。根据您的循环,由于参数“row”从未更改,因此用于构建数组的源代码将从此“row”开始。我可以想象,在“for each”循环之后,您希望转到下一行?…此外,您的while循环可以简化为“for”循环。为什么这里是5,tableArray=新字符串[y][5]?因为行中有5个字符串字段。@Machinegon很好。我已将其更改为tableArray=new String[y][Row.rowString().length];每次调用它时,它都会同时执行这两项操作。它使用
tableArray=new String[y][5]重新创建数组;
并且while循环会重复行。多亏了这一点,将来在Row类中添加更多元素时,它会派上用场:)
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++:
    }
}