【问题标题】:Help Fixing A Error. Exception in thread "main" java.util.InputMismatchException帮助修复错误。线程“主”java.util.InputMismatchException 中的异常
【发布时间】:2026-01-06 04:50:02
【问题描述】:

需要帮助一些人解决此错误,但我无法弄清楚。该程序假设读取输入并保存它。线程“主”java.util.InputMismatchException 中的异常 ÏÏ§Ï 在 java.util.Scanner.throwFor(Scanner.java:864) ÏÏ§Ï 在 java.util.Scanner.next(Scanner.java:1485) ÏÏ§Ï 在 java.util.Scanner.nextDouble(Scanner.java:2413) 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;
   }
}

【问题讨论】:

  • 1) 不是调试服务,2) 关于错误发生时间的详细信息不足,3) 我无论如何都尝试过,当您输入有效输入时,它对我来说很好。意思是在某处,您输入了错误的字符,它会中断,因此请验证您的输入。

标签: java


【解决方案1】:

将来,您需要更清楚问题所在。它是如何发生的。在购买价格中输入字符串时出现的错误是:

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)

意味着您根本没有验证您的输入。例如:

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 + ")");

您需要禁止将字符串输入数字变量!只有在输入经过验证后,您才能将其分配给变量。

干杯。

【讨论】:

    最近更新 更多