#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
.