@ashot_powershot

Почему scanner пропускает некоторые строчки в коде?

Я хочу через scanner записать данные с клавиатуры, но некоторые из них он просто пропускает, почему так?
В 1 кейсе код путевки вводится, а фамилия нет, но название пансионата тоже вводится.(везде где инт все нормально, только со стрингом такая проблема)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        int b = -1;
        int i = 0, o = 0, p = 0;
        Scanner scanner = new Scanner((System.in));
        зарпутевки[] h = new зарпутевки[10];
        санатории[] k = new санатории[10];
        оздоровительные[] l = new оздоровительные[10];
        do
        {
            System.out.println("1 - Зарубежные путевки\n2 - Санатории\n3 - Детские оздоровительные\n4 - Вывод всех путевок\n0 - Выход");
            b = scanner.nextInt();
            switch (b) {
                case 0: {
                    break;
                }
                case 1: {
                    h[i] = new зарпутевки();
                    System.out.println("Введите код путевки");
                    h[i].code = scanner.nextInt();
                    System.out.println("Введите фамилию клиента");
                    h[i].фамилия = scanner.nextLine();
                    System.out.println("Введите название пансионата");
                    h[i].название = scanner.nextLine();
                    System.out.println("Введите номер");
                    h[i].number = scanner.nextInt();
                    System.out.println("Введите вид жилья");
                    h[i].виджилья = scanner.nextLine();
                    System.out.println("Введите дату заезда");
                    h[i].date1 = scanner.nextInt();
                    System.out.println("Введите дату выезда");
                    h[i].date2 = scanner.nextInt();
                    System.out.println("Введите количество человек");
                    h[i].quantity = scanner.nextInt();
                    System.out.println("Введите цену");
                    h[i].price = scanner.nextInt();
                    System.out.println("Введите номер загранпаспорта");
                    h[i].загпаспорт = scanner.nextInt();
                    System.out.println("Введите номер страховки");
                    h[i].страховка = scanner.nextInt();
                    i++;
                    break;
                }
                case 2: {
                    System.out.println("Введите код путевки");
                    k[o].code = scanner.nextInt();
                    System.out.println("Введите фамилию клиента");
                    k[o].фамилия = scanner.nextLine();
                    System.out.println("Введите название пансионата");
                    k[o].название = scanner.nextLine();
                    System.out.println("Введите номер");
                    k[o].number = scanner.nextInt();
                    System.out.println("Введите вид жилья");
                    k[o].виджилья = scanner.nextLine();
                    System.out.println("Введите дату заезда");
                    k[o].date1 = scanner.nextInt();
                    System.out.println("Введите дату выезда");
                    k[o].date2 = scanner.nextInt();
                    System.out.println("Введите количество человек");
                    k[o].quantity = scanner.nextInt();
                    System.out.println("Введите цену");
                    k[o].price = scanner.nextInt();
                    System.out.println("Введите номер медицинского полиса");
                    k[o].медполис = scanner.nextInt();
                    System.out.println("Введите номер диагноза");
                    k[o].диагноз = scanner.nextLine();
                    System.out.println("Введите направление");
                    k[o].направление = scanner.nextLine();
                    o++;
                }
                case 3: {
                    System.out.println("Введите код путевки");
                    l[p].code = scanner.nextInt();
                    System.out.println("Введите фамилию клиента");
                    l[p].фамилия = scanner.nextLine();
                    System.out.println("Введите название пансионата");
                    l[p].название = scanner.nextLine();
                    System.out.println("Введите номер");
                    l[p].number = scanner.nextInt();
                    System.out.println("Введите вид жилья");
                    l[p].виджилья = scanner.nextLine();
                    System.out.println("Введите дату заезда");
                    l[p].date1 = scanner.nextInt();
                    System.out.println("Введите дату выезда");
                    l[p].date2 = scanner.nextInt();
                    System.out.println("Введите количество человек");
                    l[p].quantity = scanner.nextInt();
                    System.out.println("Введите цену");
                    l[p].price = scanner.nextInt();
                    System.out.println("Введите номер медицинского полиса");
                    l[p].age = scanner.nextInt();
                    System.out.println("Введите номер диагноза");
                    l[p].свидорож = scanner.nextInt();
                    System.out.println("Введите направление");
                    l[p].пол = scanner.nextLine();
                    p++;
                }
                case 4: {
                    if (h[0]!=null) {
                        for (int m = 0; m <= i; m++) {
                            h[m].toString();
                        }
                    }
                    if (o >= 0) {
                        for (int n = 0; n <= o; n++) {
                            k[n].toString();
                        }
                    }
                    if (p >= 0) {
                        for (int c = 0; c <= p; c++) {
                            l[c].toString();
                        }
                    }
                }
            }
        }while(b!=0);
    }
}
class путевки
{
    int code, number, quantity, date1, date2, price;
    String фамилия, название, виджилья;
    public путевки()
    {
    }
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public String getФамилия() {
        return фамилия;
    }
    public void setфамилия(String фамилия) {
        this.фамилия = фамилия;
    }
    public String getназвание() {
        return название;
    }
    public void setназвание(String название) {
        this.название = название;
    }
    public int getnumber() {
        return number;
    }
    public void setnumber(int number) {
        this.number = number;
    }
    public String getвиджилья() {
        return виджилья;
    }
    public void setвиджилья(String виджилья) {
        this.виджилья = виджилья;
    }
    public int getDate1() {
        return date1;
    }
    public void setDate1(int date1) {
        this.date1 = date1;
    }
    public int getDate2() {
        return date2;
    }
    public void setDate2(int date2) {
        this.date1 = date2;
    }
    public int getquantity() {
        return quantity;
    }
    public void setquantity(int quantity) {
        this.quantity = quantity;
    }
    public int getprice() {
        return price;
    }
    public void price(int price) {
        this.price = price;
    }
    public String toString()
    {
        return "Код путевки: " + code + "\nФамилия клиента: " + фамилия + "\nНазвание пансионата: "+название+"\nНомер: "+number+"\nВид жилья: "+виджилья+"\nДата заезда: "+date1+"\nДата выезда: "+date2+"\nКоличество человек: "+quantity+"\nЦена: "+price;
    }

}
class зарпутевки extends путевки
{
    int загпаспорт, страховка;
    public int getзагпаспорт() {
        return загпаспорт;
    }
    public void setзагпаспорт(int загпаспорт) {
        this.загпаспорт = загпаспорт;
    }
    public int getстраховка() {
        return страховка;
    }
    public void setзстраховка(int зстраховка) {
        this.страховка = страховка;
    }
    public String toString()
    {
        return "Код путевки: " + code + "\nФамилия клиента: " + фамилия + "\nНазвание пансионата: "+название+"\nНомер: "+number+"\nВид жилья: "+виджилья+"\nДата заезда: "+date1+"\nДата выезда: "+date2+"\nКоличество человек: "+quantity+"\nЦена: "+price+"\nНомер загран паспорта: "+загпаспорт+"\nНомер страховки: "+страховка;
    }
}
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ответы на вопрос 1
Дело в том, что Scanner#nextInt считывает только цифровое значение без перехода на новую строку. Таким образом выходит, что последующий вызов Scanner#nextLine видит новую строку за счёт того, что ты нажал Enter вводя число.

Используй для всех инпутов Scanner#nextLine и конвертируй полученную строку в нужный тип.
System.out.println("Введите код путевки");
l[p].code = Integer.parseInt(scanner.nextLine());
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
19 апр. 2024, в 03:01
1000 руб./за проект
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект