Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何计算平均分数?_Java_Eclipse - Fatal编程技术网

Java 如何计算平均分数?

Java 如何计算平均分数?,java,eclipse,Java,Eclipse,我正在制作一个直方图,它收集学生分数的结果,并显示在一定范围内的分数,例如0-29或70-100 我想知道如何编辑代码,以便计算平均分数。我知道平均分数是通过将所有数字相加,然后除以数字的数量来计算的,但我在将其应用到我的程序中时遇到了困难 这是我的密码: public static void main(String[] args) { int studentMark = 0; // ranges from (1)0-29, (2)30-39, (3)40-69, (4)70

我正在制作一个直方图,它收集学生分数的结果,并显示在一定范围内的分数,例如0-29或70-100

我想知道如何编辑代码,以便计算平均分数。我知道平均分数是通过将所有数字相加,然后除以数字的数量来计算的,但我在将其应用到我的程序中时遇到了困难

这是我的密码:

public static void main(String[] args) {

    int studentMark = 0;

    // ranges from (1)0-29, (2)30-39, (3)40-69, (4)70-100 (4 ranges)

    int firstRange = 0;         // (1)
    int secondRange = 0;        // (2)
    int thirdRange = 0;         // (3)
    int fourthRange = 0;        // (4)

    // counts all 'mark' attempts (except anything > 100)

    int numberOfStudents = 0;

    Scanner input = new Scanner(System.in);

    do{
        System.out.println("Enter a mark from 1-100: ");
        studentMark = input.nextInt();

    if (studentMark < 29) 
    {
        firstRange++;
        numberOfStudents++;
    }

    if ((studentMark > 29) && (studentMark <= 39)) 
    {
        secondRange++;
        numberOfStudents++;
    }

    if ((studentMark <= 69) && (studentMark > 39)) 
    {
        thirdRange++;
        numberOfStudents++;
    }

    if ((studentMark <= 100) && (studentMark > 69))
    {
        fourthRange++;
        numberOfStudents++;
    }


    }while ((studentMark <= 100))


    System.out.println("\nResults: \n");
    System.out.println("Number of students in total: " + numberOfStudents);
    System.out.println("\nStudents who ranged from 0-29: " + firstRange );
    System.out.println("Students who ranged from 30-39: " + secondRange);
    System.out.println("Students who ranged from 40-69: " + thirdRange);
    System.out.println("Students who ranged from 70-100: " + fourthRange);

    }
publicstaticvoidmain(字符串[]args){
int studentMark=0;
//范围从(1)0-29,(2)30-39,(3)40-69,(4)70-100(4个范围)
int firstRange=0;//(1)
int secondRange=0;//(2)
int thirdRange=0;/(3)
int-fourthRange=0;//(4)
//统计所有“标记”尝试次数(任何大于100的尝试除外)
int numberOfStudents=0;
扫描仪输入=新扫描仪(System.in);
做{
System.out.println(“输入1-100之间的标记:”);
studentMark=input.nextInt();
如果(学生分数<29)
{
firstRange++;
学生人数++;
}

如果((studentMark>29)和&(studentMark除了每个范围的计数外,您还需要保留所有等级的总数和总计数(或只添加单个范围的总数)

边界测试是重复的,并且至少有两个案例未被处理:
-排名=29
-等级<0

下面是一个简化代码:

        // ranges from (1)0-29, (2)30-39, (3)40-69, (4)70-100 (4 ranges)
    final int[] roofs = new int[] {30, 40, 70, 101};
    final int[] compters = new int[roofs.length];
    final double[] sums = new double[roofs.length];
    final double[] means = new double[roofs.length];

    final Scanner input = new Scanner(System.in);
    do {
        System.out.println("Enter a mark from 0-100: ");
        final int studentMark = input.nextInt();
        int index = -1;

        if (studentMark < 0) {
            continue; // here to be ignored
        } else if (studentMark < roofs[0]) {
            index = 0;
        } else if (studentMark < roofs[1]) {
            index = 1;
        } else if (studentMark < roofs[2]) {
            index = 2;
        } else if (studentMark < roofs[3]) {
            index = 3;
        } else {
            break;
        }
        compters[index]++;
        sums[index] += studentMark;
    } while (true);
    input.close();

    final int numberOfStudents = Arrays.stream(compters).sum();
    IntStream.range(0, roofs.length).forEach(i -> means[i] = sums[i] / compters[i]);
//范围从(1)0-29,(2)30-39,(3)40-69,(4)70-100(4个范围)
最终整数[]屋顶=新整数[]{30,40,70,101};
最终整数[]计算机=新整数[屋顶长度];
最终双[]和=新双[屋顶.长度];
最终双[]表示=新双[屋顶.长度];
最终扫描仪输入=新扫描仪(System.in);
做{
System.out.println(“输入0-100之间的标记:”);
final int studentMark=input.nextInt();
int指数=-1;
如果(学生分数<0){
continue;//此处将被忽略
}else if(studentMark<0]){
指数=0;
}否则如果(学生标记<屋顶[1]){
指数=1;
}否则如果(学生标记<屋顶[2]){
指数=2;
}否则如果(学生标记<屋顶[3]){
指数=3;
}否则{
打破
}
计算机[索引]+;
总和[指数]+=学生分数;
}虽然(正确);
input.close();
final int numberOfStudents=Arrays.stream(computers.sum();
IntStream.range(0,roof.length).forEach(i->表示[i]=总和[i]/计算机[i]);

你的代码有什么问题?我回滚了你上次的编辑,因为你用与问题无关的代码替换了代码部分。请避免这样做,也不要像在其他问题中那样完全删除代码部分。说得很好。我创建了一个名为
keepMark
的变量并执行
>keepMark=keepMark+studentMark;
在每个语句的末尾。当然,现在我可以用总数除以学生人数。谢谢!