0

在进行任何计算或显示任何输出之前,请阅读所有学生的信息。确认 3 次考试成绩在 0-50 分之间,并且在输入时确保期末考试成绩在 0-100 分之间。将最小值和最大值声明为常数,以便根据需要轻松更新它们。如果无效,则显示错误消息并允许用户重新输入该无效分数。读入所有学生信息后,以 LASTNAME、FIRSTNAME(全部大写)的格式显示每个学生的姓名、学生的考试百分比(所有考试的总和加上可能的期末/总数)到小数点后 1 位和学生的期末成绩,基于以下百分比:

90-100 A、80-89.9 B、70-79.9 C、60-60.9 D、低于 60 F

输出应该是什么样子

这是我已经输入的内容,但它给了我一些错误,我不确定我是否正确分配了值。

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"));
}
}

这是错误消息:

线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:Proj4.main 中的 4(Proj4.java:32)

但它令人困惑,因为第 32 行只是一个 } 所以我真的不知道它的确切含义,我知道我可能需要减少数组输入之一的长度,但我不确定哪个或是否有什至比这更错误。

编辑:

抱歉,这是我的问题,你们能帮我找出问题和/或告诉我是否或我做错了什么来获得我需要的输出吗?

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 回答