Типы данных

Типы данных и переменные

Тип данных показывает, какие данные хранятся в переменной и какие операции для них подходят.

Базовые термины программирования:

  • Объявление переменной связывает имя переменной с типом данных
  • Переменная хранит значение некоторого типа данных
  • Присваивание записывает значение в переменную.
  • Литерал — это запись конкретного значения прямо в коде.
  • Выражение — это комбинация имён переменных, литералов и операторов, которая вычисляется в значение.

Как работает оператор присваивания

Java сначала вычисляет выражение справа от знака =, а потом оператор присваивания записывает полученное значение в переменную слева.

Задачи для тренировки: переменные

1. Корректен ли такой фрагмент?

int a = 1;
123 = a;

Ответ

Некорректно.

Слева от оператора присваивания должна стоять переменная. 123 — это литерал, ему нельзя присвоить значение.


2. Корректен ли такой фрагмент?

double a = 2.5;
int b = a;

Ответ

Некорректно.

Справа значение типа double, а слева переменная типа int. Такое присваивание без явного преобразования типа нельзя.


3. Корректен ли такой фрагмент?

String s = 123;

Ответ

Некорректно.

Переменная s имеет тип String, а справа стоит числовой литерал 123, а не строка.


4. Корректен ли такой фрагмент?

int b = 2;
int a = 3 * b;

Ответ

Корректно.

Справа от = может стоять выражение. Сначала Java вычисляет 3 * b, потом записывает результат в a.


5. Корректен ли такой фрагмент?

int a = 3;
a = 2 * a;

Ответ

Корректно.

Переменной можно присваивать новое значение. Здесь сначала вычисляется 2 * a, потом результат записывается в ту же переменную a.


6. Корректен ли такой фрагмент?

int a = 2 * a;

Ответ

Некорректно.

В выражении справа используется переменная a, но до этого ей еще не присвоили начальное значение.

Имена переменных

Хорошее имя помогает быстро понять, что хранится в переменной.

  • имя должно подсказывать смысл значения: speed, time, totalSeconds
  • в Java имена переменных обычно записывают в lowerCamelCase: firstName, carSpeed, totalSeconds
  • имя не должно начинаться с цифры
  • в имени не используют пробелы и дефисы
  • короткие имена a, b, x лучше оставлять только для коротких формул

Пример понятных имен:

int speed = 90;
int time = 8;
int distance = speed * time;

System.out.println(distance);

Вывод
720

То же вычисление с короткими именами читать сложнее:

int a = 90;
int b = 8;
int c = a * b;

System.out.println(c);

Вывод
720

Короткие имена уместны в короткой математической записи:

int a = 7;
int b = 5;
int x = a + b;

System.out.println(x);

Вывод
12

Трассировка

Трассировка помогает пошагово проследить, как в программе меняются значения переменных.

Рассмотрим задачу:


Даны длина и ширина прямоугольника. Длину увеличили на 2, а ширину уменьшили на 1. На сколько изменилась площадь прямоугольника?


Для решения будем использовать переменные: в них сохраним исходные данные, промежуточные результаты и ответ.

Проследите выполнение программы на слайдах ниже и посмотрите, как на каждом шаге меняются значения переменных.

Задачи для тренировки: трассировка

1. Какими станут a и b после выполнения этого кода?

int a = 1234;
int b = 99;

int temp = a;
a = b;
b = temp;

Ответ

В конце:

a = 99
b = 1234

Сначала в temp сохраняется старое значение a, потом a и b меняются местами.


2. Чему будет равно d после выполнения этого кода?

int a = 6;
int b = 7;

int s1 = a * b;

a = a + 1;
b = b + 1;

int s2 = a * b;

int d = s2 - s1;

Ответ

В конце:

d = 14

По шагам:

s1 = 6 * 7 = 42
a = 7
b = 8
s2 = 7 * 8 = 56
d = 56 - 42 = 14

3. Какими станут a и b после выполнения этого кода?

int a = 1234;
int b = 99;

a = a + b;
b = a - b;
a = a - b;

Ответ

В конце:

a = 99
b = 1234

Это тоже обмен значений местами, но без дополнительной переменной.


4. Чему будет равно x в конце выполнения этого кода?

int a = 4;
int b = 3;

int x = a + b;
a = x - a;
b = x - b;
x = a * b;

Ответ

В конце:

x = 12

По шагам:

