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

Check list
популярных ошибок
раздела «Переменные»

В этой теме приведены популярные ошибки новичков по переменным и вычислениям. Прочтите внимательно - это очень поможет в ежедневной программистской практике, а также на экзаменах – полное понимание основ экономит время кодинга в разы. В начале разберем типы ошибок - времени компиляции и выполнения.
В редакторе вы пишите Java код, понятный человеку, его практически можно было читать на английском языке. Компилятор читает ваш файл с расширением .java и преобразует его в байт-код с расширением .jar или .exe. Этот байт-код может быть исполнен на любом компьютере, телефоне, планшете, если на нём есть исполняющая машина java (Java runtime machine JRM или что практически то же самое java runtime environment JRE). Байт-код уже почти не читаем для человека и удобен для выполнения процессором компьютера – это сплошная последовательность команд, какие числа надо сложить, вычесть, умножить или поделить, какой модуль машины Java вызвать.

Определение. Преобразование программы из кода в исполняемый файл называется компиляцией.
Определение. Ошибкой времени компиляции называют ошибку, которая делает невозможной компиляцию программы.

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

Например, у вас всё работает, но при вводе какого-то числа программа останавливается. Или же все работает, все нормально, только программа выводит на экране ноль, а должна вывести цену продукта.
Список популярных ошибок
1. В конце каждого предложения пишем точку с запятой. Иначе Java скажет "missing ;" то есть "отсутствует точка с запятой".

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

int x = 10; // точка с запятой на месте
x = x + 20; 
Неправильный вариант:

int x = 10  // нет точки с запятой
x = x + 20  // Java подумает, что вы хотите выполнить сразу две строки, и будет ошибка
2. Тип переменной указывается только при объявлении, больше его нигде в том же блоке фигурных скобок { .. } указывать не нужно. Ошибка будет звучать как "variable x is already defined" - "переменная x уже определена".

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

int x = 10; // Java знает – это целое 
x = 20; //Больше указывать int не нужно 
Неправильный вариант:

int x = 10; 
int x = 20; //Второй int ошибочен, x уже и так объявлена 
3. Аналогичное правило – при объявлении переменной её тип следует указать, иначе Java скажет "Cannot find symbol", то есть «не знаю, что это за слово». Проще говоря, где-то указать тип переменной нужно. Где именно – при первом её упоминании.

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

int x = 10; // Java знает – это целое 
x = 20; 
Неправильный вариант:

x = 10; // Cannot find symbol x 
x = 20; 
4. Нельзя объявлять две переменные с одним и тем же именем.

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

int x = 10;
double y = 20.2;
Неправильный вариант:

int x = 10;
double x = 20.2; // указав тип, мы говорим "объявить новый х"
// но переменная х уже объявлена строчкой выше


5. Целочисленное деление часто ведет к неверным результатам:

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

double x = 1.0/3; // Делаем дробное деление - сохраняем в double 
Неправильный вариант:

double x = 1/3; // 1/3 = 0 
/*Ниже Java попросит явно указать, что вы хотите полностью выбросить дробную часть: */ 
int y = 1.0/3; 
6. Переменные умирают по достижении закрывающей фигурной скобки – после этого к ним нельзя обращаться.

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

public static void main(String[] args) {
 int x = 10;
 x = 20;
}
Неправильный вариант:

public static void main(String[] args) {
 int x = 10; 
} 
x = 20; // ошибка – за этой фигурной скобкой x уже нет. 

7. То же самое и если внутри оператора If была объявлена переменная, то вне if она уже становится неизвестной:

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

int y = 5; 
int x = 10; // объявили до ифа, так как хотим использовать не только в нем
if (y < 20) { 
 x = x + 10; 
} 
x = 30; 
Неправильный вариант:

int y = 5; 
if (y < 20) { 
 //икс умрет в конце if 
 int x = 10; 
 x = x + 10; 
} 
x = 30; // доступ уже запрещен 
8. Когда мы храним букву или цифру или один символ, то нужно указывать одинарные кавычки и использовать тип char:

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

char c = '+'; 
char some_char_var = 'k'; 
Неправильный вариант:

// ошибка, двойные кавычки только для строк типа String, не для char: 
char c = "+"; // кавычка " для строк, где могут быть много символов, а не один

// Ниже ошибка - компилятор решит, что k – это какая-то переменная, 
// о которой он ничего не знает. 
// Чтобы хранить символ, возьмите его в одинарные кавычки: 
char some_char_var = k; // нужно 'k'
Решайте больше задач по этому разделу здесь.
Раздел закончился - обязательно порешайте задачи в задачнике по ссылке выше, а потом переходите к следующему разделу про if-else.