Java“break”似乎打破了嵌套for循环

时间:2016-05-16 17:00:07

标签: java arrays loops for-loop

此代码从纯文本文件中读取每一行(每行有一个整数数组的“列表”),并基本上将其分解为单个整数,这些整数存储在临时数组中。必须将文档的每一行排列成具有相同行数和列数的二维数组。

使用“if”语句测试条件的代码行应该只打破内部for循环,然后返回到外部循环,递增i,然后移动到该行中的下一个数组。 / p>

到目前为止,我所拥有的代码将只占用每行中的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));
            }

例如:文件中有一行显示: [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]。

1 个答案:

答案 0 :(得分:9)

您永远不会重置x86_64-linux-gnu,因此一旦高于count,之后的每次重复都会立即firstSplit.length

您应该在最外面的break循环中移动count的初始化,以便在每次通过内循环后将其重置为for

这应该可以解决您所看到的问题,但我认为还有一些其他方面可以改进。您的初始声明0是不必要的,因为您在使用之前总是为其指定一个新值(secondSplit)。我建议删除该声明,并将外部循环内的行更改为:firstSplit[i].split(",")。这将避免不必要地分配一块内存。

其次,除非我不理解你的目标,否则当阵列宽度与它的高度不同时,你会遇到问题。您只需要String[] secondSplit = firstSplit[i].split(",");,因为您将count的长度初始化为numbers[i],而不是需要的实际大小。我将您的代码更改为:

firstSplit.length

现在它只是声明他们实际需要的变量,并将内部数组设置为他们需要的大小。