このコードはプレーンテキストファイルから各行を読み込みます(各行は整数の配列の "リスト"を持ちます)。一時配列に格納されます。文書の各行は、同じ数の行と列を持つ2次元配列に配置する必要があります。Javaの "break"は両方のループのネストされていないようです
"if"ステートメントを使用して条件をテストするコード行は、内部forループのみを中断し、外側に戻ってiをインクリメントし、その行の次の配列に移動することになっています。
これまでのコードでは、各行で最初の配列のみを取り出し、2次元配列の最初の行に配置しますが、その行の他の配列をすべてスキップして次の行に移動します。それは同じことをします。したがって、内部ループは1回進みますが、外部ループは決して増加しません。私が読んだすべての記事では、ネストされた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の各項目は、整数に変換され、次のような配列に配置されます。 [0] [0]に6、[0] [1]に10、[0] [2]に15、 0] [3]。
次の配列[16、2、14、7]は完全に無視されます。
これはいいキャッチです:) –
これは私が見つけられなかった非常に簡単な解決策でした!私はそれがjavaに新しいです。ありがとうございました。 – galaxyphoenix67
@ galaxyphoenix67うれしかった。あなたのコードをよりきれいにし、壊れにくい提案を投稿にいくつか追加しました(あなたの意図を正しく理解していることを前提にしています。 – resueman