【问题标题】:Error compiling a java into ,class (goto)将 java 编译成 ,class (goto) 时出错
【发布时间】:2015-08-17 05:14:29
【问题描述】:

这是我第一次编辑用java编写的程序,我只知道如何用PHP编程,问题是我正在编辑以前用Java编写的程序,就像我自己专门添加几行一样扩展其功能的代码(仅复制和粘贴)好吧,我有这个 WebScraper.class 文件,我可以反编译并将 java 转换为编辑,编译时出现以下错误:

我用 Eclipse 进行了测试,当我让 Run 什么都不做时,我尝试更改 JDK 的版本,但我在另一台计算机上没有尝试过,但仍然没有,我一直在阅读以前的回复是由于“goto”,但我没有设法修复它,因为我不知道这部分必须如何编程才能成功编译。非常感谢您的帮助,或者告诉我如何使用 Eclipse 或确切地解决我遇到的错误。

C:\Users\Tecnicom\Downloads\Prog>javac WebScraper.java
WebScraper.java:99: error: illegal start of expression
        if (i >= 3) goto _L2; else goto _L1
                    ^
WebScraper.java:99: error: not a statement
        if (i >= 3) goto _L2; else goto _L1
                         ^
WebScraper.java:99: error: 'else' without 'if'
        if (i >= 3) goto _L2; else goto _L1
                              ^
WebScraper.java:99: error: illegal start of expression
        if (i >= 3) goto _L2; else goto _L1
                                   ^
WebScraper.java:99: error: ';' expected
        if (i >= 3) goto _L2; else goto _L1
                                           ^
WebScraper.java:143: error: illegal start of expression
          goto _L3
          ^
WebScraper.java:144: error: ';' expected
_L2:
   ^
7 errors

我将显示显示错误的部分代码:

  static Hashtable parseFirmwarePage(String s)
    {
        Matcher matcher = pattern.matcher(s);
        Hashtable hashtable = new Hashtable();
        do
        {
            if(!matcher.find())
                break;
            String s1 = matcher.group(1);
            if(s1 != null && s1.trim().length() != 0 && displayFields.contains(s1))
            {
                String s3 = matcher.group(2);
                if(s3 != null && s3.trim().length() != 0 && !s3.toLowerCase().contains("todo"))
                    hashtable.put(matcher.group(1), s3);
            }
        } while(true);
        String s2 = String.format("%s_%s", new Object[] {
            hashtable.get("device"), hashtable.get("build")
        });
        if(s2.equalsIgnoreCase("ipod11_7E18"))
            hashtable.put("downloadurl", "iPod1,1_3.1.3_7E18_Restore.ipsw");
        return hashtable;
    }

    static String wikiMarkupForPage(String s)
    {
        int i = 0;
_L3:
        if(i >= 3) goto _L2; else goto _L1
_L1:
        if(i != 0)
        {
            gui.error("The iPhone Wiki seems a bit down; retrying in %d sec..", new Object[] {
                Integer.valueOf(30)
            });
            try
            {
                Thread.sleep(30000L);
            }
            catch(InterruptedException interruptedexception)
            {
                gui.exc(interruptedexception);
            }
        }

【问题讨论】:

  • 这是一个很好的教训,不要使用goto,真的没有很好的理由在代码中这样做。
  • 我们可以看看一些代码吗?
  • 作为@MadProgrammer 不要使用goto 而是有一个方法。
  • 我已经编辑并添加了一些代码并解释了为什么不能显示所有代码

标签: java eclipse class compilation


【解决方案1】:

goto is a keyword 没有用。它已在其他语言中使用,例如 C 或 C++,但 不是 Java。

关键字constgoto 是保留的,即使它们当前未使用。如果这些 C++ 关键字错误地出现在程序中,这可能允许 Java 编译器生成更好的错误消息。

鉴于我们不知道您的代码结构,很难说出您应该应该做什么,请考虑一下:

  • goto 通常用于跳转到特定标识符。您可能希望将其替换为方法调用。
  • 考虑程序的自然流程,如果不是以 OO 方式,至少通过程序方式。 OO 可以对代码进行第二次修订。

【讨论】:

  • 我已经编辑并添加了一些代码并解释了为什么不能显示所有代码
【解决方案2】:

Sun specifications 之后,关键字goto 被保留,即使当前未使用。这可能是您的代码显示错误的原因。

您可能必须重新设计其流程并将此关键字替换为标签上指定的所需行为,或使用方法调用。

【讨论】:

  • 我已经编辑并添加了一些代码并解释了为什么不能显示所有代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 2020-03-01
  • 2013-10-01
相关资源
最近更新 更多