Я хочу ввести данные в виде одной строки с пробелами, а затем ввести эти данные в двумерный массив.
String[][] examples = new String[100][100];
for (int i = 0; i < 2; i++) {
System.out.println("enter line " + i);
String line = sc.next();
String[] linearr = line.split("\\s+");
for (int j = 0; j < 5; j++) {
examples[i][j] = linearr[j];
System.out.println(linearr[j]);
}
}
Только linearr[0] получает значение, введенное ...linearr[1] , linearr[2], поэтому не получать значения, а скорее говорит индекс за пределами.
Безусловно, лучший способ узнать, что не так с этим кодом, - это использовать мощный отладчик, встроенный в вашу IDE, для пошагового выполнения оператора кода за оператором, проверки содержимого переменных и т. д. Использование отладчика - это нет продвинутый навык. Это одна из первых вещей, которую должен выучить новичок вскоре после своей первой программы "hello world".




Вы хотели получить строку, но ваш текущий код получает только слово на ввод.
Вместо того, чтобы использовать:
String line=sc.next(); //receive a word
Измените его на:
String line=sc.nextLine(); //receive a line
so on dont get values rather says index out of bounds.....
Вместо использования 5 количество строковых токенов из разделения можно использовать в качестве управления циклом для вашего внутреннего цикла, поэтому вы можете захотеть:
for(int j=0; j < linearr.length; j++)
Это предотвратит появление IndexOutOfBoundsException, когда на входе меньше 5 слов.
Вместо sc.next():
String line=sc.next();
Вам следует использовать:
String line=sc.nextLine();
Because next() can read input only till space and should be used for only single word.And if you are about to read a line you should use nextLine()
Узнать больше прочитайте это
sc.next() возвращает только первое слово.
sc.nextLine() возвращает всю строку.
И вместо
for(int j=0;j<5;j++)
{
examples[i][j]=linearr[j];
System.out.println(linearr[j]);
}
ты можешь просто сделать
examples[i] = linearr;
В этом случае вы можете инициализировать new String[100][].
Попробуйте
String line=sc.nextLine();.