user3670236
user3670236

Reputation: 133

Average of an array showing 1

I have a program where the user inputs marks into the array and then gets the average value

This is using Jcreator

My problem is that when I ask for the average on my program,it says that the average is 1

This is my code :

//averageEnglish
public void averageEnglish() 
{

  System.out.println("The Average Mark Of English Is");
  int averageEnglish = english.length / 10;
  System.out.println("-----------");
  System.out.println(averageEnglish);
  System.out.println("-----------");

}//End of averageEnglish

English is an int array

int[] english = new int [10];

averageEnglish is a variable

int averageEnglish;

Upvotes: 1

Views: 101

Answers (6)

tmarwen
tmarwen

Reputation: 16394

You anticipated the size of the array and assumed it is always 10 which is the first mistake, then you did your division based on the number of array elements not their sum:

int[] english = new int[10];
/* Now we assume you did some stuff here to fill the array. */

//averageEnglish
public void averageEnglish() 
{

  System.out.println("The Average Mark Of English Is");

  int noOfElements = english.length; // The divisor

  int sum = 0; // The dividend

  for (int i = 0; i < noOfElements; i++) 
  {
    sum += english[i];
  }

  // Here is your Average (Should be of type double since there will be floating points)
  double averageEnglish = sum / noOfElements;

  System.out.println("-----------");
  System.out.println(averageEnglish);
  System.out.println("-----------");

}//End of averageEnglish

Upvotes: 0

Nidhin
Nidhin

Reputation: 1838

The value of english.lenght is always 10. As in this example:

int[] english = new int [10];

It doesn't matter what data the english array holds, its lenght is always 10. In order to do the proper calculation use the data, not the lenght of the array.

Upvotes: -1

padawan
padawan

Reputation: 1315

If you want user to fill the array, you need to use Scanner object.

    Scanner scanner = new Scanner(System.in);
    System.out.println("Enter the number of grades: ");
    int n = scanner.nextInt();
    double[] english = new double[n];

    for(int i=0; i<n; i++)
    {
        System.out.println("Please enter  the grade for grade " + (i+1) + ":");
        english[i] = scanner.nextDouble();
    }
    scanner.close();

Than you may use Markus Johnsson's code to proceed.

Upvotes: 0

Mureinik
Mureinik

Reputation: 312404

You are dividing the array's length by the constant 10 (which just happens to be the length), so naturally you'd get 1. You should sum all values of the array and only then divide them by its length:

double englighSum = 0;
for (int i = 0; i < english.length; ++i)
    englishSum += english[i];
}
double englishAverage = englishSum / english.length;

Upvotes: 1

Markus Johnsson
Markus Johnsson

Reputation: 4019

english.length/10 is not the average value of the array, its simply the length (10) of the array divided by 10, which is 1. You need to sum up all values of the array and divide the sum by the length of the array.

Often you want to present the result not only as an integer but with a few decimals, store the sum and average result in a double.

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

Upvotes: 3

Stultuske
Stultuske

Reputation: 9437

10/10 equals 1. pretty normal. what you need to do is get the sum of all elements, and divide them by the length of the array. also: the IDE you use is not really relevant

Upvotes: 3

Related Questions