Блок 1. Раздел 1. Тема 2

Делаем текстовую игру
в вопросы и ответы

Давайте сразу сделаем небольшую текстовую игру. Мы просто распечатаем вопрос, считаем число с клавиатуры, и сравним его с правильным ответом. В дальнейших темах мы разберем подробнее каждое из действий, а пока что познакомимся с ними в целом на полезном примере.
Сначала напишем псевдокод нашей будущей программы. Псевдокод - упрощенный код, который послужит для понимания происходящего. Если программа "не видна" во всех деталях сразу, советую писать сначала псевдокод - так легче понять, что происходит, чтобы потом уже перевести все в настоящий Java код.

Программа 
начало 
          распечатай строчку "Привет!" 
          распечатай строчку "Сколько будет 2*2?" 
          считай число х с клавиатуры 
          если х равен 4, то 
                    распечатай строчку "Умён!" 
          иначе 
                    распечатай строчку "Бывает.." 
конец 
Как видите, псевдокод понятен интуитивно. Компьютер будет просто исполнять команду за командой, и сначала поприветствует пользователя, спросит его вопрос, считает число с ответом, сравнит, правильный ли ответ. Если правильный, то похвалит, а если нет, то нет.

Теперь прочтите соответствующий код на Java. Кстати // означает комментарий - он не включен в код самой программы и служит только для пояснения.

package javaapplication_book_1_1_2_text;

// импортируем стандартный класс Scanner, 
// он будет нужен для считывания числа с клавиатуры
import java.util.Scanner;

// Сначала стандартная шапка с именем класса и проекта
public class JavaApplication_book_1_1_2_text {

    public static void main(String[] args) {        
// говорим "Привет" и спрашиваем вопрос       
// лучше поначалу на английском, русский нужно задавать в настройках проекта
        System.out.println ("Hello!"); 
        System.out.println ("What is 2*2?");
        
// Создаем свой Сканер и называем его myscan
// Scanner - класс, в котором написано все для считывания (сканирования) с клавиатуры
// подробнее расскажем в следующих уроках, пока что можем пользоваться myscan.
        Scanner myscan = new Scanner (System.in); // new значит "создать новый" Scanner 
        
// int сокращение от integer - целое число.
// Заведем целое число и назовем его x
// приравняем его в начале к нулю.
        int x = 0; // число с именем и типом называется "переменная"
        
// запустим сканер клавиатуры myscan
// scan.nextInt () - означает запустить функцию nextInt для чтения "следующего int",
        x = scan.nextInt (); // приравнять переменную x значению scan.nextInt ()
        
// Блок if-else, то есть "если верно условие, то делай { ...} иначе делай {...}
// в скобках {  } указывается код, который выполнится в первом или втором случае
// Заметьте разницу: x = 4 значит изменить значение переменной x на 4
// При этом x== 4 значит сравнить значение x с четверкой
        if (x == 4) { // если ответ правильный, то распечатать похвалу
            System.out.println ("Good!");
        }else { // иначе распечатать, что пользователь ошибся
            System.out.println ("Bad..");
        } // конец else
        
    } // конец main

} // конец класса и так как больше в программе кода нет, то и программы тоже
Сравните псевдокод и Java код. По сути они одинаковые, хоть Java код и выглядит значительно сложнее. Просто в Java много специфических обозначений - они нужны, чтобы программа точно знала, что ей делать, ведь обычная русская речь бывает неоднозначной, сложной для понимания машиной.

Конечно, если вы видите код на Java в первый раз, то слишком много нового - не волнуйтесь, каждое из введенных понятий мы разберем в следующих темах. Сейчас хотелось просто сразу показать "боевую" программу, делающую что-то полезное.

Еще в Java нам нужны "действующие лица" - объекты. В данном случае нам пригодился объект класса Scanner, который мы сами назвали myscan. То есть мы говорим "создать myscan - некоторый Сканер, который будет читать текст с клавиатуры". Это сделано в следующей строчке кода:

Scanner myscan = new Scanner (System.in);
эта строчка читается как "Сканер myscan объявляется и будет равен новый-new Сканер с параметром System.in" . Именно этот System.in и указывает, что мы читаем с клавиатуры. System.in - поток ввода с клавиатуры. Кроме этого в скобках можно было указать чтение из файла или по каналу связи через интернет.
Аналогично мы создали переменную x, чтобы хранить целое число. Сначала мы положили его равным нулю:

int x = 0; // объявить целое число с именем x и приравнять его в начале к нулю
Затем изменяем его значение - приравниваем тому, что вернет нам функция "считать с клавиатуры целое число" myscan.nextInt() , принадлежащая нашего сканеру под названием myscan:

x = scan.nextInt (); // приравнять переменную x значению scan.nextInt ()
Результат работы функции myscan.nextInt() будет подставлен прямо в код в место вызова функции. То есть вместо myscan.nextInt() будет стоять 4, если пользователь ввел 4, или другое число, если пользователь ввел что-то другое. Именно это нам нужно проверить в блоке сравнения if-else:

if (x == 4) { // если верно, что x равен 4, то распечатать похвалу
            System.out.println ("Good!");
}else { // иначе распечатать, что пользователь ошибся
            System.out.println ("Bad..");
} // конец else
В результате получилась наша первая полезная программа - она проверяет, все ли знают, сколько будет дважды два :)

В следующих темах мы подробнее разберем каждый из использованных инструментов - как создавать переменные и проводить с ними вычисления, как устроен Scanner, как работать с блоком if-else и многие другие.

А сейчас ответьте на пару вопросов для лучшего понимания пройденного.
Переходите в следующие темы - мы рассмотрим подробнее переменные, Scanner, if-else и многое другое.
В следующей теме расскажем как вычислять полезные вещи с помощью переменных