Java 我的程序是试图计算学生考试成绩的范围、平均值和高分

Java 我的程序是试图计算学生考试成绩的范围、平均值和高分,java,Java,getRange()可以工作,getAverage()可以工作,但是getHighScore()似乎不工作。答案总是0。我在我的代码中使用了4分制来获得高分,所以如果一个人的平均分为95分,范围为5分,那么他们将获得5分的高分。然后除以5,再乘以4,将答案保留在4之外 public int getAverage() //Gets average of test scores { //Compute and return the average int average; a

getRange()可以工作,getAverage()可以工作,但是getHighScore()似乎不工作。答案总是0。我在我的代码中使用了4分制来获得高分,所以如果一个人的平均分为95分,范围为5分,那么他们将获得5分的高分。然后除以5,再乘以4,将答案保留在4之外

public int getAverage() //Gets average of test scores
{
    //Compute and return the average
    int average;
    average = (int) Math.round((test1 + test2 + test3) / 3.0); //Rounds the average number
    return average;
}

public int getRange() //Gets range of test scores
    {
        int range;
        range = 0;
        if (test1 >= test2 && test1 >= test3)
            if (test2 >= test3)
                range = test1-test3;
            else if (test3 >= test2)
                range = test1-test2;
        if (test2 >= test1 && test2 >= test3)
            if (test1 >= test3)
                range = test2-test3;
            else if (test3 >= test1)
                range = test2-test1;
        if (test3 >= test1 && test3 >= test2)
            if (test1 >= test2)
                range = test3-test2;
            else if (test2 >= test1)
                range = test3-test1;
        return range;
    }

public double getHighScore() //Formula for finding highscore with the use of getAverage() and getRange()

{
        double highscore;
        highscore = 0;
        if (getAverage() >= 90)
            highscore = highscore + 4;
        else if (getAverage() >= 80 && getAverage() < 90)
            highscore = highscore + 3;
        else if (getAverage() >= 70 && getAverage() < 80)
            highscore = highscore + 2;
        else if (getAverage() >= 60 && getAverage() < 70)
            highscore = highscore + 1;
        else
            highscore = highscore + 0;
        if (getRange() <= 10)
            highscore = highscore + 1;
        else if (getRange() <=20 && getRange() > 10)
            highscore = highscore + (3/4);
        else if (getRange() <=30 && getRange() > 20)
            highscore = highscore + (2/4);
        else if (getRange() <=40 && getRange() > 30)
            highscore = highscore + (1/4);
        else
            highscore = highscore+0;
        highscore = highscore*(4/5);
        return highscore;
    }
