我得到了 .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甚至不是一个声明,它保留并且没有使用,部分原因是因为它没有在java中使用!但是如果有人知道除了goto之外的其他声明会链接回标签请告诉我,我将非常感激!
更新:我可以指出我没有做到这一点。
答案 0 :(得分:3)
答案 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;
}
}
有一些替代方法可以将当前状态表示为实现接口的对象,使用可以调用的方法来完成工作并获取表示下一个状态的对象。
几乎可以肯定,这段代码是自动生成的,不是由人类编写的,也不是通过反编译或其他方式编写的。在人工编写的代码中很少使用标识符中的“$”。它实际上看起来就像我在编译器中看到的代码,它是从正式语法自动生成的。
如果可以,我同意之前的建议,即尝试使用真正的来源。