Reached end of file while parsing java ошибка перевод

My question is very simple. I am just wondering what the reached end of file while parsing error actually means / is. Why this error actually occurs. In addition, how I could avoid it. Before you say that this is a duplication of question it really isn’t because most questions I looked at are just examples with code. That is not what I am looking for I am just looking for a clear cut answer of why this error happens what it is / means, and how to avoid it that is it.

NOTE: I don’t understand «reached the end of the file». I know what parsing is, but I don’t know what it means by reached the end of file: while parsing. I also just want to now how to avoid this error, and why it occurs not just to understand it.

halfer's user avatar

halfer

19.8k17 gold badges99 silver badges185 bronze badges

asked Mar 27, 2017 at 22:42

user7282043's user avatar

8

You could avoid this error by fixing the syntax in the code causing the parser to expect additional closing syntax indicators (like a right curly-brace). Also check the responses to the duplicate questions because they clearly explain what are generally the syntactical causes of same error.

answered Mar 27, 2017 at 22:51

Steve Harris's user avatar

2

public class HexStringConverter
{    
    public static String[] hexStrings = {"2ae43", "8g023", "249abc", "2354aer23", "234245"};введите сюда код
    public static void main (String [] args)
    {
        //given variables

        char[] hexCharArray = hexStrings[0].toCharArray();

        //define the allowed characters (hex alphabet) and print them out
char [] HexAlphabet={'a','b','c','d','e','f','0','1','2','3','4','5','6','7','8','9'};
System.out.print(" Zugelassene Hex-Alphabet Zeichen:");
for (int i = 0; i< HexAlphabet.length; i = i + 1 )
{
System.out.print(HexAlphabet[i]+"  ");
}

        //auxiluary variables
boolean STRING=true;
boolean CHAR=false;
long R=0;
for( int a=0; a<hexStrings.length;a=a+1)
{
hexCharArray=hexStrings[a].toCharArray();
STRING=true;
R=0;

            //check if the string contains only valid HEX-Value-signs
        for(int b=0; b<hexCharArray.length;b=b+1)
        {
            STRING=false;
            for(int c=0; c<HexAlphabt.length;c=c+1)
            {
                if(hexCharArray[b]==HexAlphabet[c])
                CHAR=true;
            }
            if(!CHAR)
            {
                STRING=false;
            }
        }
            //if valid calculate decimal value
            // calculation of powers (Hochzahlen) is done with Math.pow(double a, double b) method.
            // e.g. Math.pow(16,0) --> 1 or Math.pow( 16,2) --> 256
            if(STRING)
            {
                int PLATZ=0;
                for(int b=hexCharArray.length-1;b>=0;b=b-1)
                {
                    for(int c=0; c<HexAlphabet;c=c+1)
                    {
                        if(hexCharArray[b]==HexAlphabet[k])
                        {
                            R=R+c*(int)Math.pow(16,PLATZ);
                            PLATZ=PLATZ+1;
                        }
                    }
                }
                System.out.println("Der Dezimalwert des Hex-Strings "+hexStrings[a]+" ist "+R);
            }
            else
            {
                System.out.println("Der String "+ hexStrings[a]+", ist kein gueltiger Hex-String.");
            }
    }
}

package com.javarush.task.task04.task0408;

/*
Хорошо или плохо?
*/

public class Solution {
    public static void main(String[] args) {
        compare(3);
        compare(6);
        compare(5);
    }

    public static void compare(int a) {
...
}

ошибка:
com/javarush/task/task04/task0408/Solution.java:23: error: reached end of file while parsing
}
^

reached end of file while parsing:
Solution.java, line: 23, column: 2

оригинал:50 Common Java Errors and How to Avoid Them (Part 1)
Автор:Angela Stringfellow
перевод: Гусь напуган

Примечание переводчика: в этой статье представлены 20 распространенных ошибок компилятора Java. Каждая ошибка включает фрагменты кода, описания проблем и предоставляет ссылки по теме, которые помогут вам быстро понять и решить эти проблемы. Ниже приводится перевод.

При разработке программного обеспечения Java вы можете столкнуться со многими типами ошибок, но большинства из них можно избежать. Мы тщательно отобрали 20 наиболее распространенных ошибок программного обеспечения Java, включая примеры кода и руководства, которые помогут вам решить некоторые распространенные проблемы с кодированием.

Чтобы получить дополнительные советы и рекомендации по написанию программ на Java, вы можете загрузить наш «Comprehensive Java Developer’s Guide«Эта книга содержит все, что вам нужно, от всевозможных инструментов до лучших веб-сайтов и блогов, каналов YouTube, влиятельных лиц в Twitter, групп в LinkedIn, подкастов, мероприятий, которые необходимо посетить, и многого другого.

Если вы используете .NET, прочтите нашРуководство по 50 наиболее распространенным программным ошибкам .NETЧтобы избежать этих ошибок. Но если ваша текущая проблема связана с Java, прочтите следующую статью, чтобы понять наиболее распространенные проблемы и способы их решения.

Ошибка компилятора

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

1. “… Expected”

Эта ошибка возникает, когда в коде чего-то не хватает. Обычно это происходит из-за отсутствия точки с запятой или закрывающей скобки.

private static double volume(String solidom, double alturam, double areaBasem, double raiom) {
double vol;
    if (solidom.equalsIgnoreCase("esfera"){
        vol=(4.0/3)*Math.pi*Math.pow(raiom,3);
    }
    else {
        if (solidom.equalsIgnoreCase("cilindro") {
            vol=Math.pi*Math.pow(raiom,2)*alturam;
        }
        else {
            vol=(1.0/3)*Math.pi*Math.pow(raiom,2)*alturam;
        }
    }
    return vol;
}

Обычно это сообщение об ошибке не указывает точное местонахождение проблемы. Чтобы найти проблему, вам необходимо:

  • Убедитесь, что все открывающие скобки имеют соответствующие закрывающие скобки.
  • Посмотрите на код перед строкой, обозначенной ошибкой. Эта ошибка обычно обнаруживается компилятором в более позднем коде.
  • Иногда некоторые символы (например, открывающая скобка) не должны быть первыми в коде Java.

Примеры:Ошибка из-за отсутствия скобок。

2. “Unclosed String Literal”

Если в конце строки отсутствует кавычка, создается сообщение об ошибке «Незамкнутый строковый литерал», и это сообщение отображается в строке, где произошла ошибка.

 public abstract class NFLPlayersReference {
    private static Runningback[] nflplayersreference;
    private static Quarterback[] players;
    private static WideReceiver[] nflplayers;
    public static void main(String args[]){
    Runningback r = new Runningback("Thomlinsion");
    Quarterback q = new Quarterback("Tom Brady");
    WideReceiver w = new WideReceiver("Steve Smith");
    NFLPlayersReference[] NFLPlayersReference;
        Run();// {
        NFLPlayersReference = new NFLPlayersReference [3];
        nflplayersreference[0] = r;
        players[1] = q;
        nflplayers[2] = w;
            for ( int i = 0; i < nflplayersreference.length; i++ ) {
            System.out.println("My name is " + " nflplayersreference[i].getName());
            nflplayersreference[i].run();
            nflplayersreference[i].run();
            nflplayersreference[i].run();
            System.out.println("NFL offensive threats have great running abilities!");
        }
    }
    private static void Run() {
        System.out.println("Not yet implemented");
    }     
}

Обычно эта ошибка возникает в следующих ситуациях:

  • Строка не заканчивается кавычками. Это легко изменить, просто заключите строку в указанные кавычки.
  • Строка превышает одну строку. Длинную строку можно разделить на несколько коротких строк и соединить знаком плюс («+»).
  • Кавычки, являющиеся частью строки, не экранируются обратной косой чертой («»).

Прочтите эту статью:Сообщение об ошибке незакрытой строки。

3. “Illegal Start of an Expression”

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

Обычно выражение создается для генерации нового значения или присвоения значений другим переменным. Компилятор ожидает найти выражение, но посколькуГрамматика не оправдывает ожиданийВыражение не найдено. Эту ошибку можно найти в следующем коде.

} // добавляем сюда
       public void newShape(String shape) {
        switch (shape) {
            case "Line":
                Shape line = new Line(startX, startY, endX, endY);
            shapes.add(line);
            break;
                case "Oval":
            Shape oval = new Oval(startX, startY, endX, endY);
            shapes.add(oval);
            break;
            case "Rectangle":
            Shape rectangle = new Rectangle(startX, startY, endX, endY);
            shapes.add(rectangle);
            break;
            default:
            System.out.println("ERROR. Check logic.");
        }
        }
    } // удаляем отсюда
    }

Прочтите эту статью:Как устранить ошибки «неправильное начало выражения»。

4. “Cannot Find Symbol”

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

cannot-find-symbol-error-screenshot-11495

Сообщение об ошибке «Не удается найти символ» может иметь множество причин:

