Java While和for循环用于添加到二维数组
我有一个包含对象的arrayList。每个对象包含多个字符串。我试图将这些字符串添加到二维数组中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
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++:
}
}