1

2つのクラスを使用するプログラムを作成しています。1 つのクラスで、2 番目のクラスによって呼び出されるメソッドを作成します。すべてのメソッドは最初のクラスに含まれており、2 番目のクラスは単純にそれらを呼び出してコードを実行します。

クラス1

 import java.io.File;
 import java.io.FileNotFoundException;
 import java.util.Scanner;


 public class Student {


    private Scanner scanner;
    private String firstName;
    private String lastName;
    private int homeworkScore;
    private int testScore;
    private String letterGrade;
    private int numberOfStudents;

    public Student () {

        String firstName = null;
        String lastName = null;
        int homeworkScore = 0;
        int testScore = 0;
        String letterGrade = null;
        int numberOfStudents = 0;
    }


    public void openFile(){
        try { 
            scanner = new Scanner(new File("grades.txt"));
        } catch (FileNotFoundException e) { 
            System.out.println("Error opening file. Please make sure that you have a grades.txt file in the same folder as GradeCalculator.class");
            System.exit(0); 
        }
    }


    public void setNumberOfStudents() {
        System.out.println("It kinda works");
        numberOfStudents = scanner.nextInt();
    }

 public void setFastName() {
        fastName = scanner.next();
    }

 public void setLastName() {
        lastName = scanner.next();
    }

public void setHomeworkScore() {

        int subAssignment = 0;
        int assignment = 0;

        for(int i = 1; i <= 21; i++) { 
            subAssignment = scanner.nextInt();
            assignment += subAssignment;
        }

        homeworkScore = assignment;
    }

クラス2

  import java.io.File;
  import java.io.FileNotFoundException;
  import java.util.Scanner;


 public class CourseGrade {

public static void main(String[] args) {

    Student myStudent = new Student();

    myStudent.openFile();

    myStudent.setNumberOfStudents();

    myStudent.setFirstName();

    myStudent.setLastName();

    myStudent.setHomeworkScore();


}

 }

これは私が得るエラーです:

 It kinda works
 Exception in thread "main" java.util.InputMismatchException
 at java.util.Scanner.throwFor(Unknown Source)
 at java.util.Scanner.next(Unknown Source)
 at java.util.Scanner.nextInt(Unknown Source)
 at java.util.Scanner.nextInt(Unknown Source)
 at Student.setHomeworkScore(Student.java:54)
 at CourseGrade.main(CourseGrade.java:20)

...「ちょっとうまくいく」ステートメントは、メソッドが正しく呼び出されているかどうかを確認するためのものです。

私の理解では、エラーは、.txt ファイルから間違ったタイプを読み取っていることを示していますが、その理由はわかりません。ファイルを正しく読み取っていますか?私は何時間もこのコードを見つめていじっていたので、どんな種類の助けも素晴らしいでしょう!

4

2 に答える 2

0

Oracle Java ドキュメントによると、トークンが要求されたパターン (int) に適合しないか、範囲外である場合、その例外がスローされます。

ファイルに int がない場合、その例外がスローされます。Scanners メソッドhasNextInt
で読み取る別の int 値があるかどうかを確認することで、その例外を回避できます。

例えば:

for(int i = 1; i <= 21 && scanner.hasNextInt(); i++) { 
            subAssignment = scanner.nextInt();
            assignment += subAssignment;
}

(それでも問題が解決しない場合は、入力ファイルも含める必要があります)

于 2013-10-18T23:10:51.377 に答える