0

計算を行ったり、出力を表示したりする前に、すべての生徒の情報を読んでください。3つの試験のスコアが0〜50ポイントであり、入力時に最終が0〜100ポイントであることを確認します。必要に応じて簡単に更新できるように、最小値と最大値を定数として宣言しました。無効な場合は、エラーメッセージを表示し、ユーザーがその無効なスコアを再入力できるようにします。すべての学生情報が読み込まれたら、各学生の名前をLASTNAME、FIRSTNAME(すべて大文字)の形式で表示し、学生の試験のパーセンテージ(すべての試験の合計と最終/可能な合計)を小数点以下1桁まで、および学生の最終成績に基づいて表示します。次のパーセンテージ:

90-100 A、80-89.9 B、70-79.9 C、60-60.9 D、60F未満

出力はどのように見えると思われますか

これは私がすでに入力したものですが、いくつかのエラーが発生し、値を正しく割り当てているかどうかわかりません。

import java.util.*;
import java.text.*;


public class Proj4 {
public static void main(String[] args){
Scanner s= new Scanner(System.in);
String input;
String again = "y";

int [] exams = new int[4];
int student = 1;

do
{

    String [] names = new String[student];
        System.out.print("PLease enter the name of student" + student );
        names[student-1] = s.nextLine();
        for ( int i = 1; i < exams.length; i++){
            if(i==4){
                System.out.print("Please enter score for Final Exam: ");
            }

            System.out.print("Please enter score for Exam" + i);
            exams[i] = s.nextInt(); 

                if((exams[1]<0||exams[1]>50)||(exams[2]<0||exams[2]>50)||(exams[3]<0||exams[3]>50)){
                    System.out.println("Invalid enter 0-50 only...");
                    System.out.print("Please re-enter score: ");
                    exams[i] = s.nextInt();
                }
                else if(exams[4]<0||exams[4]>100){
                    System.out.println("Invalid enter 0-100 only...");
                    System.out.print("Please re-enter score: ");
                    exams[i] = s.nextInt();
                }
        }
        System.out.println("do you wish to enter another?");
        again = s.nextLine();
    student++;
}while (again.equalsIgnoreCase ("y"));
}
}

これはエラーメッセージです:

スレッド「main」の例外java.lang.ArrayIndexOutOfBoundsException:4 at Proj4.main(Proj4.java:32)

しかし、32行目は単なる}であるため、混乱します。それが何を意味するのか正確にはわかりません。おそらく、配列の入力の1つの長さを短くする必要があることはわかっていますが、どちらか、またはあるかどうかはわかりません。それよりも間違っています。

編集:

申し訳ありませんが、私の質問です。問題を理解したり、必要な出力を取得するために私が間違っているかどうか、または何をしているかを教えていただけませんか。

4

2 に答える 2

1

配列examsには4つの要素しかありませんが、ここでインデックス4の5番目の要素にアクセスしようとしますexams[4]<0。配列の最初のインデックスは0です(1ではありません)。

于 2013-03-01T04:18:00.327 に答える
0

以下はあなたのために働きますか?

public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        String again = "y";

        int[] exams = new int[4];
        int student = 1;

        do {

            String[] names = new String[student];
            System.out.print("PLease enter the name of student" + student);
            names[student - 1] = s.nextLine();
            for (int i = 0; i < exams.length; i++) {
                System.out.println(i + " i");
                if (i == 3) {
                    System.out.print("Please enter score for Final Exam: ");
                    exams[i] = s.nextInt();
                    if (exams[3] < 0 || exams[3] > 100) {
                        System.out.println("Invalid enter 0-100 only...");
                        System.out.print("Please re-enter score: ");
                        exams[i] = s.nextInt();
                    }
                } else {
                    System.out.print("Please enter score for Exam " + i);
                    exams[i] = s.nextInt();

                    if ((exams[i] < 0 || exams[i] > 50)) {
                        System.out.println("Invalid enter 0-50 only...");
                        System.out.print("Please re-enter score: ");
                        exams[i] = s.nextInt();
                    }

                }
            }
            System.out.println("do you wish to enter another?");
                again = s.next();
                student++;
        } while (again.equalsIgnoreCase("y"));
    }
于 2013-03-01T08:36:30.180 に答える