2013-04-17 60 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