public int getAverage()//获取考试分数的平均值
{
//计算并返回平均值
整数平均;
average=(int)Math.round((test1+test2+test3)/3.0);//对平均数进行舍入
收益率平均值;
}
public int getRange()//获取考试分数范围
{
整数范围;
范围=0;
如果(test1>=test2&&test1>=test3)
如果(test2>=test3)
范围=test1-test3;
else if(test3>=test2)
范围=test1-test2;
如果(test2>=test1&&test2>=test3)
如果(test1>=test3)
范围=test2-test3;
else if(test3>=test1)
范围=test2-test1;
如果(test3>=test1&&test3>=test2)
如果(test1>=test2)
范围=test3-test2;
else if(test2>=test1)
范围=test3-test1;
返回范围;
}
public double getHighScore()//使用getAverage()和getRange()查找highscore的公式
{
双高分;
高分=0;
如果(getAverage()>=90)
高分=高分+4;
否则如果(getAverage()>=80&&getAverage()<90)
高分=高分+3;
如果(getAverage()>=70&&getAverage()<80)
高分=高分+2;
否则如果(getAverage()>=60&&getAverage()<70)
高分=高分+1;
其他的
高分=高分+0;

如果(getRange()您的问题在返回高分之前的行中

highscore = highscore * (4 / 5);
具体地说,
(4/5)
将始终产生0,因为它是整数除法

事实上,您可以在多个地方使用它们,例如:

highscore = highscore + (3/4);
highscore = highscore + (2/4);
highscore = highscore + (1/4); 

您的问题在于返回高分之前的行中

highscore = highscore * (4 / 5);
具体地说,
(4/5)
将始终产生0,因为它是整数除法

事实上,您可以在多个地方使用它们,例如:

highscore = highscore + (3/4);
highscore = highscore + (2/4);
highscore = highscore + (1/4); 

问题可能在于这一行:

highscore = highscore*(4/5);
原因是,整数除法(4/5)返回0,您可以尝试:

highscore = highscore*(4.0/5.0);

将全整数除法更改为十进制除法。

问题可能出在这一行:

highscore = highscore*(4/5);
原因是,整数除法(4/5)返回0,您可以尝试:

highscore = highscore*(4.0/5.0);

将全整数除法改为十进制除法。

我确信您只是刚开始学习的学生,但此代码无法缩放

考虑将事情分解成更小的方法,您可以单独测试

public class Stats {

    public static double sum(double [] values) {
        double sum = 0.0;
        if (values != null) {
            for (double value : values) {
                sum += value;
            }
        }
        return sum;
    }

    public static double min(double [] values) {
        double minValue = Double.MAX_VALUE;
        if (values != null) {
            for (double value : values) {
                if (value < minValue) {
                    minValue = value;
                }
            }
        }
        return minValue;
    }


    public static double max(double [] values) {
        double maxValue = Double.MIN_VALUE;
        if (values != null) {
            for (double value : values) {
                if (value > mAXValue) {
                    maxValue = value;
                }
            }
        }
        return maxValue;
    }

    public static double ave(double [] values) {
        double ave = 0.0;
        if (values != null && values.length > 0) {
            ave = sum(values)/values.length;
        }
        return ave;
    }
}
公共类统计信息{
公共静态双和(双[]值){
双和=0.0;
如果(值!=null){
for(双值:值){
总和+=数值;
}
}
回报金额;
}
公共静态双最小值(双[]值){
双最小值=双最大值;
如果(值!=null){
for(双值:值){
如果(值<最小值){
最小值=最小值;
}
}
}
返回最小值;
}
公共静态双最大值(双[]值){
双最大值=双最小值;
如果(值!=null){
for(双值:值){
如果(值>最大值){
最大值=最大值;
}
}
}
返回最大值;
}
公共静态双ave(双[]值){
双平均值=0.0;
如果(值!=null&&values.length>0){
ave=总和(值)/值。长度;
}
返回大道;
}
}

我敢肯定你只是刚开始学习的学生,但这个代码无法扩展

考虑将事情分解成更小的方法,您可以单独测试

public class Stats {

    public static double sum(double [] values) {
        double sum = 0.0;
        if (values != null) {
            for (double value : values) {
                sum += value;
            }
        }
        return sum;
    }

    public static double min(double [] values) {
        double minValue = Double.MAX_VALUE;
        if (values != null) {
            for (double value : values) {
                if (value < minValue) {
                    minValue = value;
                }
            }
        }
        return minValue;
    }


    public static double max(double [] values) {
        double maxValue = Double.MIN_VALUE;
        if (values != null) {
            for (double value : values) {
                if (value > mAXValue) {
                    maxValue = value;
                }
            }
        }
        return maxValue;
    }

    public static double ave(double [] values) {
        double ave = 0.0;
        if (values != null && values.length > 0) {
            ave = sum(values)/values.length;
        }
        return ave;
    }
}
公共类统计信息{
公共静态双和(双[]值){
双和=0.0;
如果(值!=null){
for(双值:值){
总和+=数值;
}
}
回报金额;
}
公共静态双最小值(双[]值){
双最小值=双最大值;
如果(值!=null){
for(双值:值){
如果(值<最小值){
最小值=最小值;
}
}
}
返回最小值;
}
公共静态双最大值(双[]值){
双最大值=双最小值;
如果(值!=null){
for(双值:值){
如果(值>最大值){
最大值=最大值;
}
}
}
返回最大值;
}
公共静态双ave(双[]值){
双平均值=0.0;
如果(值!=null&&values.length>0){
ave=总和(值)/值。长度;
}
返回大道;
}
}

另一方面,我建议在if语句中始终使用
{}
,无论它是一行语句。当您(或其他人)在if语句中添加更多代码时,程序突然中断,您无法找出原因。因为已经有了答案,所以只需一个小提示:使用
getAverage()
getRange()
一遍又一遍,这意味着您在最坏的情况下计算这个值大约15次。您应该计算这个值1次,将它保存在一个变量中,然后用这个变量处理if-else。您可以使用更多的数学知识来缩短您的函数。例如,您