x = a + b = 7
a = x - a = 7 - 4 = 3
b = x - b = 7 - 3 = 4
x = a * b = 3 * 4 = 12

5. Какими станут a и b после выполнения этого кода?

int a = 10;
int b = 4;

a = a - b;
b = a + b;
a = b - a;

Ответ

В конце:

a = 4
b = 10

По шагам:

a = a - b = 6
b = a + b = 10
a = b - a = 4

Строковый тип данных: String

String используется для ввода-вывода, хранения и обработки текстов.

Примеры выражений со строками:

Выражение Значение Комментарий
"My " + "Precious" "My Precious" пробелы внутри строк важны
"1234" + "99" "123499" строки не складываются как числа
"A" + "B" + "C" "ABC" можно склеивать несколько строк в одном выражении
"Привет, " + "мир!" "Привет, мир!" поддерживается Unicode

Обратите внимание: при склеивании строк новую часть можно добавить и в конец строки, и в её начало.

Проследите, как по шагам меняются значения переменных first и second в этой программе:

String first = "мама";         // В переменную first записали строку "мама".
String second = "кот";         // В переменную second записали строку "кот".

second = second + "ик";        // К "кот" добавили справа "ик". Получилось "котик".
first = "супер" + first;       // К "мама" добавили слева "супер". Получилось "супермама".
second = first + second;       // Склеили "супермама" и "котик". Получилось "супермамакотик".

Ввод-вывод строк

Вывод строк

Для вывода строк используют System.out. С его помощью программа выводит текст на экран.

Вызов Что делает
System.out.print(x) Печатает x без перевода строки
System.out.println(x) Печатает x и переводит строку
System.out.println() Просто переводит строку

Основные способы вывода строк

Одни и те же строковые значения можно вывести по-разному: в одной строке или построчно.

Если два строковых значения нужно вывести в одной строке, используют System.out.print(...).

String first = "кот";
String second = "дом";

System.out.print(first);
System.out.print(" ");
System.out.print(second);

Вывод
кот дом

Если те же строковые значения нужно вывести построчно, используют System.out.println(...).

String first = "кот";
String second = "дом";

System.out.println(first);
System.out.println(second);

Вывод
кот
дом

Если рядом со строкой стоит число, Java автоматически превращает число в текст и склеивает его со строкой.

int age = 12;
System.out.println("Возраст: " + age);

Вывод
Возраст: 12

Ввод строк

Для ввода строк в Java обычно используют Scanner.

Scanner in = new Scanner(System.in);
Вызов Что считывает
in.next() Следующее слово до пробельного символа
in.nextLine() Всю строку до перевода строки

Основные способы ввода строк

Если два строковых значения разделены пробелом, используют next().

String first = in.next();
String second = in.next();

System.out.println(second + " " + first);

Ввод
кот дом
Вывод
дом кот

next() читает по словам, поэтому и пробел, и перевод строки работают для него как разделители.

Если каждое строковое значение находится на отдельной строке, используют nextLine().

String first = in.nextLine();
String second = in.nextLine();

System.out.println(second + " " + first);

Ввод
кот
дом
Вывод
дом кот

Задачи для тренировки: строки

1. Что выведет программа?

String first = "кот";
String second = "ик";

System.out.print(first);
System.out.println(second);
System.out.println(first + second);

Ответ

Программа выведет:

котик
котик

Сначала print(first) печатает кот без перехода на новую строку, потом println(second) дописывает ик и переводит строку.


2. Что выведет программа?

int age = 12;

System.out.println("Возраст: " + age);
System.out.println(age + " лет");

Ответ

Программа выведет:

Возраст: 12
12 лет

Число рядом со строкой автоматически превращается в текст.


3. Какой метод нужно поставить вместо ???, если на вход подаётся одна строка:

кот дом
String first = in.???;
String second = in.???;

System.out.println(second + " " + first);

Ответ

Нужно поставить:

next()
next()

next() читает по одному слову до пробела, поэтому он подходит для ввода кот дом.


4. Какой метод нужно поставить вместо ???, если на вход подаются две строки:

кот
дом
String first = in.???;
String second = in.???;

System.out.println(second + " " + first);

Ответ

Нужно поставить:

nextLine()
nextLine()

Здесь каждое значение находится на отдельной строке, поэтому читаем строки целиком.


5. Что выведет программа?

String a = "ма";
String b = "ма";

System.out.println(a);
System.out.print(b);
System.out.println();
System.out.println(a + b);

Ответ

