Ответ @ rempas хорош, хотя я бы заменил вычисление входного индекса простым индексом «следующего значения».
String a = "1 2 -3 4.5 5 6.5 7.5 8 9";
double[][] matrix = new double[3][3];
String[] nums = a.split(" ");
for (int i = 0, k = 0; i < matrix.length; i++) { // <== Initialize k here
for (int j = 0; j < matrix[i].length; j++) {
matrix[i][j] = Double.parseDouble(nums[k++]); // <== Simpler code
}
}
System.out.println(Arrays.deepToString(matrix));
Выход
[[1.0, 2.0, -3.0], [4.5, 5.0, 6.5], [7.5, 8.0, 9.0]]
Jagged Array
Это заставит его работать, даже если 2D-массив jagged .
String a = "1 2 -3 4.5 5 6.5 7.5 8 9";
double[][] matrix = new double[][] { new double[2], new double[3], new double[4] }; // <== Jagged array
String[] nums = a.split(" ");
for (int i = 0, k = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
matrix[i][j] = Double.parseDouble(nums[k++]);
}
}
System.out.println(Arrays.deepToString(matrix));
Вывод
[[1.0, 2.0], [-3.0, 4.5, 5.0], [6.5, 7.5, 8.0, 9.0]]
Сканер
В качестве альтернативы вместо split()
и k++
logi c используйте Scanner
.
String a = "1 2 -3 4.5 5 6.5 7.5 8 9";
double[][] matrix = new double[3][3];
try (Scanner sc = new Scanner(a)) { // <== Use Scanner
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
matrix[i][j] = sc.nextDouble(); // <== Use Scanner
}
}
}
System.out.println(Arrays.deepToString(matrix));
Выход
[[1.0, 2.0, -3.0], [4.5, 5.0, 6.5], [7.5, 8.0, 9.0]]