Скажите в чем разница между
size = Integer.parseInt(console.nextLine()); и size = console.nextInt;
Или если можно ссылку с кратким пояснением. Что то постоянно получается то и дело приходится забегать вперед по ходу лекций.
Вопрос в куске кода:
multiArray = new int[n][];
for (int i = 0; i < n; i++) {
int size = Integer.parseInt(console.nextLine());
multiArray[i] = new int[size];
}
Почему компилятор ругается именно во второй части, в первой же для N преспокойно можно использовать код
if (console.hasNextInt() && console.nextInt()>0)
n = console.nextInt();
else
System.exit(0);
А там где уже явно объявлен двухмерный массив, компилятору не нравится.
Serg
37 уровень
Поясните пожалуйста разницу в коде:
Решен
Комментарии (10)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia VolkovaJava Developer в DXCMaster
10 апреля 2021, 11:00
Ты осознаешь, что на >0 ты проверяешь одно число, а в переменную n кладешь уже другое?
0
Serg
10 апреля 2021, 11:23
Да спасибо я после проверки постоянного вывода понял что там уже следующая переменная считывается.
А в if (console.hasNextInt() && console.nextInt()>0) во второй части тоже идет считывание новой переменной с клавиатуры?
То есть правильнее сразу присвоить, а потом уже проверять? Но смысл тогда такой проверки, если мне надо проверка именно в момент ввода?
Вот этот момент никак не понимаю.
Наверно получается несколько сумбурно, просто пытаюсь досконально разобраться.
if(console.hasNextInt()) просто проверка? если же if (console.nextInt()>0) у нас явное считывание и каждое новое обращение к console.nextInt() вызывает считывание все новой и новой переменной с клавиатуры?
0
ГоффMaster
10 апреля 2021, 09:39
size = Integer.parseInt(console.nextLine());
size = console.nextInt();
Если console типа Scanner, то, в общем, разницы нет. Только в ньюансах.
Второй вопрос непонятен.
0
Serg
10 апреля 2021, 09:45
multiArray = new int[n][];
for (int i = 0; i < n; i++) {
int size = console.nextInt();
multiArray[i] = new int[size];
}
если делать вот так даже с проверками число это и тд, при вводе числа с клавиатуры время от времени идет вылет. если же size = Integer.parseInt(console.nextLine()); без проверок все всегда ок.
То есть мы уже приводим полученный ввод в удобоваримую форму получается.
0
ГоффMaster
10 апреля 2021, 10:13полезный
Если на входе не целое число, то в первом случае метод .nextInt() выкинет исключение (ошибку). А во втором случае метод .nextLine() без ошибок считает, но исключение выкинет метод .parseInt. И в том, и в другом случае, если на входе не целое число, произойдёт ошибка.
Время от времени вылет - я этого не понимаю. У компа фантазии нет, и настроение его время от времени не меняется, что бы он то так, то этак. В каких случаях вылет?
+1
Serg
10 апреля 2021, 10:55
Как я понял дело в двухмерном массиве. у нас получается две переменные в итоге Array[x][y].
Если мы объявили X, то уже Y до вывода элементов массива должен быть инициализирован и присвоено значение.
А в if (console.hasNextInt() && console.nextInt()) y = console.nextInt();
У нас Y пропадает при несовпадении условий. А выводить то массив как то надо.
Единственно надо мне разобраться в size = Integer.parseInt(console.nextLine());
0
Ksenia VolkovaJava Developer в DXCMaster
10 апреля 2021, 11:02
Ты бы свой код целиком показывал. Где у тебя первая часть, где вторая, где работает, где не работает - ничего не понятно...
0
Serg
10 апреля 2021, 11:28
Я к сожалению нажал проверить и задача прошла проверку, потому в заголовке не выложить.
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
int n = Integer.parseInt(console.nextLine());
multiArray = new int[n][];
for (int i = 0; i < n; i++) {
int size = Integer.parseInt(console.nextLine());
multiArray[i] = new int[size];
}
}
Вот код работает
Если вставляю
if (console.hasNextInt() && console.nextInt()>0)
n = console.nextInt();
То нет, то как я понимаю из-за того, что в n у нас попадает уже следующее число с клавиатуры. Мне интересно в чем разница между двумя методами.
+1
Ksenia VolkovaJava Developer в DXCMaster
10 апреля 2021, 12:03полезный
Да, эта вставка не рабботает именно потому, что тут ты считываешь не одно число, а два.
hasNextInt() ничего не считывает, он только определяет, есть ли там дальше число.
А вот nextInt() считывает, и каждый новый вызов считывает следующее число.
А между Integer.parseInt(console.nextLine()) и console.nextInt() принципиальной разницы нет.
nextInt точно так же считывает строку с консоли, передает в Integer.parseInt() и возвращает получившееся число.
+2
Serg
10 апреля 2021, 12:43
Спасибо за разъяснение.
0