JavaRush /Курсы /Java Syntax New Beta /Популярные ошибки компилятора

Популярные ошибки компилятора

Java Syntax New Beta
11 уровень , 5 лекция
Открыта

— Здравствуй, салага, который каждый день делает кучу ошибок даже в простейших программах!

— Эм… Привет, Диего. Однако умеешь ты приободрить!.

— Конечно умею! Умей зреть в суть. Сказано же — “каждый день”. В переводе с мизантропического эта фраза значит “будущий успешный программист, если, конечно, не забьет”.

— Ооо, ну тогда спасибо, о самый металлический мой учитель!.

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

Забыли точку с запятой

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

— Чистая правда… Грешил этим неоднократно..

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

Примеры ошибочных ситуаций:

Код с ошибками Исправленный код
int a
int b = 5
int c = a + b
int a;
int b = 5;
int c = a + b;
System.out.println("Hello")
System.out.println("Hello");
if (2 > 3)
   System.out.println("Мы в Австралии?")
if (2 > 3)
   System.out.println("Мы в Австралии?");
11
Задача
Java Syntax Pro, 11 уровень, 5 лекция
Недоступна
Сравнение строк
В методе main объявлены переменные типа String. В консоли выводится результат их сравнения: если строки равны, выводится true, иначе — false. Тебе нужно раскомментировать одну строку, чтобы получился следующий вывод: true true Тело метода main менять нельзя: можно только раскомментировать одну стр

Забыли закрыть кавычки

— Вторая самая популярная ошибка новичков в Java — написать в коде строку и забыть закрыть кавычки.

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