Программа выведет:

ма
ма
мама

Первый println(a) печатает ма и переводит строку. Потом print(b) печатает второе ма, а пустой println() просто переводит строку.


6. Какое значение будет у second в конце выполнения этого кода?

String first = "ма";
String second = "кот";

second = first + second;
second = "супер" + second;

Ответ

В конце:

second = "супермакот"

По шагам:

second = "макот"
second = "супермакот"

7. Что выведет программа?

String s = "ро";
s = s + "бот";
s = "су" + s;

System.out.println(s);

Ответ

Программа выведет:

суробот

По шагам:

s = "робот"
s = "суробот"

8. Какое значение будет у text в конце выполнения этого кода?

String text = "A";
text = text + "B";
text = text + text;

Ответ

В конце:

text = "ABAB"

По шагам:

text = "AB"
text = "ABAB"

9. Какое значение будет у answer в конце выполнения этого кода?

String first = "дом";
String second = "ик";

String word = first + second;
String answer = "супер" + word;

Ответ

В конце:

answer = "супердомик"

По шагам:

word = "домик"
answer = "супердомик"

Целочисленные типы данных: int и long

int и long используют для хранения целых чисел и вычислений без дробной части.

int

Этот тип подходит для счёта, количества предметов, номеров и других задач, где не нужны дроби.

Если в выражении участвуют только значения типа int, результат тоже будет иметь тип int.

Примеры выражений с типом int:

Выражение Значение Комментарий
20 + 3 23 сложение
20 - 3 17 вычитание
20 * 3 60 умножение
20 / 3 6 дробная часть отбрасывается
20 % 3 2 остаток от деления
21 % 5 1 остаток после деления на 5
38 % 10 8 последняя цифра числа
24 % 2 0 проверка на чётность
20 / 0 ошибка на ноль делить нельзя
2147483647 + 1 -2147483648 переполнение типа int

Обратите внимание: при делении двух int ответ тоже остаётся целым числом.

Если значение выходит за границы типа int, происходит переполнение. Поэтому очень большие целые числа в int хранить нельзя.

long

long используют для хранения больших целых чисел.

Этот тип нужен, когда значения не помещаются в int. Например, если в задаче встречаются миллиарды, очень большие расстояния или результаты больших вычислений.

По размеру long больше, чем int.

Примерные диапазоны такие:

  • int: от -2 000 000 000 до 2 000 000 000
  • long: от -9 000 000 000 000 000 000 до 9 000 000 000 000 000 000

Литералы типа long обычно записывают с суффиксом L.

Примеры:

long population = 5000000000L;
long distance = 12000000000L;
long stars = 0L;

Если большое число записать без суффикса L, Java сначала воспримет его как int, и возникнет ошибка.

long population = 5000000000; // будет ошибка

Если есть сомнение, хватит ли int, лучше сразу использовать long.

Как и у int, у типа long есть границы. Если значение выходит за них, происходит переполнение.

Ввод-вывод int и long

Для вывода int и long используют те же System.out.print(...) и System.out.println(...), что и для строк.

Для ввода целых чисел в Java обычно используют Scanner. Предполагается, что в программе уже есть:

Scanner in = new Scanner(System.in);
Вызов Что считывает
in.nextInt() Следующее целое число типа int
in.nextLong() Следующее целое число типа long

Основные способы ввода int и long

Обычные целые числа читают через nextInt(), а большие через nextLong().

Обратите внимание: результат nextLong() нужно сохранять в переменную типа long.

int days = in.nextInt();
long visitors = in.nextLong();

System.out.println(days);
System.out.println(visitors);

Ввод
12 5000000000
Вывод
12
5000000000

Приоритет арифметических операций

В выражениях с int и long сначала выполняются действия в скобках. Потом идут *, / и %. После этого выполняются + и -.

Если рядом стоят операции одного уровня, они выполняются слева направо.

Выражение То же самое Значение Комментарий
3 * 5 - 2 (3 * 5) - 2 13 * выполняется раньше -
20 + 5 / 2 20 + (5 / 2) 22 / выполняется раньше +
20 - 17 % 5 20 - (17 % 5) 18 % выполняется раньше -
18 / 5 * 2 (18 / 5) * 2 6 / и * имеют одинаковый приоритет
17 % 5 % 3 (17 % 5) % 3 2 % выполняется слева направо
20 % (7 - 3) 20 % 4 0 скобки меняют порядок вычислений

