Java 获得学生平均分数的考试成绩

Java 获得学生平均分数的考试成绩,java,arrays,for-loop,user-input,do-while,Java,Arrays,For Loop,User Input,Do While,在进行任何计算或显示任何输出之前,阅读所有学生的信息。验证 3次考试分数在0-50分之间,期末考试分数在0-100分之间。 将最小值和最大值声明为常量,以便根据需要轻松更新。如果无效, 显示错误消息并允许用户重新输入无效分数。阅读所有学生信息后 在中,以LASTNAME、FIRSTNAME(全大写)和学生姓名的格式显示每个学生的姓名 小数点后1位的考试百分比(所有考试的总数加上期末/可能的总数)和学生的期末成绩, 根据以下百分比: 90-100A,80-89.9B,70-79.9C,60-60.

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

90-100A,80-89.9B,70-79.9C,60-60.9D,低于60华氏度

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

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"));
}
}
import java.util.*;
导入java.text.*;
公共类项目4{
公共静态void main(字符串[]args){
扫描仪s=新的扫描仪(System.in);
字符串输入;
再次使用String=“y”;
int[]考试=新int[4];
int student=1;
做
{
字符串[]名称=新字符串[学生];
系统输出打印(“请输入学生姓名”+学生姓名);
name[student-1]=s.nextLine();
for(int i=1;i
这是错误消息:

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

但是它让人困惑,因为第32行只是一个}所以我真的不知道它到底是什么意思, 我知道我可能需要减少数组的一个输入的长度,但我不确定是哪一个,或者是否有更多的错误

编辑:


对不起,这是我的问题,你们能帮我解决这个问题吗?或者告诉我,为了获得所需的输出,我是否做错了,或者我做错了什么?

数组
考试
只有4个元素,但您尝试在这里使用索引4访问第5个元素
考试[4]下面的内容对您有用吗

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"));
    }
publicstaticvoidmain(字符串[]args){
扫描仪s=新的扫描仪(System.in);
再次使用String=“y”;
int[]考试=新int[4];
int student=1;
做{
字符串[]名称=新字符串[学生];
系统输出打印(“请输入学生姓名”+学生姓名);
name[student-1]=s.nextLine();
for(int i=0;i100){
System.out.println(“仅输入0-100无效…”);
系统输出打印(“请重新输入分数:”);
考试[i]=s.nextInt();
}
}否则{
系统输出打印(“请输入考试分数”+i);
考试[i]=s.nextInt();
如果((考试[i]<0 | |考试[i]>50)){
System.out.println(“仅输入0-50无效…”);
系统输出打印(“请重新输入分数:”);
考试[i]=s.nextInt();
}
}
}
System.out.println(“您想输入另一个吗?”);
再次=s.next();
学生++;
}while(同样,相等信号情况(“y”);
}

oh所以不是考试1-4它应该是0-3?如果你需要访问循环中的第一个元素,你可能应该在
for(int i=0)
中将索引
i
更改为0。好的,我已经解决了这个问题,但是代码没有打印出行“请输入期末考试分数:”我将所有的is减少了1,设置i=0开始,它的if语句是if(i==3)…你能看到它这样做的原因吗?在这里也检查逻辑
String[]names=newstring[student]创建大小为student=1的固定数组;