2013-04-17 144 views
1

这里有什么问题?这不是按降序打印测试成绩,也不是我为平均值获取价值。显示出来0.0平均班级不工作

她的是,我被给出的说明:

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

属性:

•数据[] - 的阵列,其将包含分数

•均值运算的得分

方法的平均:

•平均-构造。它将为阵列分配内存。使用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; 
    } 
} 
+1

为什么-1没有评论? – HeatfanJohn

回答

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

+0

谢谢你的回答!我的教授在这部分内容中略过了一些内容,所以我一直需要通过谷歌搜索来完成。 –

+0

不客气!在我的示例中,我在代码中添加了一些改进,您可能会发现可以在自己的代码中使用它们。让我知道你是否需要别的帮助。 – syb0rg

1

你永远不会打电话给calculateMean(),这就是为什么平均值为零。在您主要或创建平均实例的情况下,您需要在引用Average.toString()之前致电calculateMean()

2

它看起来像你不执行calculateMean()方法调用第一像:

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

谢谢你的回应!完美的作品! –

2

所有你需要的是

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

万事具备。我第二@HeatfanJohn