1. ホーム
  2. java

[解決済み] メソッド外エラー

2022-02-02 05:18:13

質問

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: メソッド外の戻り値

真を返す

^

何が起こっているのかわからない。

どうすればいいですか?

上記のコメント回答から推測すると、あなたは以下のように考えているのではないでしょうか。

boolean openingboard;
{
    return true;
}

というJavaメソッドを定義しています。 openingboard . これは違うんです。 JavaはC言語のパラダイムに従って、パラメータがあるかないかに関わらず、パラメータを括弧で指定することを要求しています。 ですから、メソッド

boolean openingboard() {
    return true;
}

は有効なJavaメソッドであり(何らかのクラス内にあると仮定)、同様に openingboard 中括弧の間にさらに多くのコードが含まれています。

というわけで、Javaのスタイルについて、いくつか親切に指南してあげよう。

  • Java(そしてほとんどの高級言語)のプログラマは、次のような "forever"ループを嫌う傾向があります。 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;
}

もちろん、デバッガでプリントをトレースすることを好むと仮定しての話ですが。