Как я могу заставить свой код возвращать правильную переменную?

#java #eclipse

#java #eclipse

Вопрос:

 public class Menu extends AirPorts{
    
    public static String checkerUK() {
        Scanner sc = new Scanner(System.in);
        boolean valid = false;
        String ukAP = "";
        while(valid == false) {
            System.out.println("Please enter the code of the UK AirPort ");
            ukAP = sc.next();
            if(ukAP.equalsIgnoreCase(ukOne)) {
                valid = true;
                break;
            }
            if(ukAP.equalsIgnoreCase(ukTwo)) {
                valid = true;
            }
            else {
                System.out.println("Please try again");
            }
            sc.close();
        }
        return ukAP;
    }
}
  

Я пытаюсь заставить checkerUK вернуть ukAP в цикле while. Текущая ошибка, которую я имею, это,

 ukAP cannot be resolved or is not a field
  

для строки, Scanner sc = new Scanner(System.in); . Похоже, что ukAP это локально для цикла while, и я попытался вставить «return ukAP» в цикл while, но затем я получаю сообщение об ошибке, в котором говорится, что checkerUK должен вернуть строку, поэтому он ее не распознает.

Я также пытался создать общедоступный / глобальный ukAP для всего класса, но это никак не влияет на ukAP в цикле while.

Я использую Eclipse и Java 14.

Комментарии:

1. Eclipse не имеет отношения к вашему вопросу.

2. Вы закрываете Scanner объект в while цикле.

3. Я не могу воспроизвести эту проблему. Если я удалю extends AirPorts (поскольку отсутствие кода для этого класса делает его непригодным для использования), моя среда разработки жалуется на отсутствие ukOne и ukTwo . Кстати, не закрывайте сканер, который обрабатывает System.in , поскольку он также закроется System.in и не позволит вам читать больше данных из user / console в текущем жизненном цикле вашего приложения. Особенно не делайте этого в цикле, потому что следующая итерация не сможет использоваться System.in и sc.next(); будет жаловаться на это, выбрасывая IllegalStateException .

4. Эта информация не может быть правильной. Невозможно ukAP разрешить в строке Scanner sc = new Scanner(System.in); , если она там не используется.

5. Вы пробовали return ukAP; ?

Ответ №1:

Это работает для меня.

 public static String checkerUK() {
    final String ukOne = "LTH";
    final String ukTwo = "LGW";
    Scanner sc = new Scanner(System.in);
    boolean valid = false;
    String ukAP = "";
    System.out.print("Please enter the code of the UK AirPort: ");
    while (valid == false) {
        ukAP = sc.nextLine();
        switch (ukAP) {
            case ukOne:
            case ukTwo:
                valid = true;
                break;
            default:
                valid = false;
                System.out.print("Please try again: ");
        }
    }
    return ukAP;
}
  

Java поддерживает переключение строк начиная с Java 7. Однако значения должны быть постоянными. Вот почему я объявил их как final .

Никогда не закрывайте Scanner это обертывание System.in .