1

这里有什么问题?它不是按降序打印考试成绩,我也没有得到平均值。显示 0.0

她是给我的指示:

此类将允许用户将 5 个分数输入到数组中。然后它将按降序重新排列数据并计算数据集的平均值。

属性:

• data[]——将包含分数的数组

• mean——分数的算术平均值

方法:

• 平均——构造函数。它将为数组分配内存。使用 for 循环重复向用户显示提示,提示用户应输入分数 1、分数 2 等。注意:计算机从 0 开始计数,但人从 1 开始计数,您的提示应该考虑为了这。例如,当用户输入分数 1 时,它将被存储在索引变量 0 中。然后构造函数将调用 selectionSort 和 calculateMean 方法。

• calculateMean — 这是一种使用 for 循环访问数组中的每个分数并将其添加到运行总计的方法。总分除以分数个数(使用数组的长度),结果存入均值。

• toString——返回一个包含降序数据和平均值的字符串。

• selectionSort——他的方法使用选择排序算法将数据集从最高到最低重新排列。

import java.util.Scanner;

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

    public Average()
    {

        data = new int[5];
        Scanner keyboard = new Scanner(System.in);

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

    public void calculateMean()
    {

        int i, s = 0;
        for(i = 0; i < data.length; i++)
        {
            s = s + data[i];
        }

        mean = (double)s / (data.length);

    }

    public void selectionSort()
    {
        int maxIndex;
        int maxValue;

        for(int startScan = 0; startScan < data.length - 1; startScan++)
        {
            maxIndex = startScan;
            maxValue = data[startScan];
            for(int index = startScan + 1; index < data.length; index++)
            {
                if(data[index] > maxValue)
                {
                    maxValue = data[index];
                    maxIndex = index;
                }
            }
            data[maxIndex] = data[startScan];
            data[startScan] = maxValue;
        }
    }

    public String toString()
    {
        String output;
        output = "The test scores in descending order are \n";

        for(int i = 0; i < data.length; i++)
        {
            output = output + data[i] + " ";
        }
        output = output + "\nThe average is " + mean;
        return output;
    }
}
4

4 回答 4

2

看起来您没有calculateMean()像这样首先执行方法调用:

public static void main(String[] args) {
    Average average = new Average();
    average.calculateMean();
    average.selectionSort();
    System.out.println(average.toString());
}
于 2013-04-17T01:31:12.123 回答
2

所有你需要的是

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

一切就绪。我第二个@HeatfanJohn

于 2013-04-17T01:32:31.140 回答
2

您需要使用您的方法返回接收值的方法。这是您的程序的一个小模型,以说明我的意思:

public static void main(String... args)
{
    System.out.println(calculateMean(getData()));
}

public static int[] getData()
{
    data = new int[5];
    Scanner s = new Scanner(System.in);

    for (int i = 0; i < data.length; i++)
    {
        System.out.print("Enter score number " + (i++) + ": ");
        data[i] = Integer.parseInt(s.nextLine());
    }
    s.close();
    return data;
}

public static double calculateMean(int[] data)
{

    int s = 0;
    for (int i = 0; i < data.length; i++)
    {
        s += data[i];
    }
    return mean = (double) s / (data.length);
}

getData()方法从用户那里获取我们需要的所有信息,然后我们获取该数据并将其直接传递给该calculateMean()方法。反过来,这会为我们吐出所有分数的平均值。然后我们所做的就是打印它。我会把剩下的留给你,因为这看起来像家庭作业。


试运行

输入:(4, 67, 3, 7, 3逗号表示换行)

输出:16.8

于 2013-04-17T01:15:28.297 回答
1

您永远不会调用calculateMean(),这就是平均值为零的原因。在您的 main 或您创建 Average 实例的任何地方,您需要calculateMean()在引用之前调用Average.toString()

于 2013-04-17T01:15:15.183 回答