Эти задачи тренируют шаблоны, которые часто встречаются уже в самых первых задачах: извлечение цифр числа, перевод времени и разбиение суммы на рубли и копейки.

Задачи для тренировки: int, long, / и %

1. Чему равны выражения:

348 / 10
348 % 10

Ответ

Ответ:

348 / 10 = 34
348 % 10 = 8

Деление на 10 убирает последнюю цифру, а остаток от деления на 10 даёт последнюю цифру.


2. Дано положительное трёхзначное число n. Заполните пропуски, чтобы получить цифру сотен, десятков и единиц.

int hundreds = ???;
int tens = ???;
int ones = ???;

Ответ

int hundreds = n / 100;
int tens = n / 10 % 10;
int ones = n % 10;

3. Дано int totalMinutes = 135;. Чему будут равны hours и minutes?

int hours = totalMinutes / 60;
int minutes = totalMinutes % 60;

Ответ

Ответ:

hours = 2
minutes = 15

4. Дано int totalSeconds = 3672;. Заполните пропуски и найдите значения переменных.

int hours = ???;
int minutes = ???;
int seconds = ???;

Ответ

int hours = totalSeconds / 3600;
int minutes = totalSeconds % 3600 / 60;
int seconds = totalSeconds % 60;

Получится:

hours = 1
minutes = 1
seconds = 12

5. Дано int totalHours = 53;. Сколько это суток и часов?

int days = totalHours / 24;
int hours = totalHours % 24;

Ответ

Ответ:

days = 2
hours = 5

6. Что выведет программа?

long rub = 12;
long kop = 35;
long pieces = 4;

long total = (rub * 100 + kop) * pieces;
System.out.println(total / 100 + " " + total % 100);

Ответ

Программа выведет:

49 40

По шагам:

12 руб 35 коп = 1235 коп
1235 * 4 = 4940 коп
4940 / 100 = 49 руб
4940 % 100 = 40 коп

7. Что выведет программа?

int x = 20 - 17 % 5 * 2;
System.out.println(x);

Ответ

Программа выведет:

16

По шагам:

17 % 5 = 2
2 * 2 = 4
20 - 4 = 16

8. Какой тип нужно выбрать для числа 5000000000 и как правильно записать это значение в коде?

Ответ

Нужен тип long.

long value = 5000000000L;

В int такое число не помещается.

Вещественный тип данных: double

double используют для хранения вещественных чисел.

Этот тип нужен, когда у значения может быть дробная часть: длина, время, скорость, площадь, среднее значение.

Литералы типа double обычно записывают с точкой. Также можно использовать экспоненциальную запись с буквой E.

Если в выражении участвуют значения типа double, результат тоже будет иметь тип double.

Примеры выражений с типом double:

Выражение Значение Комментарий
1.5 + 0.25 1.75 сложение вещественных чисел
1.5 - 0.25 1.25 вычитание вещественных чисел
1.5 * 2.0 3.0 умножение вещественных чисел
5.0 / 3.0 1.6666666666666667 результат может быть приближённым
5.5 % 2.0 1.5 остаток тоже может быть дробным
-1.0 / 0.0 -Infinity для double это не ошибка
0.0 / 0.0 NaN специальное значение «не число»

Обратите внимание: при делении двух double дробная часть сохраняется.

Чтобы получить вещественный результат, хотя бы одно число в делении должно иметь тип double.

System.out.println(7 / 2);       // 3
System.out.println(7.0 / 2.0);   // 3.5

Ввод-вывод double

Для вывода double используют те же System.out.print(...) и System.out.println(...), что и для строк.

Обычный print и println выводят число как есть.

Если нужно вывести число с определённым количеством цифр после точки, используют printf().

Вызов Что делает
System.out.printf("%.2f", value) Выводит число, оставляя 2 цифры после точки

Основной способ вывода double через printf

double value = 3.14659;

System.out.println(value);

System.out.printf("%.1f", value);
System.out.println();

System.out.printf("%.2f", value);
System.out.println();

System.out.printf("%.3f", value);

Вывод
3.14659
3.1
3.15
3.147

В записи %.2f число 2 означает: вывести 2 цифры после точки. При этом printf() округляет число только при выводе. Значение переменной не меняется.

В записи %.1f число 1 означает: оставить 1 цифру после точки. В записи %.2f останутся 2 цифры после точки.

Для ввода вещественных чисел в Java обычно используют Scanner.

