线程“main”中的异常错误java.util.InputMismatchException

时间:2013-04-18 23:11:15

标签: java

我正在为我的java课做我的实验室而且我做了这个,但无论我如何尝试修复它,我都会收到错误。我知道问题出在case 1声明的switch下。我已经尝试重新排序infiles并将inFile.nextLine();添加到列表的开头,结尾和中间,并且无法正常工作

这是错误:

Exception in thread "main" java.util.InputMismatchException
        at java.util.Scanner.throwFor(Scanner.java:840)
        at java.util.Scanner.next(Scanner.java:1461)
        at java.util.Scanner.nextInt(Scanner.java:2091)
        at java.util.Scanner.nextInt(Scanner.java:2050)
        at Lab6.main(Lab6.java:73)

这是我的代码:

    import java.util.Scanner;
    import java.io.*;

    public class Lab6
    {
       public static int menu()
       {
               int ans;

               System.out.println("Please chose an option");

               System.out.println("1.Class Average");
               System.out.println("2.Student Average");
               System.out.println("3.Standard Deviation");
               System.out.println("4.Letter grades");
               System.out.println("5.Minimum/Maximum");
               System.out.println("6.Locate : ");
               System.out.println("7.Locate All students where the difference  between exam1 and exam2>15%");
               System.out.println("8.Histogram");
               System.out.println("9.Update data");
               System.out.println("10.Quit");

               Scanner keyboard = new Scanner (System.in);

               ans=keyboard.nextInt();

               return ans;

       }

       public static void main (String[] args)throws IOException
       {
            //variables
            int choice;
            int testno;
            int test1,
                test2;
            int NewScore;
            int count;
            int sum1,
                sum2;
            int avg1,
                avg2;
            String name;



            //get choice

            Scanner keyboard = new Scanner (System.in);

            choice=menu();

            File myFile = new File("lab6_indata.txt");
            Scanner inFile = new Scanner(myFile);

            switch(choice)
            {
                case 1:
                    System.out.println("You Chose Class Average\n");
                    count=1;
                    sum1=0;
                    sum2=0;
                    avg1=0;
                    avg2=0;
                    while(count<=25)
                    {
                        test1=inFile.nextInt();
                        test2=inFile.nextInt();

                        sum1=sum1 + test1;
                        sum2=sum2 + test2;
                        count ++;
                    }
                    avg1 = sum1 / count;
                    avg2 = sum2 / count;

                    System.out.println("Class Average Test 1:"+ avg1);
                    System.out.println("Class Average Test 2:"+ avg2);

                    break;

                case 2:
                    System.out.println("You Chose Student Average");
                    break;

                case 3:
                    System.out.println("You Chose Standard Deviation");
                    break;

                case 4:
                    System.out.println("You Chose Letter grades");
                    break;

                case 5:
                    System.out.println("You Chose Minimum/Maximum");
                    break;

                case 6:
                    System.out.println("You Chose Locate : ");
                    break;

                case 7:
                    System.out.println("You Chose Locate All students where the difference between exam1 and exam2>15%");
                    break;

                case 8:
                    System.out.println("You Chose Histogram");
                    break;

                case 9:
                    System.out.println("You Chose Update data");
                    System.out.println("Please Enter Name");
                    name=keyboard.nextLine();
                    System.out.println("Are you updating test number 1 or 2?");
                    testno=keyboard.nextInt();
                    System.out.println("What is the new score?");
                    NewScore=keyboard.nextInt();
                    break;

                case 10:
                    System.out.println("Program Ended");
                    break;

                default:
                    System.out.println("Error: Invaild option");
                    break;

            }

            inFile.close();



       }


}

这是我的inFile:

*Robert     70  82
*Joel       64  50  
*Alice      98  95
*Jasmine    76  92
*Larry      42  69
*Elizabeth  79  85
*Frank      75  66
*Christine  20  36
*Alex       0   52
*Ariel      84  81
*Luis       65  77
*Nicole     40  89
*Mitch      90  94
*Randy      88  86
*Tammy      91  84
*Sarah      78  71
*Samuel     80  66
*Lauren     55  63
*Deanna     97  99
*Mathew     100 87
*Justin     68  76
*Beth       96  95
*Rebecca    85  83
*Paul       44  65
*Lucy       34  56

也许我的inFile需要采用不同的格式?

2 个答案:

答案 0 :(得分:0)

每行中的第一个标记是String,因此需要在读取任何整数之前使用

String studentName = inFile.next();
test1 = ...

答案 1 :(得分:0)

来自javadocs

  

由扫描程序抛出,表示检索到的令牌没有   匹配预期类型的​​模式,或者令牌不在   预期类型的​​范围。

您的输入可能无法正确格式化,并且java无法比较具有不同格式的两种内容,例如intstring