简体   繁体   中英

Help Fixing A Error. Exception in thread “main” java.util.InputMismatchException

Need Help Some With This Error And I Can't Figure It Out. The program is suppose to read the input and save it. Exception in thread "main" java.util.InputMismatchException ÏÏ§Ï at java.util.Scanner.throwFor(Scanner.java:864) ÏÏ§Ï at java.util.Scanner.next(Scanner.java:1485) ÏÏ§Ï at java.util.Scanner.nextDouble(Scanner.java:2413) ÏÏ§Ï at Driver.main(Driver.java:112) ÏϧÏ

===================================

    import java.io.*;
    import java.util.Scanner;
    public class Driver

    {
       public static void main(String[] args)

   {
       //local constants

       //local variables
       String fileName = "items.txt";
       Scanner scanner = null;
       ItemsList itemsList = new ItemsList(5);
       int i = 0;
       int choice;
       boolean repeat = true;      
       String itemName;
       double price;
       int qty;

       scanner=new Scanner(System.in);

 //****************************************************************************      
       //open the file and catch the exception if file not found
       try
       {          
          //create an instance of scanner
           scanner = new Scanner(new File(fileName));

           //read file items until end of file
           while(scanner.hasNext())
           {
               itemName = scanner.next();
               price = scanner.nextDouble();
               qty=scanner.nextInt();

               //Add the OneItem object to the itemList
               itemsList.addItem(new OneItem(itemName, price, qty));
               i++;
           }

           //close the file object
           scanner.close();          
       }
       catch (FileNotFoundException e)
       {
           System.out.println(e.getMessage());
       }
       //Create an instance of Scanner class
       scanner=new Scanner(System.in);

       while(repeat)
       {
           //call menu
           choice = menu();
           switch(choice)
           {
           //Add an item to the itemsList
           case 1:
               System.out.println("Enter item name : ");
               //read name
               String name=scanner.nextLine();

               System.out.println("Enter price : ");
               //read string value and parse to double value
               price = Double.parseDouble(scanner.nextLine());

               System.out.println("Enter quantity : ");
               qty=Integer.parseInt(scanner.nextLine());

               //Add the OneItem to the itemsList
               itemsList.addItem(new OneItem(name, price, qty));
               break;

           case 2:
               //print the list
               //print heading with specific formatter
               System.out.printf("%-10s%-10s%-10s\n\n", "Item","Price","Quantity");
               System.out.println(itemsList.toString());
               break;

           case 3:
               //Terminate the program
               System.out.println("Terminate the program.");

               //set repeat to false
               repeat=false;
               break;

           default:
               System.out.println("Incorrect option is selected.");
               break;
           }      
       }
       writeToFile(itemsList);
   }




    private static void writeToFile(ItemsList itemsList)

   {

       //Create a file name called items.txt
       String filename="items.txt";
       //Create a variable of Class PrintWriter
       PrintWriter filewriter=null;

       try
       {
           //create an instance of PrintWriter
           filewriter=new PrintWriter(new File(filename));

           //close the file writer
           filewriter.close();
       }
       catch (IOException e)
       {
           System.out.println(e.getMessage());
       }
   }

     private static int menu()


    {
       //Create an instance of Scanner class
       Scanner keyboard=new Scanner(System.in);
       System.out.println("Menu");
       System.out.println("1. Add item");
       System.out.println("2. Display items");
       System.out.println("3. Exit");
       System.out.println("Enter your choice");
       int choice=Integer.parseInt(keyboard.nextLine());
       return choice;



     }
    }//end Driver class

==========================================

public class OneItem
{  
   //declare a variables
   private String name;
   private double price;
   private int quantity; 

   //default constructor
   public OneItem()
   {
       name = "";
       price = 0;
       quantity = 0;
   }  
   //parameter constructor
   public OneItem(String name, double price, int quantity)
   {
       this.name = name;
       this.price = price;
       this.quantity = quantity;
   }

   //toString
   public String toString() 
   {      
       return String.format("%-10s%-10.2f%-10d\n", name,price,quantity);
   }  
}//end of the OneItem class

===========================

public class ItemsList
{
   //declare variables
   private OneItem items[];
   private int size;
   private int count;

   //constructor to set items, size and count to zero
   public ItemsList()
   {
       items = null;
       size = 0;
       count = 0;
   }  
   //Parameter constructor
   public ItemsList(int size)
   {
       items = new OneItem[size];

       for (int i = 0; i < items.length; i++)
       {
           items[i] = new OneItem();
       } 

       this.size = size;
       count = 0;
   }
   //Add OneItem to the itemlist
   public void addItem(OneItem item)
   {
       if(items.length == count)
       {
           resize();
           items[count] = item;
           count++;
       }
       else
       {
           items[count] = item;
           count++;
       }      
   }

   //Resize 
   private void resize()
   {
       int oldsize = size;
       count = oldsize;
       int newsize = 2 * this.size;
       size = newsize;

       OneItem[] tempList = new OneItem[size];

       for (int i = 0; i < oldsize; i++)       
           tempList[i] = items[i];


       items = new OneItem[size];
       items = tempList;      
   }

   //getSize
   public int getSize()
   {
       return count;
   }

   //toString
   public String toString()
   {
        String description = "";
       for (int i = 0; i <count; i++)
       {
           description += items[i].toString();
       }

        return description;
   }
}

In the future, you need to be more clear with what the issue is. How it occurs. Error i get when entering string into purchase price is:

Exception in thread "main" java.lang.NumberFormatException: For input string: "sdcf"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
    at java.lang.Double.parseDouble(Double.java:538)
    at stacktests.Driver.main(Driver.java:70)

Meaning you're not validating your input at all. Example would be:

Scanner sc = new Scanner(System.in);
while (!sc.hasNextInt())
{
    System.out.println("Enter an integer!");
    sc.nextLine();
}
int num = sc.nextInt();
System.out.println("Thank you! (" + num + ")");

You need to disallow string entry into a numeric variable! Only once the input has been validated do you assign it to a variable.

Cheers mate.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM