编译.java的错误? (去)

时间:2012-11-05 14:55:21

标签: java goto

enter image description here

enter image description here

我得到了 .java ,我想将其编译为 .class 。唯一的事实是,实际制作它的人使用了非常草率的代码。我有14个错误,他们都是一样的。有3行有所有错误。它们都有相同的错误,唯一的问题是我不知道如何修复它们。

代码包含错误示例:

if(!i$.hasNext()) 
    goto L2;
else 
    goto L1;

该错误位于goto,并且正在说illegal start of expression。这是第一个错误。

  • 另一个是L2并且正在说not a statement
  • 再次在其他地方'else without 'if'
  • 再次使用goto非法开始表达。

我也知道goto甚至不是一个声明,它保留并且没有使用,部分原因是因为它没有在java中使用!但是如果有人知道除了goto之外的其他声明会链接回标签请告诉我,我将非常感激!

更新:我可以指出我没有做到这一点。

4 个答案:

答案 0 :(得分:3)

goto未在java中实现。它是一个保留的关键字,但没有做任何事情。

之前已经问过这个问题:

Is there a goto statement in Java?

答案 1 :(得分:1)

Java没有goto语句。需要说明的是,goto Java中的保留关键字(请参阅Java语言规范的§3.9部分),但它没有任何用处。您提供的代码片段甚至无法编译。

从外观上看,您似乎正在查看代码的某些中间表示,或者是混淆/反编译的源(因为goto$变量标识符)。请务必查看原始 .java源代码文件。

答案 2 :(得分:0)

您可以使用标签和刹车

代替转到

前 - :

 mylable:  
  for (i = 0; i < 10; i++) {

            if (somecondition) {
               //doSomething()
               break mylable;
          }

     }

答案 3 :(得分:0)

这看起来似乎是尝试将状态机实现从goto语言转换为Java失败。

在Java中有几种构建状态机的方法。也许最简单的是循环内的switch语句。

while(!done) {
  switch(state) {
    case 1:
       ...
       break;
    case 4:
       if(!input.hasNext()) state = 2; else state = 1;
       break;
    case 5:
       ...
       break;
  }
}

有一些替代方法可以将当前状态表示为实现接口的对象,使用可以调用的方法来完成工作并获取表示下一个状态的对象。

几乎可以肯定,这段代码是自动生成的,不是由人类编写的,也不是通过反编译或其他方式编写的。在人工编写的代码中很少使用标识符中的“$”。它实际上看起来就像我在编译器中看到的代码,它是从正式语法自动生成的。

如果可以,我同意之前的建议,即尝试使用真正的来源。

相关问题