Вызов Что считывает
in.nextDouble() Следующее вещественное число типа double

Основные способы ввода double

В вещественных числах используют точку, а не запятую.

double first = in.nextDouble();
double second = in.nextDouble();

System.out.println(first + second);

Ввод
2.5 1.75
Вывод
4.25

Логический тип данных: boolean

boolean используют для хранения логических значений.

Этот тип нужен, когда программа должна ответить на вопрос да или нет: чётное ли число, корректный ли месяц, равен ли нулю делитель.

Тип boolean имеет только два литерала:

true
false

Операторы равенства и сравнения

Чаще всего значение типа boolean получается в результате сравнения двух выражений.

Операторы равенства и сравнения сравнивают два выражения. Результат такого сравнения имеет тип boolean.

Оператор Смысл true false
== равно 2 == 2 2 == 3
!= не равно 3 != 2 2 != 2
< меньше 2 < 13 13 < 2
<= меньше или равно 2 <= 2 3 <= 2
> больше 13 > 2 2 > 13
>= больше или равно 2 >= 2 2 >= 3

Операторы равенства и сравнения в Java

Простые логические выражения часто выглядят так:

Вопрос Выражение Комментарий
Чётное ли число? (x % 2) == 0 остаток при делении на 2 должен быть равен нулю
Делитель равен нулю? denominator == 0 проверка перед делением
Количество минут делится на 60? (minutes % 60) == 0 используем остаток от деления

Логические операции

Если одного сравнения недостаточно, условия можно объединять с помощью логических операций !, && и ||.

Таблица истинности показывает, какое значение принимает логическое выражение при разных значениях true и false.

Выражение Значение
!false true
!true false

Таблица истинности для НЕ

Выражение Значение
false && false false
false && true false
true && false false
true && true true

Таблица истинности для И

Выражение Значение
false || false false
false || true true
true || false true
true || true true

Таблица истинности для ИЛИ

Составные условия часто выглядят так:

Вопрос Выражение Комментарий
Хотя бы одно из двух чисел положительное? (a > 0) || (b > 0) достаточно, чтобы хотя бы одно условие выполнялось
Месяц корректный? (month >= 1) && (month <= 12) оба условия должны быть истинны
Месяц некорректный? !((month >= 1) && (month <= 12)) отрицание готового условия

Приоритет операций

В выражениях сначала выполняются действия в скобках. Потом идут арифметические операции, затем сравнение. Среди логических операций сначала выполняется !, потом &&, потом ||.

Если рядом стоят операции одного уровня, они выполняются слева направо.

Выражение То же самое Значение Комментарий
2 + 3 * 4 == 20 (2 + (3 * 4)) == 20 false сначала *, потом +, потом ==
(2 + 3) * 4 == 20 (5 * 4) == 20 true скобки меняют порядок действий
7 % 2 == 1 && 5 > 3 ((7 % 2) == 1) && (5 > 3) true сравнения выполняются раньше &&
!(7 % 2 == 0) !((7 % 2) == 0) true сначала вычисляется выражение в скобках
true || false && false true || (false && false) true && выполняется раньше ||

Приоритет операций в выражениях

Даже если скобки не обязательны, их часто ставят, чтобы выражение было легче читать: (month >= 1) && (month <= 12).

Сравнение строк и чисел double

В Java строки сравнивают по тексту через equals().

String first = "кот";
String second = "кот";

System.out.println(first.equals(second));

Вывод
true

Здесь обе строки содержат один и тот же текст, поэтому equals() возвращает true.

Но если написать так:

String first = "ко";
String second = "т";
String word = first + second;

System.out.println(word == "кот");

Вывод
false

Хотя текст одинаковый, сравнение через == здесь не подходит.

Для чисел типа double после вычислений лучше не проверять точное равенство через ==.

Например:

double a = 0.1 + 0.2;
double b = 0.3;

System.out.println(a);
System.out.println(a == b);

Вывод
0.30000000000000004
false

Хотя на вид кажется, что должно получиться 0.3, после вычисления значение может отличаться совсем немного. Поэтому для double проверка через == после вычислений может дать неожиданный результат.

Задачи для тренировки: boolean

1. Чему равны выражения:

7 > 3
8 == 10
9 % 2 == 0

Ответ

Ответ:

7 > 3: true
8 == 10: false
9 % 2 == 0: false

2. Чему равны выражения:

!false
true && false
false || true

Ответ

Ответ:

!false: true
true && false: false
false || true: true

