我的阵列有些问题

时间:2018-08-08 11:36:39

标签: java arrays

我的讲师给我这些问题:
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。任何人,请帮助我,谢谢!!!

2 个答案:

答案 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函数。