【问题标题】:How to get average of first two numbers in array?如何获得数组中前两个数字的平均值?
【发布时间】:2014-08-29 16:43:23
【问题描述】:

我不知道如何获取数组中前 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

【问题讨论】:

    标签: java arrays methods double average


    【解决方案1】:

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

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

    numbers 将成为您方法中的double[]

    这是由JLS §8.4.1: Formal Parameters指定的。

    【讨论】:

    • 我从来没有机会使用可变参数。我喜欢这个解决方案。
    • 我个人更愿意使用这种方式,但我需要学习如何同时使用这两种方式。
    【解决方案2】:

    您的 public static double average(double[] numbers) 方法的参数是一个 double[] 数组,但您只需在此处传递两个 double 值:average(numbers[0],numbers[1]));

    要解决此问题,请将您的方法更改为 public static double average(double... numbers) 或传递一个数组:average(new double[] {numbers[0], numbers[1]})

    【讨论】:

      【解决方案3】:
      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
      

      【讨论】:

      • 它最初是这个公共静态双平均(双...数字),但我的任务要求编写一个名为 NoVarargsTest 的程序,它与第 7.13 节(印刷版第 282 页)中的 7.20 相同,但是使用双精度数组代替可变参数。确保了解如何以两种方式进行。现在更改它,以便它读取值作为命令行参数(如果存在),如果不存在,则使用原始程序中提供的数据。
      • 这个编辑后的代码是否仍在使用可变参数@Alexandre Santos
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 2014-05-28
      • 2019-07-20
      • 1970-01-01
      • 2013-08-29
      相关资源
      最近更新 更多