  • Написание объявления идентификатора может не соответствовать написанию, используемому в коде.
  • Переменная никогда не объявлялась.
  • Переменная не объявлена ​​в той же области видимости.
  • Никакие классы не импортируются.

Прочтите эту статью:Обсуждение ошибки «не удается найти символ»。

5. “Public Class XXX Should Be in File”

Если класс XXX и имя файла программы Java не совпадают, будет сгенерировано сообщение об ошибке «Открытый класс XXX должен быть в файле». Только когда имя класса и имя файла Java совпадают, код может быть скомпилирован.

package javaapplication3;  
  public class Robot {  
        int xlocation;  
        int ylocation;  
        String name;  
        static int ccount = 0;  
        public Robot(int xxlocation, int yylocation, String nname) {  
            xlocation = xxlocation;  
            ylocation = yylocation;  
            name = nname;  
            ccount++;         
        } 
  }
  public class JavaApplication1 { 
    public static void main(String[] args) {  
        robot firstRobot = new Robot(34,51,"yossi");  
        System.out.println("numebr of robots is now " + Robot.ccount);  
    }
  }

Чтобы решить эту проблему, вы можете:

  • Назовите класс и файл с тем же именем.
  • Убедитесь, что два имени всегда совпадают.

Прочтите эту статью:Примеры ошибки «Открытый класс XXX должен быть в файле»。

6. “Incompatible Types”

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

test.java:78: error: incompatible types
return stringBuilder.toString();
                             ^
required: int
found:    String
1 error

Когда компилятор выдает сообщение «несовместимые типы», решить эту проблему действительно непросто:

  • Используйте функции преобразования типов.
  • Разработчикам может потребоваться изменить исходные функции кода.

Взгляните на этот пример:Присвоение строки целому числу приведет к ошибке «несовместимые типы».。

7. “Invalid Method Declaration; Return Type Required”

Это сообщение об ошибке означает, что тип возвращаемого значения метода не объявлен явно в объявлении метода.

public class Circle
{
    private double radius;
    public CircleR(double r)
    {
        radius = r;
    }
    public diameter()
    {
       double d = radius * 2;
       return d;
    }
}

Есть несколько ситуаций, которые вызывают ошибку «недопустимое объявление метода; требуется тип возвращаемого значения»:

  • Забыл объявить тип.
  • Если метод не имеет возвращаемого значения, вам необходимо указать «void» в качестве возвращаемого типа в объявлении метода.
  • Конструктору не нужно объявлять тип. Однако, если в имени конструктора есть ошибка, компилятор будет рассматривать конструктор как метод без указанного типа.

Взгляните на этот пример:Проблема именования конструктора вызывает проблему «недопустимое объявление метода; требуется тип возвращаемого значения».。

8. “Method in Class Cannot Be Applied to Given Types”

Это сообщение об ошибке более полезно, оно означает, что метод был вызван с неправильными параметрами.

RandomNumbers.java:9: error: method generateNumbers in class RandomNumbers cannot be applied to given types;
generateNumbers();

required: int[]

found:generateNumbers();

reason: actual and formal argument lists differ in length

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

Это обсуждение иллюстрируетОшибки Java, вызванные несовместимостью объявлений методов и параметров в вызовах методов。

9. “Missing Return Statement”

Когда в методе отсутствует оператор возврата, выдается сообщение об ошибке «Отсутствует оператор возврата». Метод с возвращаемым значением (тип, не являющийся недействительным) должен иметь оператор, который возвращает значение, чтобы значение можно было вызвать вне метода.

public String[] OpenFile() throws IOException {
    Map<String, Double> map = new HashMap();
    FileReader fr = new FileReader("money.txt");
    BufferedReader br = new BufferedReader(fr);
    try{
        while (br.ready()){
            String str = br.readLine();
            String[] list = str.split(" ");
            System.out.println(list);               
        }
    }   catch (IOException e){
        System.err.println("Error - IOException!");
    }
}

Есть несколько причин, по которым компилятор выдает сообщение «отсутствует оператор возврата»:

  • Оператор возврата был опущен по ошибке.
  • Метод не возвращает никакого значения, но тип не объявлен как недействительный в объявлении метода.

пожалуйста, проверьтеКак устранить ошибку «отсутствует отчет о возврате»Это пример.

10. “Possible Loss of Precision”

Когда информация, присвоенная переменной, превышает верхний предел, который может нести переменная, выдается ошибка «Возможная потеря точности». Как только это произойдет, часть информации будет отброшена. Если это не проблема, переменную следует явно объявить в коде как новый тип.

possible-loss-of-precision-error-11501

Ошибка «возможная потеря точности» обычно возникает в следующих ситуациях:

  • Попробуйте присвоить переменной целочисленного типа действительное число.
  • Попробуйте присвоить данные типа double переменной целочисленного типа.

Основные типы данных в JavaОбъясняет характеристики различных типов данных.

11. “Reached End of File While Parsing”

Это сообщение об ошибке обычно появляется, когда в программе отсутствует закрывающая фигурная скобка («}»). Иногда эту ошибку можно быстро исправить, добавив закрывающую скобку в конце кода.

public class mod_MyMod extends BaseMod
public String Version()
{
     return "1.2_02";
}
public void AddRecipes(CraftingManager recipes)
{
   recipes.addRecipe(new ItemStack(Item.diamond), new Object[] {
      "#", Character.valueOf('#'), Block.dirt
   });
}

Приведенный выше код приведет к следующей ошибке:

java:11: reached end of file while parsing }

Инструменты кодирования и правильные отступы кода могут упростить поиск этих несоответствующих фигурных скобок.

Прочтите эту статью:Отсутствие фигурных скобок вызовет сообщение об ошибке «достигнут конец файла при синтаксическом анализе».。

12. “Unreachable Statement”

Когда оператор появляется в месте, где он не может быть выполнен, выдается ошибка «Недоступный оператор». Обычно это делается после оператора break или return.

for(;;){
   break;
   ... // unreachable statement
}
int i=1;
if(i==1)
  ...
else
  ... // dead code

Обычно эту ошибку можно исправить, просто переместив оператор return. Прочтите эту статью:Как исправить ошибку «Недостижимый отчет»。

13. “Variable Might Not Have Been Initialized”

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

int x;
if (condition) {
    x = 5;
}
System.out.println(x); // x не может быть инициализирован

Прочтите эту статью:Как избежать появления ошибки «Возможно, переменная не была инициализирована»。

14. “Operator … Cannot be Applied to ”

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

operator < cannot be applied to java.lang.Object,java.lang.Object

Эта ошибка часто возникает, когда код Java пытается использовать строковые типы в вычислениях (вычитание, умножение, сравнение размеров и т. Д.). Чтобы решить эту проблему, вам необходимо преобразовать строку в целое число или число с плавающей запятой.

Прочтите эту статью:Почему нечисловые типы вызывают ошибки программного обеспечения Java。

15. “Inconvertible Types”

Когда код Java пытается выполнить недопустимое преобразование, возникает ошибка «Неконвертируемые типы».

TypeInvocationConversionTest.java:12: inconvertible types
found   : java.util.ArrayList<java.lang.Class<? extends TypeInvocationConversionTest.Interface1>>
required: java.util.ArrayList<java.lang.Class<?>>
    lessRestrictiveClassList = (ArrayList<Class<?>>) classList;
                                                     ^

Например, логические типы нельзя преобразовать в целые числа.

Прочтите эту статью:Как преобразовывать неконвертируемые типы в программном обеспечении Java。

16. “Missing Return Value”

Если оператор возврата содержит неверный тип, вы получите сообщение «Отсутствует возвращаемое значение». Например, посмотрите на следующий код:

public class SavingsAcc2 {
    private double balance;
    private double interest;
    public SavingsAcc2() {
        balance = 0.0;
        interest = 6.17;
    }
    public SavingsAcc2(double initBalance, double interested) {
        balance = initBalance;
        interest = interested;
    }
    public SavingsAcc2 deposit(double amount) {
        balance = balance + amount;
        return;
    }
    public SavingsAcc2 withdraw(double amount) {
        balance = balance - amount;
        return;
    }
    public SavingsAcc2 addInterest(double interest) {
        balance = balance * (interest / 100) + balance;
        return;
    }
    public double getBalance() {
        return balance;
    }
}

