Java 我的程序是试图计算学生考试成绩的范围、平均值和高分
getRange()可以工作,getAverage()可以工作,但是getHighScore()似乎不工作。答案总是0。我在我的代码中使用了4分制来获得高分,所以如果一个人的平均分为95分,范围为5分,那么他们将获得5分的高分。然后除以5,再乘以4,将答案保留在4之外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
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。您可以使用更多的数学知识来缩短您的函数。例如,您