Чтение двумерного массива с консоли с помощью Enter
Как сделать чтобы при вводе в консоль например "1 2 3 4 5" я нажал Enter и это была первая строка массива.Потом так несколько раз. А чтобы закончить ввод нужно просто нажать Enter не вводя ничего. + как реализовать сравнение строк чтобы если они были неодинаковые, то высветилось сообщение о том, что они не равны и нужно ввести массив заново
public static int[] toIntArray(String str) {
Scanner scanner = new Scanner(str);
scanner.useLocale(Locale.ROOT);
scanner.useDelimiter("(\\s|[,;])+");
List<Integer> list = new ArrayList<>();
while (scanner.hasNext()) {
list.add(scanner.nextInt());
}
// из List<Integer> можно получить Integer[]
Integer[] arr = list.toArray(new Integer[0]);
// Integer[] -> int[]
int[] result = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
// автоматическая распаковка из объекта
result[i] = arr[i];
}
return result;
}
public static int[] readIntArrayFromConsole() {
Scanner scanner = new Scanner(System.in);
while (true) {
try {
System.out.print("Введите массив: ");
String line = scanner.nextLine();
return toIntArray(line);
} catch (Exception e) {
System.out.print("Вы ошиблись, попробуйте еще раз! \n");
}
}
}```
Я смог сделать ввод одномерного массива в консоли, но мне кажется что даже этот код можно сделать проще
Ответы (1 шт):
Автор решения: Алексей Р
→ Ссылка
Вариант. Если очередная строка с числами некорректная (их кол-во не равно кол-ву в первой строке или это не числа), то предлагается ввести эту строку, а не весь массив, заново.
import java.util.*;
public class Main {
public static int[] toIntArray(String str) {
ArrayList<Integer> list = new ArrayList<>();
for (String l : str.split(" ")) {
try {
list.add(Integer.parseInt(l));
} catch (Exception e) {
return null;
}
}
return list.stream().mapToInt(i -> i).toArray();
}
public static int[][] readIntArrayFromConsole() {
Scanner scanner = new Scanner(System.in);
int[] a;
int len = 0;
int counter = 0;
String line;
ArrayList<int[]> arr = new ArrayList<>();
System.out.println("Введите массив построчно, разделяя элементы пробелами");
while (true) {
System.out.printf("Строка %d:", counter);
line = scanner.nextLine();
if (line.strip().length() == 0) break;
a = toIntArray(line);
if (a != null && (len == 0 || len == a.length)) {
len = a.length;
arr.add(counter++, a);
}
}
int[][] res = new int[arr.size()][len];
for (int i = 0; i < arr.size(); i++) res[i] = arr.get(i);
return res;
}
public static void main(String[] args) {
System.out.println(Arrays.deepToString(readIntArrayFromConsole()));
}
}
Введите массив построчно, разделяя элементы пробелами
Строка 0:1 2 3
Строка 1:4 5 6
Строка 2:aa bb cc
Строка 2:7 8 9
Строка 3:11 12
Строка 3:11 12 13
Строка 4:
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [11, 12, 13]]