0

在此处输入图像描述

在此处输入图像描述

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

带有错误示例的代码:

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

错误在 处有 iSgoto并且在说illegal start of expression。这是第一个错误。

  • 另一个是L2现在和正在说的地方not a statement
  • 又在 else 它说'else without 'if'
  • 再次使用 goto 非法的表达式开始。

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

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

4

4 回答 4

3

goto 没有在 java 中实现。它是一个保留关键字,但不执行任何操作。

之前有人问过这个问题:

Java中有goto语句吗?

于 2012-11-05T14:57:36.777 回答
1

Java 没有goto声明。需要明确的是,goto Java 中的保留关键字(参见Java 语言规范的第3.9节),但它没有任何用处。您提供的代码片段甚至无法编译。

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

于 2012-11-05T14:57:21.550 回答
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;
  }
}

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

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

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

于 2012-11-05T15:29:43.023 回答
0

你可以使用 lable 和 break 而不是 goto

前任- :

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

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

     }
于 2012-11-05T15:01:17.427 回答