Autosuggestion Autosuggestion - 1 year ago 73
Java Question

Calculating average without highest and lowest values in an array

So I am trying to calculate the average and sum of an array, however I have to remove the highest and lowest values before I can calculate the avg/sum.

I have code to fill the array with random doubles, and then find the highest and lowest value.

What I am unsure about is if there is a way to subtract the highest and lowest values or if I have to copy the data from the array into a new one minus the highest and lowest values and then calc the avg/sum.

This is what I have so far. Forgive me if this is somewhat obvious but I am stumped, and still in an intro to java course.

Here is my code so far.

double [] contestantOne = new double[8];

for (int index=0; index < contestantOne.length; index++) {
contestantOne [index] = (double) (Math.random()*9) + 1;

for (int index=0; index < contestantOne.length; index++) {
System.out.println( contestantOne [index] + "\n");

double contestantOneHigh; contestantOneHigh = contestantOne[0];

for (int index=1; index <contestantOne.length; index++) {
if (contestantOne[index] > contestantOneHigh)
contestantOneHigh = contestantOne[index];

System.out.print("The highest value in your array is"
+ " " + contestantOneHigh);

double contestantOneLow; contestantOneLow = contestantOne[0];
for (int index=1; index<contestantOne.length; index++) {

if (contestantOne [index] < contestantOneLow)
contestantOneLow = contestantOne[index];

System.out.print("The lowest value in your array is"
+ " " + contestantOneLow);

Answer Source

I don't understand why you need to remove the high and low value from the array to get the average? The average should be the sum of all values divided by the total number of values:

double sum = 0;
for (int index=0; index < contestantOne.length; index++)
    //If you really need to remove highest and lowest value
    if (contestantOne[index] != contestantOneLow && contestantOne[index] != contestantOneHigh)
        sum += contestantOne[i];
double avg = sum / (double)(contestantOne.length - 2);

The problem with removing the values as done above, is if your array highs and lows aren't unique (array[10, 13, 15, 3, 15, 3, 6] 15 = High, 3 = Low) then your average will be incorrect when you calculate it because it will ignore both 15s and 3s.

I would suggest storing the index of high and index of low and using that instead.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download