首页 > 解决方案 > JAVA.UTIL.NoSuchElementException 错误(基于情况)

问题描述

我在使用这个程序时遇到了问题:

您学校的历史老师需要帮助对真/假测试进行评分。学生的 ID 和测试答案存储在一个文件中。文件中的第一个条目包含以下形式的测试答案: TFFTFFTTTTFFTFTTFTFTT 文件中的每个其他条目都是学生的 ID,后跟一个空白,然后是学生的回答。例如条目:ABC54301 TFTFTTFTT TFTFTFFTTFT 表示学生的 ID 为 ABC54301,第 1 题的答案为 True,第 2 题的答案为 False,以此类推。这位学生没有回答第 9 题。考试有 20 道题,班级有 150 多个学生。每答对一题得两分,每答错一题得-1分,不答题得0分。编写一个处理测试数据的程序。输出应该是学生的 ID,然后是答案,其次是考试成绩,其次是考试成绩。假设以下等级等级:90% - 100%,A;80% - 89.99%,乙;70% - 79.99%,C;60% - 69.99%,D;和 0% - 59.99%,F。

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

class Assignment6
{
    public static void main(String[] args)
                        throws FileNotFoundException
    {
        Scanner inFile = new Scanner(new FileReader("student.txt"));
        
        String id, gracias;
        String denada ="";
        int score = 0;
        double percent;
        char grade;

        char[] orig = new char[20];
        char[] sc = new char[20];

        for(int i=0 ; i<20 ; i++)
        {
            gracias = inFile.next();
            orig[i] = gracias.charAt(i);
        }
        inFile.nextLine();
        while(inFile.hasNext())
        {
            id = inFile.next();

            for(int i=0 ; i<20 ; i++)
            {
                sc[i] = inFile.next().charAt(i);
            
                if(sc[i] == orig[i])
                    score++;
                else if(sc[i] != orig[i] && sc[i] != ' ')
                    score--;
                denada += sc[i];
            }
            inFile.nextLine();

            percent = (score/20)*100;

            if(percent >= 90 && percent <= 100)
                    grade = 'A';
            else if(percent >= 80 && percent <= 89.99)
                    grade = 'B';
            else if(percent >= 70 && percent <= 79.99)
                    grade = 'C';
            else if(percent >= 60 && percent <= 69.99)
                    grade = 'D';
            else
                    grade = 'F';
                                         
            System.out.printf("%-8s%-8s%-2d%-2c%n",id,denada,score,grade);
        }
        inFile.close();
    }
}

我已经尝试过了,但它显示我出现以下错误

 Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1371)
    at Assignment6.main(Assignment6Java.java:19)

任何形式的帮助将不胜感激......谢谢

标签: javajava.util.scannernosuchelementexception

解决方案


您在第 19 行遇到异常。

gracias = inFile.next();

java.util.Scanner.next() 方法返回下一个标记。当没有更多令牌可用时,它返回“NoSuchElementException”

你检查过文件的内容吗?确保文件不为空。此外,您应该确保下一个标记存在,而不是盲目地使用 for 循环。

只是提个醒——

String s="TTFFT"

只有一个令牌,而

String s="TTF FT"

有两个令牌


推荐阅读