我的讲师给我这些问题:
1.编写一个执行以下操作的程序:
一种。获取用户(n)的学生人数
b。要求用户输入n个n个学生的成绩,并将其存储在数组中。
C。打印出这n个等级的最大值,最小值和平均值。
注意:编写3种方法以返回数组的max / min / average元素
并在此程序中使用它们。
我尝试执行此操作,但是程序的输出不符合我的预期。 这是我的代码:
package javaapplication2;
import java.util.*;
public class JavaApplication2 {
public static double max(double[]x) {
int i = 0;
int max=0;
for (i=0; i < x.length; i++) {
if (max < x[i]) {
max = i;
}
}
return max;
}
public static double min(double[]y) {
double min = max(y);
for (int i =0; i < y.length; i++) {
if (y[i] < min) {
min = y[i];
}
}return min;
}
public static void main(String[] args) {
String name ="";
String choice;
int times =0;
double score;
Scanner input = new Scanner(System.in);
System.out.println("Enter student's name: ");
name = input.nextLine();
while (name != "exit") {
double grades [] = new double [5000];
System.out.println("Enter student's score: ");
score = Double.parseDouble(input.nextLine());
grades[times] = score;
times += 1;
System.out.println("The max grade is: " + max(grades));
System.out.println("The min grades is: " + min(grades));
System.out.println("Enter student's name: ");
name = input.nextLine();
}
}
}
这是我的输出:
Enter student's name:
k
Enter student's score:30
The max grade is: 0.0
The min grades is: 0.0
Enter student's name:
是的,我不知道为什么我的最高成绩和最低成绩为0.0。任何人,请帮助我,谢谢!!!
答案 0 :(得分:0)
您的问题来自于每个循环重新分配成绩数组
public static void main(String[] args) {
String name ="";
String choice;
int times =0;
double score;
Scanner input = new Scanner(System.in);
System.out.println("Enter student's name: ");
name = input.nextLine();
while (name != "exit") {
//you set the grades array each loop to a new empty array
double grades [] = new double [5000]; //<--- Move this one out
System.out.println("Enter student's score: ");
score = Double.parseDouble(input.nextLine());
grades[times] = score;
times += 1;
System.out.println("The max grade is: " + max(grades));
System.out.println("The min grades is: " + min(grades));
System.out.println("Enter student's name: ");
name = input.nextLine();
}
}
将其移出,然后尝试完成方法:)
编辑:
关于值,max方法也有一些错误。
public static double max(double[]x) {
int i = 0;
int max=0;
for (i=0; i < x.length; i++) {
if (max < x[i]) {
max = i; //<-- Not max = i but max = x[i] :)
}
}
return max;
}
答案 1 :(得分:0)
在计算最大值的函数中,应使用:
if (max < x[i]) {
max = x[i];
}
要返回元素而不是它的索引。另外,您还想在while循环之前声明名为grades
的数组,否则它将在每次迭代时创建一个新数组。
并用于提高代码性能:
1。。您可以在max / min函数中,遇到值= 0时退出循环。在您当前的代码中,即使只有一个条目,循环也会迭代5000次。
2。。在您的min
函数中,您应该使用double min = max(y);
而不是进行double min = Double.MAX_VALUE;
。这样可以避免不必要地调用max
函数。