如何获得数组中前两个数的平均值?

问题描述:

我无法弄清楚如何获得阵列中前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 

如果你想使用可变参数,你必须声明你的方法签名:

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

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]})

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