Вернуть ошибку внешнего метода - PullRequest
6 голосов
/ 16 февраля 2012
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: возврат за пределами метода

вернуть true

^

я не знаю, что это происходит, помогите!

Ответы [ 2 ]

10 голосов
/ 16 февраля 2012

Из вашего комментария выше я собираюсь сделать обоснованное предположение, что вы верите, что

boolean openingboard;
{
    return true;
}

определяет метод Java с именем openingboard. Это не тот случай. 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;
}

Если, конечно, вы предпочитаете, чтобы отладчик отслеживал отпечатки.

4 голосов
/ 16 февраля 2012

Правильные методы выглядят так: boolean openingboard ( )

не нравится boolean openingboard;

Скобки не являются обязательными.

Как у вас есть: открывающаяся доска - это поле. Есть блок инициализации с роботом и цветом, а некоторые для циклов, вложенных друг в друга. Внутри одного из циклов for есть возврат, который не разрешен в блоке init.

...