I have a homework assignment and I was wondering if anyone could help me as I am new to Java and programming and am stuck on a question. The question is:

The first method finds the average of the elements of an integer array:

public double average(int[] data)

That is, given an integer array, data, calculate the average of its elements are return the average value. For example, the average of {1, 3, 2, 5, 8} is 3.8.

Here is what I have done so far:

public double average(int[] data) { int sum = 0;while(int i=0; i < data.length; i++) sum = sum + data[i]; double average = sum / data.length;; System.out.println("Average value of array element is " " + average);}

When compiling it I get an error message at the int i=0 part saying '.class expected'. Any help would be appreciated.

8

Best Answer


Using an enhanced for would be even nicer:

int sum = 0;for (int d : data) sum += d;

Another thing that will probably give you a big surprise is the wrong result that you will obtain from

double average = sum / data.length;

Reason: on the right-hand side you have integer division and Java will not automatically promote it to floating-point division. It will calculate the integer quotient of sum/data.length and only then promote that integer to a double. A solution would be

double average = 1.0d * sum / data.length;

This will force the dividend into a double, which will automatically propagate to the divisor.

The Java 8 streaming api offers an elegant alternative:

public static void main(String[] args) {double avg = Arrays.stream(new int[]{1,3,2,5,8}).average().getAsDouble();System.out.println("avg: " + avg);}
-while(int i=0; i < data.length; i++) +for(int i=0; i < data.length; i++) 

Try this way

public void average(int[] data) { int sum = 0;double average;for(int i=0; i < data.length; i++){sum = sum + data[i];}average = (double)sum/data.length;System.out.println("Average value of array element is " + average); }

if you need to return average value you need to use double key word Instead of the void key word and need to return value return average.

public double average(int[] data) { int sum = 0;double average;for(int i=0; i < data.length; i++){sum = sum + data[i];}average = (double)sum/data.length;return average; }

Best way to find the average of some numbers is trying Classes ......

public static void main(String[] args) {average(1,2,5,4);}public static void average(int...numbers){int total = 0;for(int x: numbers){total+=x;}System.out.println("Average is: "+(double)total/numbers.length);}
 double[] numArray = { 45.3, 67.5, -45.6, 20.34, 33.0, 45.6 };double sum = 0.0;for (double num: numArray) {sum += num;}double average = sum / numArray.length;System.out.format("The average is: %.2f", average);

Couple of problems:

The while should be a forYou are not returning a value but you have declared a return type of double

double average = sum / data.length;;

sum and data.length are both ints so the division will return an int - check your types

double semi-colon, probably won't break it, just looks odd.

If we want to add numbers of an Array and find the average of them follow this easy way! .....

public class Array {public static void main(String[] args) {int[]array = {1,3,5,7,9,6,3};int i=0;int sum=0;double average=0;for( i=0;i<array.length;i++){System.out.println(array[i]);sum=sum+array[i];}System.out.println("sum is:"+sum);System.out.println("average is: "+(double)sum/vargu.length);}}