Код с ошибками Исправленный код
String s = "Привет;
String s = "Привет";
System.out.println("Hello);
System.out.println("Hello");
String s = "Привет";
String message = s + " и пока. ;
String s = "Привет";
String message = s + " и пока.";
11
Задача
Java Syntax Pro, 11 уровень, 5 лекция
Недоступна
Два айфона
В методе main создаются два айфона с одинаковыми параметрами. В консоли выводится результат их сравнения. Разберись, почему сейчас результат отрицательный и сделай так, чтобы он был положительным. Для этого тебе нужно переопределить метод equals(Iphone), который будет учитывать все параметры. У двух

Забыли знак плюс при склеивании строк

— Еще одна частая ошибка при работе со строками — забыли написать знак плюс при склеивании строк. Особенно часто эта ошибка возникает, когда в коде в длинном выражении склеивается текст и переменные.

Примеры таких ситуаций:

Код с ошибками Исправленный код
String s = "Привет";
String message = s  " и пока.";
String s = "Привет";
String message = s + " и пока.";
int age = 35;
System.out.println("Age=" age);
int age = 35;
System.out.println("Age=" + age);
int age = 35;
System.out.println("Age=", age);
int age = 35;
System.out.println("Age=" + age);
11
Задача
Java Syntax Pro, 11 уровень, 5 лекция
Недоступна
Создаем свой hashCode
Напиши свою реализацию hashCode, используя переменные model и year. Если эти поля у двух объектов одинаковые, то должен возвращаться одинаковый hashCode. Если правильно реализовать метод hashCode, вывод должен быть таким: true true true true false false

Забыли закрыть фигурные скобки

— Это очень распространенная ошибка. Обычно она возникает в двух случаях:

  1. Ты решил скопировать откуда-то код и случайно пропустил некоторые фигурные скобки.
  2. Ты вообще не следишь за тем, чтобы каждой открывающей скобке соответствовала закрывающая скобка.

— Второй случай — это мой вариант. Иногда так увлекаюсь, что забываю!.

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

Примеры:

Код с ошибками Исправленный код
if (2 < 3)
{
   if (3 < 4)
   {
      System.out.println("Математика!");
   }
if (2 < 3)
{
   if (3 < 4)
   {
      System.out.println("Математика!");
   }
}
{
   if (2 < 3)
   {
      if (3 < 4)
      {
         System.out.println("Математика!");
      }
   }
{
   if (2 < 3)
   {
      if (3 < 4)
      {
         System.out.println("Математика!");
      }
   }
}

Забыли написать круглые скобки

— Чаще всего эту ошибку делают программисты, которые знают языки программирования, где в аналогичных ситуациях круглые скобки не обязательны.

Первый вариант — банально забыли поставить скобки в конце вызова метода:

Второй вариант — забыли обернуть в скобки условие оператора if-else.

Примеры:

Код с ошибками Исправленный код
System.out.println("Привет!");
System.out.println;
System.out.println("И пока!");
System.out.println("Привет!");
System.out.println();
System.out.println("И пока!");
if 2 < 3
{
   if 3 < 4
   {
      System.out.println("Математика!");
   }
}
if (2 < 3)
{
   if (3 < 4)
   {
      System.out.println("Математика!");
   }
}

Неправильно написан заголовок метода main

— Как только не пишут многострадальный заголовок метода main! Наверное, ни над чем так не издеваются новички, как над этим бедным методом. И главное, потом всегда удивляются: а чего это наша программа не запускается? И, конечно, дело не в программисте, а в программе, компиляторе, валидаторе, Java-машине. Список виновных можно продолжать бесконечно.

Примеры:

Код с ошибками Пояснение
static void main(String[] args)
Пропущен public
public void main(String[] args)
Пропущен static
public main(String[] args)
Пропущен static и void
void main(String[] args)
Пропущены public и static
public static void main(String args)
Пропущены []
public static void main()
Пропущены String[] args
public static int main(String[] args)
Вместо void написано int

Имя файла отличается от имени класса

— Согласно стандарту, все классы в Java должны храниться в файле, название которого совпадает с именем класса. И как уже раньше говорилось, регистр букв тут тоже имеет значение:

Имя файла Имя класса Примечание
Solution.java Solution Все отлично
Solutions.java Solution Лишняя буква s в названии файла
solution.java Solution Название файла с маленькой буквы
Solution.txt Solution Расширение файла txt вместо Java
Solution.java solution Название класса с маленькой буквы

— Вообще-то в файле с расширением java может быть объявлено несколько классов, но только у одного из них перед именем может быть слово public. Вот его-то имя и должно совпадать с именем файла.

— В файле с расширением java всегда должен быть класс, имя которого совпадает с именем файла, и у него есть модификатор public. Пример:

Solution.java
public class Solution
{
}

class Apple
{
}

class Pineapple
{
}

— Также в языке Java разрешено писать классы в классах. Это тоже способ обойти озвученное выше ограничение. Если в файле объявлен публичный класс (с модификатором public), имя которого совпадает с именем файла, внутри этого публичного класса можно объявлять сколько угодно классов. Хотя это уже будут не обычные, а внутренние или вложенные классы. Пример:

Solution.java
public class Solution
{
   public class Apple
   {
   }

   public static class Pineapple
   {
   }
}

Забыли написать package

— Поскольку в программах обычно тысячи классов, всем из них сложно подобрать простые, понятные и уникальные имена. Поэтому в Java все классы принято группировать по пакетам — package. Точно так же, как файлы группируются по папкам.

— Ага, поэтому в начале каждого класса нужно писать пакет, которому он принадлежит..

— Именно. Вот пример:

Код без пакета Исправленный пример
public class Solution
{
}
package com.javarush.tasks.task0001;

public class Solution
{
}

Забыли добавить import

— Если мы хотим в нашей программе использовать какой-то чужой класс, у нас есть два варианта: мы должны везде в нашем коде писать перед именем этого класса еще и имя его пакета. Или же мы можем один раз написать полное имя класса со словом import. Пример:

Без использования import С использованием import
public class Solution
{
   java.util.Scanner scanner = new java.util.Scanner();
}
import java.util.Scanner;

public class Solution
{
 Scanner console = new Scanner();
}

— Оба варианта рабочие, но вот если ты в своем коде будешь писать просто Scanner, а import не добавишь, компилятор не сможет понять, из какого пакета ему нужно брать класс Scanner, и компилировать программу не будет.

— Спасибо, Диего. Эта лекция заставит меня быть внимательнее..

— На это и был расчёт. Удачи!

Комментарии (35)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Максим Уровень 22 Expert
20 августа 2023
Всё таки интересно когда темы так меняются местами,хаахха Сначала лупим задачи на двумерные массивы,метод Math.,конструкторы и так далее,а потом мне попадаются задачки на то где я должен расставлять точки с запятой ;)
Null_Pointer_Ninja Уровень 24
6 августа 2023
Задачи уровня easy, однако для себя почерпнул новое из задачки "Многострадальный метод main". В задачке отсылочка на аргументы переменной длины, и нам main в целом можно сделать методом с переменной арностью и всё будет работать (передача методу произвольного кол-ва аргументов). Т.е. в случае решения задачи с передачей аргументов в метод в ранних версиях Java было 2 способа: 1. Случай, когда максимальное количество аргументов заранее известно предусматривал создание перегруженных версий метода по одной для каждого варианта вызова метода. 2. Случай, когда максимальное количество аргументов было большим и не известным - аргументы помещались в массив, который затем передавался методу. Третий случай - аргумент переменной длины, о котором компилятору сообщаем через три точки ... Пример: static void sample( int ...args) { Тут ...args неявно объявляется как массив типа int[].
Максим Уровень 22 Expert
20 августа 2023
всё это верно,да. Но решение ведь в другом,не путайте новичков)
Null_Pointer_Ninja Уровень 24
24 августа 2023
Почему в другом? Работать будет и с многоточием и со скобками.
Максим Уровень 22 Expert
24 августа 2023
да,я сделал акцент на то что в конкретной задаче для её решения не нужно ничего в параметрах менять )
kiranis Уровень 13
4 июля 2023
Там где про плюс при склеивании строк дублируется пример.
Basilius Уровень 33
2 апреля 2023
Условием таких задач должно быть решение вне IDE)
Timur Khasmamedov Уровень 14 Expert
31 января 2023
Какой все же мощный и полезный инструмент эта ваша IDE.
Ivan Уровень 7 Expert
24 ноября 2022
материи прилетело! норм, живём далее)))
mesler_ Уровень 24
23 ноября 2022
зафармил материи
mr. Drister Уровень 14
16 мая 2022
За все время прохождения курса я не допускал ошибок больше, чем на этих задачках))
Finding Happiness Уровень 13
30 декабря 2021
Задача из 9-го уровня: реализуйте метод, который получает строку в виде двоичного кода, переводит его в шестнадцатиричную систему счисления и отдаёт в виде строки. При этом, если в двоичном коде содержатся символы, отличные от 0 и 1, то вместо пересчета вывести уведомление об этом. Затем реализуйте метод, которые выполняет обратную процедуру и следит, чтобы на вход поступали только допустимые символы. ... Задача из 11-го уровня: поставьте ";" там, где не хватает. ШТА?
FuryCydonian Уровень 22
26 января 2022
у меня это на 7 уровне) ну типичные ошибки рассмотрели и потренировали их на изи задачах)))) дали отдохнуть, набрать материи и плюшек)