Возвращается следующая ошибка:

SavingsAcc2.java:29: missing return value 
return; 
^ 
SavingsAcc2.java:35: missing return value 
return; 
^ 
SavingsAcc2.java:41: missing return value 
return; 
^ 
3 errors

Обычно эта ошибка возникает из-за того, что оператор return ничего не возвращает.

Прочтите эту статью:Как избежать ошибки «Отсутствует возвращаемое значение»。

17. “Cannot Return a Value From Method Whose Result Type Is Void”

Эта ошибка Java возникает, когда метод void пытается вернуть какое-либо значение, например, в следующем коде:

public static void move()
{
    System.out.println("What do you want to do?");
    Scanner scan = new Scanner(System.in);
    int userMove = scan.nextInt();
    return userMove;
}
public static void usersMove(String playerName, int gesture)
{
    int userMove = move();
    if (userMove == -1)
    {
        break;
    }

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

public static int move()
{
    System.out.println("What do you want to do?");
    Scanner scan = new Scanner(System.in);
    int userMove = scan.nextInt();
    return userMove;
}

Прочтите эту статью:Как исправить ошибку «Невозможно вернуть значение из метода, тип результата которого недействителен»。

18. “Non-Static Variable … Cannot Be Referenced From a Static Context”

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

public class StaticTest {
    private int count=0;
    public static void main(String args[]) throws IOException {
        count++; //compiler error: non-static variable count cannot be referenced from a static context
    }
}

Чтобы устранить ошибку «Нестатическая переменная… На нее нельзя ссылаться из статического контекста», можно сделать две вещи:

  • Вы можете объявить переменные статическими.
  • Вы можете создавать экземпляры нестатических объектов в статических методах.

Пожалуйста, прочтите это руководство:Разница между статическими и нестатическими переменными。

19. “Non-Static Method … Cannot Be Referenced From a Static Context”

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

class Sample
{
   private int age;
   public void setAge(int a)
   {
      age=a;
   }
   public int getAge()
   {
      return age;
   }
   public static void main(String args[])
   {
       System.out.println("Age is:"+ getAge());
   }
}

Вызовет эту ошибку:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Cannot make a static reference to the non-static method getAge() from the type Sample

Чтобы вызвать нестатический метод в статическом методе, необходимо объявить экземпляр класса вызываемого нестатического метода.

Прочтите эту статью:Разница между нестатическими и статическими методами。

20. “(array) Not Initialized”

Если массив был объявлен, но не инициализирован, вы получите сообщение об ошибке типа «(массив) не инициализирован». Длина массива фиксирована, поэтому каждый массив необходимо инициализировать требуемой длиной.

Следующий код правильный:

AClass[] array = {object1, object2}

это тоже нормально:

AClass[] array = new AClass[2];
...
array[0] = object1;
array[1] = object2;

Но это не так:

AClass[] array;
...
array = {object1, object2};

Прочтите эту статью:О том, как инициализировать массив в Java。

Продолжение следует

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

Перейти к содержанию

Достигнут конец файла во время разбора

На чтение 1 мин. Просмотров 202 Опубликовано 19.06.2021

Сообщение об ошибке Java Достигнут конец файла при синтаксическом анализе возникает, если закрывающая фигурная скобка для блока кода (например, метода, класса) отсутствует.

Исправить просто – просто проверьте свой код.

Пример

В приведенном ниже коде метод main не завершается закрывающей фигурной скобкой. Компилятор не может правильно проанализировать код и выдаст ошибку.

 public class Main {
public static void main (String [] args) {
System.out.println ("Ой, пропустил фигурную скобку ..");
}

Как избежать ошибки

Поскольку эта ошибка является одновременно распространенной, и ее легко избежать с помощью редактора кода, такого как Visual Studio Code, или интегрированной среды разработки, такой как Eclipse. Редакторы кода, в которых есть линтеры и средства проверки синтаксиса для Java (или любого другого языка, который вы используете), обнаружат ошибки перед попыткой компиляции.

  • Rdrcef exe ошибка приложения
  • Rdr2 ошибка 0 99380000
  • Rdr 2 ошибка fff unknown error лицензия
  • Rdr 2 ошибка err gfx d3d deferred mem
  • Rdr2 exe системная ошибка