Не работает 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 считывают до первого разделителя, которым по умолчанию являются пробельные символы, включая и перевод строки.

Ввод из консоли следует считывать двумя способами:

  1. Использовать только next/nextInt/nextFloat
  2. Использовать только 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); // для отладки

→ Ссылка