Исключение InputMismatchException при вводе в функции nextInt()

121
15 февраля 2021, 11:40

Не понимаю, почему не работает ввод строки purchName? Если поменять местами 20 и 21 строку местами, то считывает число, и когда доходит до ввода строки, выдаёт ошибку. В чём проблема?

    ArrayList<Integer> balance = new ArrayList<>();
    ArrayList<String> purchase = new ArrayList<>();
    System.out.println("Введите ваш бюджет на месяц: ");
    int budget = in.nextInt();
    System.out.println("У вас есть " + budget + " до конца месяца.");
    for (int i = 0; i <= budget; i--) { // circle that responds for re-entering purchase
        System.out.println("Name of Purchase And its Price: ");
        String purchName = (String) System.in.read();
        int purchPrice = in.nextInt(); // ошибка возникает тут
        System.out.println("Thanks!");
        balance.add(purchPrice);
        purchase.add(purchName);
        int value = budget - purchPrice;
        System.out.println("If you want continue write 1");
        System.out.println("See you purchase 2");
    }
}

Вывод:

Введите ваш бюджет на месяц: 
20
У вас есть 20 до конца месяца.
Name of Purchase And its Price: 
qwer
Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at com.begin.exampleTwo.main(exampleTwo.java:23)
Process finished with exit code 1
Answer 1

Тот код, что ты привёл, в принципе не компилируется из-за String purchName = (String) System.in.read();, потому что read возвращает int.

Соответственно, исполняется у тебя какая-то последняя валидная старая версия, которая выдаёт ошибку на nextInt (который у тебя судя по всему раньше стоял сразу после Name of Purchase And its Price:

Замени (String) System.in.read() на in.nextLine().

import java.util.Scanner;
class Scratch {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("text");
        String text = s.nextLine();
        System.out.println("integer");
        int i = s.nextInt();
        System.out.println(text+", "+i);
    }
}

Выдаёт

text
some text
integer
12
some text, 12
READ ALSO
Утилитарные классы - добро или зло?

Утилитарные классы - добро или зло?

Есть вот такой спорный вопрос

100
Если ли встроенный способ перебора с добавлением в Set, Map - коллекции?

Если ли встроенный способ перебора с добавлением в Set, Map - коллекции?

Для List коллекции на такой случай есть расширенный итератор ListIterator

108
Обфускация api-key от firebase

Обфускация api-key от firebase

Каким образом можно обфусцировать api-key от firebase в android приложении на javaApi-ключ лежит в google-services

116
DriverManager автоматически ищет драйвера только при старте?

DriverManager автоматически ищет драйвера только при старте?

При попытке получить connection через DriverManager получал SQLExceptionЭто все на tomcat

92