1

我正在为我的 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 需要采用不同的格式?

4

2 回答 2

0

每行中的第一个标记是 aString所以需要在读取任何整数之前使用

String studentName = inFile.next();
test1 = ...
于 2013-04-18T23:15:44.370 回答
0

来自javadocs

由 Scanner 抛出以指示检索到的令牌与预期类型的​​模式不匹配,或者令牌超出预期类型的​​范围。

可能是您的输入格式不正确,并且 java 无法比较具有不同格式的两个事物,例如 anint和 a string

于 2013-04-18T23:18:24.000 回答