【问题标题】:Return outside method error返回外部方法错误
【发布时间】:2012-03-07 11:02:49
【问题描述】:
boolean openingboard;
{   
Robot robot = new Robot();
Color color3 = new Color(108, 25, 85);
Rectangle rectangle = new Rectangle(0, 0, 1365, 770);
    while(true)
    {
    BufferedImage image = robot.createScreenCapture(rectangle);
    search: for(int x = 0; x < rectangle.getWidth(); x++)
        {
        for(int y = 0; y < rectangle.getHeight(); y++)
            {
                if(image.getRGB(x, y) == color3.getRGB())
                {
                    System.out.println("About to finish and return true");
                    return true;
                }
                System.out.println("About to finish and return false");
            }
        }
    }
}

错误是: java:71: 返回外部方法

返回真

^

我不知道这是怎么回事,请帮忙!

【问题讨论】:

  • 所有这些代码都在一个方法中吗?
  • 在方法打开板里面?是的,不是主要方法,但我应该发布吗?

标签: java methods return


【解决方案1】:

正确的方法如下:boolean openingboard ( )

不像boolean openingboard;

括号不是可选的。

你拥有它的方式:openingboard 是一个字段。有一个带有 Robot 和颜色的 init 块以及一些嵌套在彼此内部的 for 循环。在其中一个 for 循环中是一个在 init 块中不允许的 return。

【讨论】:

    【解决方案2】:

    根据您上面的评论回复,我将做出有根据的猜测,您相信这一点

    boolean openingboard;
    {
        return true;
    }
    

    定义了一个名为openingboard 的Java 方法。事实并非如此。 Java 遵循 C 范式,要求您​​在括号中指定参数,无论您是否有任何参数。所以,方法

    boolean openingboard() {
        return true;
    }
    

    是一个有效的 Java 方法(假设它在某个类中),就像 openingboard 的一个版本,在花括号之间有更多代码。

    也就是说,我将传递一些关于 Java 风格的友好提示:

    • Java(实际上是大多数高级语言)程序员往往对“永远”循环(例如 while (true))不屑一顾,因为这些循环使确定循环何时真正停止变得更加困难。
    • 代码中不需要标签search,标签比永远循环更不受欢迎。

    所以,我建议你重写你的代码,让它看起来像

    private boolean openingboard() {
        Robot robot = new Robot();
        Color color3 = new Color(108, 25, 85);
        Rectangle rect = new Rectangle(0, 0, 1365, 770);
        BufferedImage image = robot.createScreenCapture(rect);
        for(int x = 0; x < rectangle.getWidth(); x++) {
            for(int y = 0; y < rectangle.getHeight(); y++) {
                if(image.getRGB(x, y) == color3.getRGB())
                    return true;
            }
        }
    
        return false;
    }
    

    当然,假设您更喜欢调试器来跟踪打印。

    【讨论】:

    • 我没有听到太多关于标签的评论——正面的或负面的。我会认为他们是良性的。那么他们为什么不受欢迎呢?
    • @emory 除非您将标签用于嵌套中断或继续,否则注释未提供的标签绝对没有任何价值。因此,评论更符合惯例。对于嵌套的 break/continue 语句,标签是可以的,但出于任何其他原因,标签是不必要的。我会用 C goto 对 Java 标签进行分类:在非常有限的情况下提高可读性很有用,但不要在该设置之外使用它。
    • @emory 使用标签与 considered harmful 的 goto 语句几乎相同。
    猜你喜欢
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多