0

問題のコードは次のとおりです。

 public class GradeBookRunner
 {
 public static void main( String args[] )
  {
    out.println("Welcome to the Class Stats program!");
    int num = 1;
    int count = 0;
    String stuGrades = "";
    String stuName = "";
    Scanner keyboard = new Scanner(System.in);
    out.print("What is the name of this class? ");
    String clsName = keyboard.nextLine();
    out.println("\n");
    out.print("How many students are in this class? ");
    int clsNum = keyboard.nextInt();
    Class CSAB = new Class(clsName, clsNum);
    out.println("\n");
    out.print("Enter the name of student 1 : ");
    stuName = keyboard.nextLine();
    keyboard.next();
    out.print("Enter the grades for " + stuName + "\nUse the format x - grades ( 2 - 100 100) : ");
    //count = keyboard.nextInt();
    //keyboard.next();
    //for(int i = 0; i < count; i++)
    //{
        stuGrades += keyboard.nextLine() + " ";
    //}

    Student add = new Student(stuName,stuGrades);
    CSAB.addStudent(num, add);
    stuGrades = "";
    num++;
    out.println();

これが利用するクラスのコードは、次のリンクにあります。

Grades.java: http://pastebin.com/ahYRS2WD

Student.java: http://pastebin.com/EBF4BBCb

Class.java: http://pastebin.com/A1C9fCL1

私の問題は、コードを実行してクラス名、クラスサイズ、学生名を入力した後に発生します。これらはすべて問題ありません。次のような学生の成績を入力すると、エラーが発生するのはこの次のビットです。3 - 70.2 65.3 45.1

編集 ここに私が得ているエラーがあります:

クラススタッツプログラムへようこそ!このクラスの名前は何ですか? ap

このクラスには何人の生徒がいますか? 1

学生の名前を入力してください 1 : ほとんど

ほとんどの成績を入力してください

x - グレード (2 - 100 100) の形式を使用します: スレッド「メイン」で例外が発生しました

java.util.NoSuchElementException

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 lab19b.Grades.setGrades(Grades.java:31)

at lab19b.Grades.<init>(Grades.java:25)

at lab19b.Student.<init>(Student.java:27)

at lab19b.GradeBookRunner.main(GradeBookRunner.java:42)

EDIT2

stuGrades問題は、次のような行全体を読み取る必要があることだと考えて3 - 70.2 65.3 45.1いますが、キーボード入力を文字列に入れる必要があるスキャナーステートメントがわかりません

EDIT3

が適切に機能しているという私の証拠は次のgrades.javaとおりです。

package lab19b;

import java.util.Arrays;
import java.util.Scanner;
import static java.lang.System.*;
import static java.util.Arrays.*;

 public class GradesTester
 {
public static void main( String args[] )
 {
    Grades test = new Grades("5 - 90 85 95.5 77.5 88");
    out.println(test);
    out.println("sum = " + test.getSum());  
    out.println("num grades = " + test.getNumGrades());                                         
    out.println("low grade = " + test.getLowGrade());       
    out.println("high grade = " + test.getHighGrade()+ "\n\n");

    test.setGrades("9 - 10 70 90 92.5 85 95.5 77.5 88 100.0");
    out.println(test);
    out.println("sum = " + test.getSum());  
    out.println("num grades = " + test.getNumGrades());                                         
    out.println("low grade = " + test.getLowGrade());       
    out.println("high grade = " + test.getHighGrade());

次のような出力: 90.0 85.0 95.5 77.5 88.0

合計 = 436.0

成績数 = 5

低グレード = 77.5

ハイグレード=95.5

10.0 70.0 90.0 92.5 85.0 95.5 77.5 88.0 100.0

合計 = 708.5

成績数 = 9

低グレード = 10.0

ハイグレード = 100.0

4

1 に答える 1

0

あなたの問題はsetGrades(String gradeList)Grades の public void 関数にあります。Line 27 これは、全体gradeListが「ab c」のようなものであることを意味します。これを配列関数に変換し、個々の文字列を読み取ります。[a]、[b]、[c]。String の関数を使用splitして配列を形成し、grades[i]

Scanner のこのメソッドは問題を引き起こしています。これは、後に解析する入力が残っていないことを意味しscan.nextInt()ます。

 // If we are at the end of input then NoSuchElement;
  903     // If there is still input left then InputMismatch
  904     private void throwFor() {
  905         skipped = false;
  906         if ((sourceClosed) && (position == buf.limit()))
  907             throw new NoSuchElementException();
  908         else
  909             throw new InputMismatchException();
  910     }
于 2013-02-28T04:07:23.290 に答える