2013-04-19 4 views
0

Я пишу программу назначения в Java, и я встретив ошибку, котораяNumberFormatException для ввода строки Java

Исключение в потоке «основного» java.lang.NumberFormatException: Для ввода строки: «»

следующие строки:

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) 
at java.lang.Integer.parseInt(Integer.java:470) 
at java.lang.Integer.parseInt(Integer.java:499) 
at AppointmentNew.main(AppointmentNew.java:24) 

программа проходит один раз, но как только он доходит до конца своего первого запуска она дает мне эти ошибки ... Например, когда я запускаю программу следующим образом: я делаю выбор «1», чтобы назначить новую встречу, затем введите дату моей новой встречи «мм/дд/гггг», затем добавлю описание встречи и Наконец, я вводил тип «Один раз, Ежедневно или Ежемесячно». После этого он должен начать с первой строки «Сделать выбор (1: Новый, 2: Диапазон печати, 3: Отпечатать все, выйти):« Но вместо этого он дает мне ошибки, описанные выше ..

Вот мой код, который у меня есть.

import java.util.*; 

public class AppointmentNew 
{ 
public static void main (String[] args) 
{ 
    ArrayList<String> list = new ArrayList<String>(); 
    Scanner stdin = new Scanner(System.in); 
    String choice = ""; 
    int choiceNum = 0; 
    String date = ""; 
    String descrip = ""; 
    int type = 0; 
    String typeChose = ""; 

    System.out.println("Welcome to Appointment App!\n"); 
    System.out.println("\t============================\n"); 

    do 
    { 
    System.out.print("\tMake Choice (1: New, 2: Print Range, 3: Print All, quit): "); 
    choice = stdin.nextLine(); 

    choiceNum = Integer.parseInt(choice); 

    if (choiceNum == 1) 
    { 
     System.out.print("\n\n\tEnter New Appointment Date in mm/dd/yyyy format: "); 
     date = stdin.nextLine(); 

     System.out.print("\n\n\tEnter New Appointment Description: "); 
     descrip = stdin.nextLine(); 

     System.out.print("\n\n\tEnter Type (1 = Once, 2 = Daily, 3 = Monthly): "); 
     type = stdin.nextInt(); 
     if (type == 1) 
     { 
      Once once = new Once(date, descrip); 
      typeChose = "One-Time"; 
     } 
     else if (type == 2) 
     { 
      Daily daily = new Daily(date, descrip); 
      typeChose = "Daily"; 
     } 
     else 
     { 
      Monthly monthly = new Monthly(date, descrip); 
      typeChose = "Monthly"; 
     } 
      String stringToAdd = ""; 
      stringToAdd = ("\n\n\tNew " + typeChose + " Appointment Added for " + date + "\n"); 
      list.add(stringToAdd); 

     System.out.println(stringToAdd); 
     System.out.println("\t============================\n"); 

    } 

    if (choiceNum == 2) 
    { 
    System.out.print("\n\n\tEnter START Date in mm/dd/yyyy format: "); 
    String lowDate = stdin.nextLine(); 
    System.out.print("\n\n\tEnter END Date in mm/dd/yyyy format: "); 
    String highDate = stdin.nextLine(); 

    for(int i = 0; i < list.size(); i++) 
     { 
     int dateSpot = list.get(i).indexOf(" "); 
     if (list.get(i).compareTo(lowDate) <= 0 && list.get(i).compareTo(highDate) >= 0) 
     { 
      System.out.println(list.get(i)); 
     }} 
    } 

    if (choiceNum == 3) 
    { 
     for(int i = 0; i < list.size(); i++) 
     { 
      System.out.println(list.get(i));  
     } 
    } 

    }while (choice != "quit");  
} 
} 

Любая помощь будет замечательной!

+0

Когда вы вводите пустой ввод, 'Integer.parseInt' не может преобразовать в число. Отсюда исключение. Используйте эту проверку if (choice.equalls ("")) {// не разбирайте} – codeMan

ответ

3

Вам нужно добавить еще один вызов nextLine() после этого заявления здесь:

type = stdin.nextInt(); 
// ED: stdin.nextLine(); 

Это происходит потому, что, когда вы захватите Int от сканера, он не потребляет «\ п» характер который попадает на входной поток, когда пользователь нажимает Enter.

Таким образом, когда stdin.nextLine() вызывается снова, возвращается строка «" (все еще не обработано до следующего символа «\ n»), а Integer.parseInt не знает, как обращаться с этим , поэтому вы получите сообщение об ошибке.

+0

Спасибо, это сработало! – user2213611

+0

Единственная проблема, которая мне дается, - это когда я выбираю «выйти» для первого выбора в программе, он дает мне ту же ошибку, что и описанную выше .... Любые предложения? – user2213611

+0

Ну, теперь Integer.parseInt («quit») не будет работать очень хорошо, не так ли? Вам нужно будет добавить код, чтобы исправить это: p – torquestomp

0

Обведите код инструкцией if, чтобы проверить, не перестает ли это значение перед попыткой выполнить его анализ.

Смежные вопросы