Java 如何修复脚本以正确的顺序运行?

Java 如何修复脚本以正确的顺序运行?,java,selection-sort,Java,Selection Sort,程序应该会返回 考试分数按降序排列为:(分数)平均分为 (平均) 我收到的结果是 平均值为(平均值)。考试分数按降序排列为: (分数) 我怎样才能修好它以获得适当的回报 import java.util.Scanner; public class Average { private int[] data; private double mean; public Average() { data = new int[5]; int

程序应该会返回

考试分数按降序排列为:(分数)平均分为 (平均)

我收到的结果是

平均值为(平均值)。考试分数按降序排列为: (分数)

我怎样才能修好它以获得适当的回报

import java.util.Scanner;

public class Average
{
    private int[] data;
    private double mean;

    public Average()
    {
        data = new int[5];
        int number = 0;
        int Temp = 0;
        String[] Scores = new String[5];
        Scanner keyboard = new Scanner(System.in);

        for(int index = 0; index < data.length; index++)
        {
            number++;
            System.out.print("Enter test score #" + number + ":");
            Temp = keyboard.nextInt();
            data[index] = Temp;
        }

        selectionSort();
        calculateMean();
    }

    public void selectionSort()
    {
        int n = data.length;

        for(int index = 0; index < n-1; index++)
        {
            int min_idx = index;
            for(int j = index+1; j < n; j++)
                if(data[j] >= data[min_idx])
                    min_idx = j;

            int temp = data[min_idx];
            data[min_idx] = data[index];
            data[index] = temp;
        }
    }

    public String toString()
    {
        String MyScore = "Your test scores in descending order are: " +     "\n";

        for(int index = 0; index < data.length; index++)
        {
            MyScore += data[index] + " ";
        }
        return MyScore;
    }

    public void calculateMean()
    {
        int Sum = 0;
        int Mean = 0;

        for(int index = 0; index < data.length; index++)
        {
            Sum += data[index];
        }
        Mean = Sum/data.length;
        System.out.println("The average is " + mean);
    }
}

无法打印正确平均值的错误在于此方法:

public void calculateMean() {
    int Sum = 0;
    int Mean = 0;

    for (int index = 0; index < data.length; index++) {
        Sum += data[index];
    }
    Mean = Sum / data.length;
    System.out.println("The average is " + mean);
}
public void calculateMean(){
整数和=0;
int平均值=0;
for(int index=0;index

您正在打印出全局定义的
mean
,但从未初始化,因此它默认为
0
。在这种方法中,您有一个变量
Mean
(大写),它是实际值存储在其中的变量,这就是您要打印的变量。

只有在调用
toString()
之后,您才应该调用
calculateMean()

因此,您可以修改构造函数

selectionSort();
System.out.println(toString());
calculateMean();
或者只调用
selectionSort()在构造函数中,然后在
main

public class AverageDriver
{
    public static void main(String[] args)
    {
         Average myScores = new Average();
         System.out.print(myScores);
         myScores.calculateMean();
    }
}
顺便说一下,变量应该使用小写名称,这将修复
calculateMean()
中的错误:您正在调用
System.out.println(“平均值是”+mean)但变量是
Mean

public static void main(String[] args)
{
    Average MyScores = new Average();
    System.out.print(MyScores);
}
创建
Average
实例时,将调用构造函数。在构造函数中有一个对
calculateMean()
的调用,该调用将打印

平均数是(平均数)

打印
MyScores
时,将调用覆盖
toString()
,它按降序打印测试分数为:(分数)

从构造函数中取出方法调用(它们首先不应该在那里),然后从
main

public static void main(String[] args)
{
    Average myScores = new Average();
    System.out.print(myScores);
    myScores.selectionSort();
    myScores.calculateMean();
}

Post
main
(或者无论您在哪里使用
Average
class)。我将它改为“意思”,它仍然给出了错误的执行顺序,如上所述。
public static void main(String[] args)
{
    Average myScores = new Average();
    System.out.print(myScores);
    myScores.selectionSort();
    myScores.calculateMean();
}