gal*_*x67 1 java arrays loops for-loop
此代码从纯文本文件中读取每一行(每行都有一个整数数组的"列表"),并基本上将其分解为单个整数,这些整数存储在临时数组中.必须将文档的每一行排列成具有相同行数和列数的二维数组.
使用"if"语句测试条件的代码行应该仅仅打破内部for循环,然后返回到外部循环,递增i,然后移动到该行中的下一个数组.
到目前为止,我所拥有的代码将只占用每行中的FIRST数组,将其放入2D数组的第一行,但会跳过该行中的所有其他数组并继续前进到下一行,它会执行一样.所以内部循环一次,但外部循环从不增加.我读过的每篇文章都说嵌套for循环中的"break"只退出内部循环.在这种情况下似乎并非如此.
那么我怎样才能确保外部循环递增并且该行中的所有数组都被考虑在内?
if (!thisLine.equals("*")) {
String [] firstSplit = thisLine.split(" ");
String [] secondSplit = new String [firstSplit.length * firstSplit.length];
int [][] numbers = new int [firstSplit.length][firstSplit.length];
int value = 0;
int count = 0;
for (int i = 0; i < firstSplit.length; i++) {
firstSplit[i] = firstSplit[i].replace("[", "").replace("]", "");
secondSplit = firstSplit[i].split(",");
for (int j = 0; j < secondSplit.length; j++) {
value = Integer.parseInt(secondSplit[j]);
if (count >= firstSplit.length) {
break;
}
numbers[i][count] = value;
count++;
System.out.println(value);
}
}
System.out.println(Arrays.deepToString(numbers));
}
Run Code Online (Sandbox Code Playgroud)
例如:文件中有一行显示:[6,10,15,13] [16,2,14,7] [11,8,9,3] [5,4,1,12]
'firstSplit'将按空格分隔线,制作长度为4的数组.然后将删除括号.对于firstSplit中的每个项目,secondSplit会用逗号分解它,形成一个长度为16(单个整数)的数组.secondSplit中的每个项目都将转换为一个整数并放置在如下数组中:6位于[0] [0],10位于[0] [1],15位于[0] [2],13位于[0] [3].
完全忽略下一个数组[16,2,14,7].
你永远不会重置count,所以一旦它变得高于,那么之后的firstSplit.length每次重复都将break立即重置.
您应该count在最外层for循环内部移动初始化,以便0在每次通过内部循环之后将其重置为.
这应该可以解决你所看到的问题,但我认为还有一些其他的东西可以改进.您的初始声明secondSplit是不必要的,因为您firstSplit[i].split(",")在使用之前总是为其指定一个新值().我建议删除该声明,并改变外环到这里面的行:String[] secondSplit = firstSplit[i].split(",");.这将避免不必要地分配一块内存.
其次,除非我不理解你的目标,否则当阵列宽度与高度不同时,你会遇到问题.你只需要count初始化numbers[i]的长度firstSplit.length,而不是它需要的实际大小.我将你的代码更改为:
String [] firstSplit = thisLine.split(" ");
int [][] numbers = new int [firstSplit.length][];
for (int i = 0; i < firstSplit.length; i++) {
firstSplit[i] = firstSplit[i].replace("[", "").replace("]", "");
String[] secondSplit = firstSplit[i].split(",");
numbers[i] = new int[secondSplit.length];
for (int j = 0; j < secondSplit.length; j++) {
int value = Integer.parseInt(secondSplit[j]);
numbers[i][j] = value;
System.out.println(value);
}
}
Run Code Online (Sandbox Code Playgroud)
现在它只是声明实际需要它们的变量,并将内部数组设置为它们所需的大小.