2014-08-29 94 views
0

我無法弄清楚如何獲得陣列中前2個數字的平均值,然後是前3個數字。我在這些線路上出現錯誤。 average(numbers[0],numbers[1]));average(numbers[0],numbers[1],numbers[2]));這裏是我的代碼。如何獲得數組中前兩個數的平均值?

public class NoVarargsTest{ 
    // calculate average 
    public static double average(double[] numbers){ 
     double total = 0.0; 
     // calculate total using the enhanced for statement 
     for (double d : numbers){     
      total += d; 
     }       
     return (total/(double)numbers.length); 
    } 
    public static void main (String[] args) { 
     double d1 = 10.0; 
     double d2 = 20.0; 
     double d3 = 30.0; 
     double d4 = 40.0; 

     double[] numbers= new double[4]; 
     numbers[0] = 10.0; 
     numbers[1] = 20.0; 
     numbers[2] = 30.0; 
     numbers[3] = 40.0; 

     if (args.length == 0) 
      System.out.println("No Command Line arguments"); 
     else { 

      System.out.println("You provided " + args.length 
        + " arguments"); 

      for (int i = 0; i < args.length; i++) { 
       System.out.println("args[" + i + "]: " 
         + args[i]); 
      } 
     } 

     System.out.printf("d1 = %.1f%nd2 = %.1f%nd3 = %.1f%nd4 = %.1f%n%n",numbers[0],numbers[1], numbers[2], numbers[3]); 
     System.out.printf("Average of d1 and d2 is %.1f%n", 
     average(numbers[0],numbers[1])); 
     System.out.printf("Average of d1, d2 and d3 is %.1f%n", 
     average(numbers[0],numbers[1],numbers[2])); 
     System.out.printf("Average of d1, d2, d3 and d4 is %.1f%n", 
     average(numbers)); 
    } 

} // end class NoVarargsTest 

回答

4

如果你想使用可變參數,你必須聲明你的方法簽名:

public static double average(double... numbers){ 

numbers屆時將你的方法中的double[]

這由JLS §8.4.1: Formal Parameters指定。

+1

我從來沒有機會使用可變參數。我喜歡這個解決方案。 – 2014-08-29 16:52:41

+0

我個人寧願用這種方式,但我需要學習如何使用這兩種方式。 – SikRik 2014-08-29 17:30:38

2

public static double average(double[] numbers)方法的參數是一個double []數組,但你只是通過兩個雙值這裏:average(numbers[0],numbers[1]));

爲了解決這個問題要麼改變你的方法來public static double average(double... numbers)或傳遞一個數組:average(new double[] {numbers[0], numbers[1]})

0
import java.util.Arrays; 

public class NoVarargsTest 
{ 
    // calculate average 
    public static double average(double[] numbers) 
    { 

     double total = 0.0; 
     // calculate total using the enhanced for statement 
     for (double d : numbers) 
     { 
      total += d; 
     } 
     return total/(double)numbers.length; 
    } 

    // prints the wording around the array 
    private static void driver(double[] numbers) 
    { 
     System.out.println("The average of " + Arrays.toString(numbers) + " is "+average(numbers)); 
    } 

    public static void main(String[] args) 
    { 
     driver(new double[] {10}); 
     driver(new double[] {10, 20}); 
     driver(new double[] {10, 20, 30}); 
    } 

} // end class VarargsTest 
+0

它最初是這個公共靜態雙平均(double ...數字),但我的任務要求編寫一個名爲NoVarargsTest的程序,該程序與7.13節(打印版本的282頁)中的7.20相同,但使用了一個雙精度數組的可變參數。確保瞭解如何做到這一點。現在修改它,以便它將這些值作爲命令行參數(如果它們存在)讀取,如果不存在,則使用原始程序中提供的數據。 – SikRik 2014-08-29 17:25:10

+0

是的,這是我遇到的問題 – SikRik 2014-08-29 17:27:45

+0

感謝卡住了這一段時間 – SikRik 2014-08-29 17:29:09