SikRik
SikRik

Reputation: 5

How to get average of first two numbers in array?

I cant figure out how to get just the average of the first 2 numbers in the array, and then the first 3 numbers. I am getting error on these lines. average(numbers[0],numbers[1])); and average(numbers[0],numbers[1],numbers[2])); here is my code.

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

Upvotes: 0

Views: 232

Answers (3)

Alexandre Santos
Alexandre Santos

Reputation: 8338

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

Upvotes: 0

ToasteR
ToasteR

Reputation: 888

Your public static double average(double[] numbers) method's parameter is a double[] array, but you just pass two double values here: average(numbers[0],numbers[1]));

To solve this either change your method to public static double average(double... numbers) or pass an array: average(new double[] {numbers[0], numbers[1]})

Upvotes: 2

nanofarad
nanofarad

Reputation: 41311

If you want to use varargs, you must declare your method signature as:

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

numbers will then be a double[] within your method.

This is specified by JLS §8.4.1: Formal Parameters.

Upvotes: 4

Related Questions