3. Заполните пропуски, чтобы проверить, что номер месяца корректный.

boolean correctMonth = (month >= ???) && (month <= ???);

Ответ

Нужно подставить:

1
12

Получится:

boolean correctMonth = (month >= 1) && (month <= 12);

4. Что выведет программа?

int x = 8;

System.out.println(x % 2 == 0);
System.out.println(x > 10);

Ответ

Программа выведет:

true
false

Число 8 чётное, но оно не больше 10.


5. Что выведет программа?

int a = 3;
int b = -2;

System.out.println((a > 0) || (b > 0));
System.out.println((a > 0) && (b > 0));

Ответ

Программа выведет:

true
false

Первое выражение истинно, потому что a > 0. Второе ложно, потому что b > 0 не выполняется.


6. Что выведет программа?

System.out.println(true || false && false);
System.out.println((true || false) && false);

Ответ

Программа выведет:

true
false

В первой строке сначала выполняется false && false, а во второй строке порядок меняют скобки.


7. Что выведет программа?

String first = "ко";
String second = "т";
String word = first + second;

System.out.println(word.equals("кот"));
System.out.println(word == "кот");

Ответ

Программа выведет:

true
false

equals() сравнивает текст строки, а == здесь не подходит для такого сравнения.

Преобразование типов

Преобразование типов нужно, когда значение уже есть, но для следующего действия нужен другой тип. Например, строку с числом нужно превратить в число, а результат целочисленного деления — в double.

Автоматические преобразования

Часть преобразований Java делает сама.

Если к строке прибавить число, это число автоматически превратится в строку.

String text = "x = " + 99;

System.out.println(text);

Вывод
x = 99

Если в числовом выражении участвует double, то значение типа int автоматически превращается в double.

double value = 11 * 0.25;

System.out.println(value);

Вывод
2.75

Здесь число 11 временно рассматривается как 11.0, поэтому результат тоже имеет тип double.

Преобразование строки в число

Если число хранится в строке, а дальше его нужно использовать в вычислениях, используют специальные методы.

Вызов Что получается
Integer.parseInt(text) строка превращается в int
Double.parseDouble(text) строка превращается в double

Преобразование строки в число

int a = Integer.parseInt("126");
double b = Double.parseDouble("2.5");

System.out.println(a);
System.out.println(b);

Вывод
126
2.5

Строка должна быть записана как число. Например, строку "12a" так преобразовать уже нельзя.

Явное преобразование

Явное преобразование нужно, когда в результате преобразования можно потерять часть данных. Тогда тип пишут в скобках перед выражением.

int a = (int) 2.71828;

System.out.println(a);

Вывод
2

При таком преобразовании из double в int дробная часть отбрасывается.

Так делают, когда в вычислении участвуют только int, а результат нужен вещественный.

int sum = 7;
int n = 2;

double first = sum / n;
double second = (double) sum / n;

System.out.println(first);
System.out.println(second);

Вывод
3.0
3.5

В первой строке деление происходит как int / int, поэтому получается 3. Во второй строке sum сначала превращается в double, и деление уже даёт точный ответ 3.5.

Выражение Тип Значение Комментарий
(7 / 2) * 2.0 double 6.0 сначала 7 / 2 даёт 3, потом результат превращается в double
(7 / 2.0) * 2 double 7.0 здесь деление сразу вещественное, потому что в выражении уже есть 2.0
"12" + 6 String "126" число превращается в строку, и получается склеивание текста
0 == false ошибка не вычисляется нельзя сравнивать int и boolean

Примеры преобразования типов в выражениях

Задачи для тренировки: преобразование типов

1. Чему равны тип и значение выражения?

"Возраст: " + 12

Ответ

Ответ:

тип: String
значение: "Возраст: 12"

Число автоматически превращается в строку.


2. Чему равны тип и значение выражения?

7 / 2.0

Ответ

Ответ:

тип: double
значение: 3.5

В выражении уже есть double, поэтому деление вещественное.


3. Заполните пропуски:

int a = Integer.???("126");
double b = Double.???("2.5");

Ответ

Нужно подставить:

parseInt
parseDouble

Получится:

int a = Integer.parseInt("126");
double b = Double.parseDouble("2.5");

4. Что выведет программа?

int a = (int) 5.9;
int b = (int) 2.1;

System.out.println(a);
System.out.println(b);

Ответ

Программа выведет:

5
2

При преобразовании из double в int дробная часть отбрасывается.


