I am writing an appointment program in Java and am coming across an error which is "Exception in thread "main" java.lang.NumberFormatException: For input string : "quit" " For the following lines :
Exception in thread "main" java.lang.NumberFormatException: For input string: "quit"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:449)
at java.lang.Integer.parseInt(Integer.java:499)
at AppointmentNew.main(AppointmentNew.java:24)
Also, when I make the selection in my code of printing a range of dates that the user inputs in the program it is printing out nothing, it is just going to the next line of "Make Choice ( 1: New, 2: Print Range, 3: Print All, quit):" It should print out the range of dates that the user inputs...
Here is the code I have :
import java.util.*;
import java.text.SimpleDateFormat;
import java.util.Date;
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============================");
do
{
System.out.print("\n\tMake Choice (1: New, 2: Print Range, 3: Print All, 4: 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();
stdin.nextLine();
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 = (date + " : \"" + descrip + "\", " + typeChose);
list.add(stringToAdd);
System.out.println("\n\n\tNew " + typeChose + " Appointment Added for " + date + "\n");
System.out.println("\t============================\n");
}
if (choiceNum == 2)
{
System.out.print("\n\n\tEnter START Date in mm/dd/yyyy format: ");
SimpleDateFormat sdf = new SimpleDateFormat("mm/dd/yyyy");
Date lowDate = sdf.parse(stdin.nextLine());
System.out.print("\n\n\tEnter END Date in mm/dd/yyyy format: ");
Date highDate = sdf.parse(stdin.nextLine());
for(int i = 0; i < list.size(); i++)
{
int dateSpot = list.get(i).indexOf(" ");
String currentDate = list.get(i);
currentDate.substring(0, dateSpot);
if (currentDate.compareTo(lowDate) >= 0 && currentDate.compareTo(highDate) <= 0)
{
System.out.println("\n\t" + list.get(i));
}
}
}
if (choiceNum == 3)
{
for(int i = 0; i < list.size(); i++)
{
System.out.println("\n\t" + list.get(i));
}
}
}while (choiceNum != 4);
}
}
Thank you in advance for any advice or help that is given!
Here's what i think, you should modify the code as mentioned here :
System.out.print("\n\tMake Choice ( 1: New, 2: Print Range, 3: Print All, **4: quit**): ");
choice = stdin.nextLine();
choiceNum = Integer.parseInt(choice);
Now check the while loop condition as :
while (choiceNum != 4);
This is one of the way to solve your problem. java.lang.NumberFormatException occurs when you are attempting convert a string to numeric type, but string in not in appropriate format.
Update : The above mentioned solution will work fine if the user provide input in appropriate format. It will throw NumberFormatException if user provides any other string which not in format.To make the code error free , you can do something like this :
try{
choiceNum = Integer.parseInt(choice);
}catch(NumberFormatException e){
System.out.println("Please provide correct input");
}
Then you will be able to avoid NumberFormatException.