в потоке "main" возникла исключительная ситуация java.lang.NumberFormatException: для входной строки: "" - PullRequest
0 голосов
/ 26 июня 2019

Я делаю школьный проект для онлайн-шоппинга, и возникает ошибка, есть раздел выбора продукта, который вы хотите купить, после того, как я ввел его, автоматически вводится cmd при выборе переменной

 System.out.println(">Mobiles,Computers");
    System.out.println(">TV,Appliances,Electronics");
    System.out.println(">Men's Fashion");
    System.out.println(">Women's Fashion");
    System.out.println(">Home accessories");
    System.out.println("do you want to choose your product from above catagories or not \n enter y/n (REPLY IN SMALL LETTERS");
    c1=(char)br.read();
    while(c1 != 'n')
    {
    System.out.println("-----------------------------------------------------------------------");
    System.out.println("Enter your choice");
    System.out.println("Press 1: Mobiles,Laptops");
    System.out.println("Press 2: TV,Appliances,Electronics");
    System.out.println("Press 3: Men's Fashion");
    System.out.println("Press 4: Women's Fashion ");
    System.out.println("Press 5: Home accessories");
    System.out.println("-----------------------------------------------------------------------");
    int choice=Integer.parseInt(br.readLine()); 
    switch(choice)
    { 

Ответы [ 3 ]

1 голос
/ 26 июня 2019

Здесь:

c1=(char)br.read();

Это читает одиночный символ из вашего ввода.Я предполагаю, что вы ввели

yENTER

на клавиатуре.Дело в том, что вы читаете только этот символ, но не перевод строки / перевод строки.Поэтому эта часть «остается» в вашем вводе, и когда вы делаете последующую readLine(), вы получаете эту ENTER часть, сводящуюся к пустой строке.

Одно решение: сделать все чтения с помощью readLine(), а затем просто, например,

while(!stringFromUser.equalsIgnoreCase("n)) { 

.В качестве альтернативы, вы можете просто сделать «фальшивый» readLine() вызов до Integer.parseInt(br.readLine());.

Наконец: я предполагаю, что вы используете (Buffered) Reader в System.in.Это не имеет особого смысла.Вместо этого вы можете использовать Scanner.(см. здесь для некоторых указаний)

1 голос
/ 26 июня 2019

Вы можете пропустить эту строку, если она пуста:

String line = br.readLine();
if (line.isEmpty()) continue;
int choice = Integer.parseInt(br.readLine()); 
0 голосов
/ 26 июня 2019

Используйте сканер для чтения с консоли:

Scanner in = new Scanner(System.in); 
String s = in.nextLine();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...