5. Что выведет программа?

int sum = 9;
int n = 2;

System.out.println(sum / n);
System.out.println((double) sum / n);

Ответ

Программа выведет:

4
4.5

В первой строке деление целочисленное, а во второй sum сначала превращается в double.


6. Какое из выражений нельзя вычислить?

"12" + 6
0 == false
7 / 2.0

Ответ

Нельзя вычислить:

0 == false

Здесь пытаются сравнить значения разных типов: int и boolean.

Типы данных

В C++ тип пишут перед именем переменной.

int count = 10;
double price = 19.99;
bool ok = true;
char letter = 'J';
string title = "Типы данных";

Чаще всего используются такие типы:

Что храним Тип Примеры значений
Обычные целые числа int 0, 7, -3, 2025
Большие целые числа long long 5000000000, 12000000000
Вещественные числа double 3.14, 0.5, -2.75
Ответы «да/нет» bool true, false
Один символ char 'A', '7', '+'
Текст string "Hello", "C++"

Как выбрать тип переменной для чисел

  • int подходит для обычных целых чисел примерно до \(2 \cdot 10^9\);
  • long long нужен, когда в условии встречаются миллиарды или большие произведения;
  • double используют, когда у числа есть дробная часть.

Можно сначала объявить переменную, потом присвоить значение:

int x;
x = 5;

double y;
y = 3.5;

Работа со строками

Для текста используют тип string.

string firstName = "Анна";
string lastName = "Иванова";
string fullName = firstName + " " + lastName;
cout << fullName << endl;

Вывод
Анна Иванова

Строки склеивают через +. Если в склеивании участвует число, используйте to_string(...).

int age = 12;
cout << "Возраст: " + to_string(age) << endl;

Вывод
Возраст: 12

Ввод на C++

Для ввода используют cin.

Как читать данные через cin

  • >> читает значение и записывает его в переменную;
  • числа читаются сразу в int, long long или double;
  • для string запись cin >> name читает одно слово до пробела.
string city;
long long visitors;
double temp;

cin >> city;
cin >> visitors;
cin >> temp;

cout << "Город: " << city << endl;
cout << "Жителей: " << visitors << endl;
cout << "Температура: " << temp << endl;

Ввод
Tula 468825 21.5
Вывод
Город: Tula
Жителей: 468825
Температура: 21.5

Если во входе есть отдельная строка целиком, а не одно слово, используйте getline(cin, line).

Если в одной строке два числа, cin прочитает их по очереди:

int speed;
int time;
cin >> speed >> time;
int dist = speed * time;
cout << dist << endl;

Ввод
90 8
Вывод
720

Простые числовые шаблоны

Какие шаблоны нужны уже в самых первых задачах

  • для положительных целых n / 10 убирает последнюю цифру: 57 / 10 дает 5;
  • если величина хранится в младшей единице, то whole = total / 100, part = total % 100.
int code = 57;
cout << code / 10 << endl;

Вывод
5

long long meters = 12;
long long centimeters = 35;
long long pieces = 4;
long long totalCm = (meters * 100 + centimeters) * pieces;
cout << totalCm / 100 << " " << totalCm % 100 << endl;

Вывод
49 40

Подробно про операции / и % рассказано в главе Целочисленная арифметика.

Вывод на C++

Для вывода используют cout.

Как работают cout и endl

  • cout << ... печатает данные;
  • endl переводит курсор на новую строку;
  • можно вывести текст и переменные в одной строке.

Проверим правила на примерах:

int points = 18;
int total = 20;
cout << "Результат: " << points << " из " << total << endl;

Вывод
Результат: 18 из 20

cout << "Первая строка" << endl;
cout << "Вторая строка" << endl;

Вывод
Первая строка
Вторая строка

Когда условие требует ровно один знак после запятой, подключите <iomanip> и используйте fixed << setprecision(1).

int meters = 260;
double kilometers = meters / 1000.0;
cout << meters << " m = " << fixed << setprecision(1) << kilometers << " km" << endl;

Вывод
260 m = 0.3 km

Имена переменных

Имена лучше делать понятными: count, price, time, dist. Имена a, b, x лучше использовать только в короткой математической записи.

Хорошее имя сразу подсказывает, что хранится в переменной.

Пример понятных имен:

int speed = 90;
int time = 8;
int dist = speed * time;
cout << dist << endl;

Вывод
720

То же вычисление с короткими именами читать сложнее:

