Задача решена, но непонятно вот что: по идее, во все четыре переменные (name, age, weight, tail) каждый раз должно записываться одно и то же значение - текущее из reader.readLine(). Каким образом машина разбирает, в какую переменную какое значение записать?
Валерий
13 уровень
Каким образом машина разбирает, в какую переменную какое значение записать?
Архивный
Комментарии (15)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #2322530
11 декабря 2020, 12:49
машина не разбирается, ты задаёшь порядок. ты же его и контролируешь
0
Валерий
11 декабря 2020, 14:26
Вот, для ясности, этот участок кода
public class Solution {
public final static ArrayList<Cat> CATS = new ArrayList<>();
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String name = reader.readLine();
String age = reader.readLine();
String weight = reader.readLine();
String tailLength = reader.readLine();
if (name == null || name.isEmpty()) {
break;
}
Cat cat = new Cat(name, Integer.parseInt(age), Integer.parseInt(weight), Integer.parseInt(tailLength));
CATS.add(cat);
}
В цикле переменным присваивается значение reader.readLine(). Почему это делается по очереди, а не всем сразу? Каким образом задан порядок?
Если я напишу
int a;
int b = a;
int c = a;
То переменным b и c будет присвоено значение а, а не а1 и а2.
0
hidden #2322530
11 декабря 2020, 14:34
ты неправильный пример привёл в конце.
метод readLine() возвращает каждый раз новый объект типа String, где будет храниться считанная с консоли строка.
0
Валерий
11 декабря 2020, 14:36
Ну вот он его вернул, объект записался в name, а почему в age или weight не записался?
0
Ksenia VolkovaJava Developer в DXCMaster
11 декабря 2020, 14:45
Потому что код выполняется последовательно
Сначала выполняется строка
она считывает строку с консоли и записывает в переменную name.
Потом выполняется
считывает еще одну строку и записывает в переменную age.
И так далее.
0
Валерий
11 декабря 2020, 14:49
А чем задается этот порядок? Это какое-то свойство readLine()? Или BufferedReader reader? Потому что в самом коде нет никаких указаний на то, что это дорлжно делаться последовательно, а не параллельно.
0
hidden #2322530
11 декабря 2020, 14:51
код всегда выполняется сверху вниз, слева направо последовательно. команда за командой. последовательно.
0
Валерий
11 декабря 2020, 14:54
Ну хорошо. Вот мы ввели Барсик. Это записалось в name. Дальше ввели 7. Почему он не перезаписывается в name опять, а записывается в age минуя name?
0
Ksenia VolkovaJava Developer в DXCMaster
11 декабря 2020, 14:56
Потому что строчка, которая записывает в name, уже выполнилась. Дальше будет выполняться строчка, которая пишет в age.
0
hidden #2322530
11 декабря 2020, 14:57
to Валерий, ты прикалываешься?
0
Валерий
11 декабря 2020, 15:01
Нет Артем, я пытаюсь понять логику процесса. Фактически, мы имеем четыре вызова метода readLine() подряд. Почему каждый раз мы получаем разные значения? Ведь машина вызовет его гораздо быстрее, чем мы введем новое значение. Значит, все четыре раза метод должен вернуть одно и то же, нет?
0
Валерий
11 декабря 2020, 15:04
Например в С при вводе с консоли мы указываем для каждого значения свой адрес, там понятно, а здесь как это работает?
0
hidden #2322530
11 декабря 2020, 15:05
машина его вызовет. и будет ждать ввода. и пока ты не введешь строку, никуда машина дальше двигаться не будет.
0
Ksenia VolkovaJava Developer в DXCMaster
11 декабря 2020, 15:05
Нет. Машина вызовет метод быстро, но метод не завершится, пока не будет считано значение с клавиатуры, а оно не будет считано, пока ты его не введешь.
А следующий метод будет вызван только после того как завершится предыдущий.
Мы тоже указываем для каждого значения "адрес" - это и есть переменная.
0
Валерий
11 декабря 2020, 15:07
Спасибо, кажется, начинаю понимать.
0