Не работает case со string
Не сравнивает переменную food
import java.util.Scanner;
public class LPZ9 {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int lvl, beds;
System.out.println("Сколько звёзд? (3-5)");
lvl = scan.nextInt();
System.out.println("Сколько мест? (1-2)");
beds = scan.nextInt();
System.out.println("С питанием? (Да/Нет)");
scan.nextLine();
String food = scan.nextLine();
switch (lvl){
case 5:
switch (beds) {
case 1:
switch (food) {
case "Да":
System.out.println("Гостиница 'Курортная' - 1500гр");
break;
case "Нет":
System.out.println("Гостиница 'Курортная' - 1000гр");
break;
default:
System.out.println("Ошибка ввода");
}
break;
case 2:
switch (food) {
case "Да":
System.out.println("Гостиница Курортная - 2500гр");
break;
case "Нет":
System.out.println("Гостиница Курортная - 1500гр");
break;
default:
System.out.println("Ошибка ввода");
}
break;
default:
System.out.println("Ошибка ввода");
}
break;
case 4:
switch (beds) {
case 1:
switch (food) {
case "Да":
System.out.println("Гостиница Верховина - 900гр");
break;
case "Нет":
System.out.println("Гостиница Верховина - 600гр");
break;
default:
System.out.println("Ошибка ввода");
}
break;
case 2:
switch (food) {
case "Да":
System.out.println("Гостиница Верховина - 1500гр");
break;
case "Нет":
System.out.println("Гостиница Верховина - 900гр");
break;
default:
System.out.println("Ошибка ввода");
}
break;
default:
System.out.println("Ошибка ввода");
}
break;
case 3:
switch (beds) {
case 1:
switch (food) {
case "Да":
System.out.println("Гостиница Гуцулка - 500гр");
break;
case "Нет":
System.out.println("Гостиница Гуцулка - 300гр");
break;
default:
System.out.println("Ошибка ввода");
}
break;
case 2:
switch (food) {
case "Да":
System.out.println("Гостиница Гуцулка - 800гр");
break;
case "Нет":
System.out.println("Гостиница Гуцулка - 450гр");
break;
default:
System.out.println("Ошибка ввода");
}
break;
default:
System.out.println("Ошибка ввода");
}
break;
default:
System.out.println("Ошибка ввода");
}
}
}
Ответы (1 шт):
Автор решения: Nowhere Man
→ Ссылка
Не следует смешивать ввод с консоли с использованием next/nextInt/nextFloat и nextLine, так как nextLine всегда считывает из потока ввода перевод строки, а next/nextInt/nextFloat считывают до первого разделителя, которым по умолчанию являются пробельные символы, включая и перевод строки.
Ввод из консоли следует считывать двумя способами:
- Использовать только
next/nextInt/nextFloat - Использовать только
nextLine, чтобы считывать строки, тогда следует дополнительно парсить прочитанные данныеInteger.parseInt(scan.nextLine())и т.п.
Представленный код можно исправить:
Scanner scan = new Scanner(System.in);
int lvl, beds;
System.out.println("Сколько звёзд? (3-5)");
lvl = scan.nextInt();
System.out.println("Сколько мест? (1-2)");
beds = scan.nextInt();
System.out.println("С питанием? (Да/Нет)");
String food = scan.next();
System.out.printf("lvl=%d beds=%d food='%s'%n", lvl, beds, food); // для отладки