int a = 90;
int b = 8;
int c = a * b;
cout << c << endl;

Вывод
720

Короткие имена уместны в короткой математической записи:

int a = 7;
int b = 5;
int x = a + b;
cout << x << endl;

Вывод
12


По материалам:
М. Густокашин. Введение в программирование на языке C++. Сириус Курсы. Перейти к курсу.

Типы данных

В Python переменная — это имя, которое ссылается на значение. Тип рядом с именем писать не нужно: Python определяет его по значению справа.

count = 10            # int
price = 19.99         # float
ok = True             # bool
title = "Типы данных" # str

Чаще всего используются такие типы:

Что храним Тип Примеры значений
Целые числа int 0, 7, -3, 2025, 5000000000
Вещественные числа float 3.14, 0.5, -2.75
Ответы «да/нет» bool True, False
Текст str "Привет", "Python"

Как выбрать тип переменной для чисел

  • int используют для целых чисел, в том числе очень больших;
  • отдельный тип long в Python не нужен: int автоматически расширяется;
  • float используют, когда у числа есть дробная часть.

Работа со строками

Строковый тип str используют для хранения текста.

first_name = "Анна"
last_name = "Иванова"
full_name = first_name + " " + last_name
print(full_name)

Вывод
Анна Иванова

Склеивание строк — это объединение частей в одну строку с помощью +. Если в склеивании участвует число, его сначала преобразуют в строку через str(...).

age = 12
print("Возраст: " + str(age))

Вывод
Возраст: 12

Ввод на Python

input() всегда возвращает строку. Если нужно прочитать число, сразу преобразуйте ввод:

age = int(input())
avg = float(input())
print(age + 1)
print(avg)

Ввод
12
4.6
Вывод
13
4.6

Если в одной строке несколько чисел, удобно читать их так:

speed, time = map(int, input().split())
dist = speed * time
print(dist)

Ввод
90 8
Вывод
720

Что делает map(int, input().split())

  • input() читает строку целиком, например "90 8";
  • split() делит строку на части по пробельным символам (пробелы, табы): ["90", "8"];
  • map(int, ...) применяет int к каждому элементу: получаются числа 90 и 8;
  • speed, time = ... раскладывает эти два числа по переменным.

Для строк тоже полезен split():

first_name, last_name = input().split()
print(last_name, first_name)

Типичная ошибка при вводе: если забыть int(...), то число останется строкой.

a = input()   # "2"
b = input()   # "5"
print(a + b)  # 25, а не 7

Ввод
2
5
Вывод
25

Правильный вариант:

a = int(input())
b = int(input())
print(a + b)

Ввод
2
5
Вывод
7

Простые числовые шаблоны

Какие шаблоны нужны уже в самых первых задачах

  • для положительных целых n // 10 убирает последнюю цифру: 57 // 10 дает 5;
  • если величина хранится в младшей единице, то whole = total // 100, part = total % 100.
code = 57
print(code // 10)

Вывод
5

meters = 12
centimeters = 35
pieces = 4
total_cm = (meters * 100 + centimeters) * pieces
print(total_cm // 100, total_cm % 100)

Вывод
49 40

Подробно про операции // и % рассказано в главе Целочисленная арифметика.

Вывод на Python

Для вывода используют print().

Как работает print()

  • если передать несколько значений через запятую, print выведет их через пробел;
  • по умолчанию после каждого вызова print добавляется перевод строки.

Проверим правила на примерах:

points = 18
total = 20
print("Результат:", points, "из", total)

Вывод
Результат: 18 из 20

print("Первая строка")
print("Вторая строка")

Вывод
Первая строка
Вторая строка

Когда условие требует ровно один знак после запятой, удобно использовать format(..., ".1f").

meters = 260
kilometers = meters / 1000
print(str(meters) + " m = " + format(kilometers, ".1f") + " km")

Вывод
260 m = 0.3 km

Имена переменных

Имена лучше делать понятными: count, price, time, dist. Имена a, b, x лучше использовать только в короткой математической записи.

Хорошее имя сразу подсказывает, что хранится в переменной.

Пример понятных имен:

speed = 90
time = 8
dist = speed * time
print(dist)

Вывод
720

То же вычисление с короткими именами читать сложнее:

a = 90
b = 8
c = a * b
print(c)

Вывод
720

Короткие имена уместны в короткой математической записи:

a = 7
b = 5
x = a + b
print(x)

Вывод
12