简体   繁体   中英

How do you find a maximum or minimum double from a set?

In a basic java program, I've defined two methods of a class that are supposed to return the maximum and minimum numbers from a set of four doubles. The value parameter is taken in from a for loop, and then compared to the standing min or max parameter. However, the outputs are not correct and I cannot seem to find out why; I know I have made a logic error somewhere.

The two methods-

//calculate the minimum 
public double calcMin(double value, double min)
{
    if (min < value)
   {
       min = value;
   }
   return value;
}

//calculate the maximum
public double calcMax(double value, double max)
{
    if (max < value)
    {
        max = value;
    }
    return max;
}

The for loop-

    for (int i = 0; i < fillups.length; i ++)
    {
        distance[i] = fillups[i].calcDistance();
        milesPerGallon[i] = fillups[i].calcMPG(distance[i]);
        cost[i] = fillups[i].calcTotalCost();
        minimum = fillups[i].calcMin(distance[i], minimum);
        maximum = fillups[i].calcMax(distance[i], maximum);
        minMPG = fillups[i].calcMin(milesPerGallon[i], minMPG);
        maxMPG = fillups[i].calcMax(milesPerGallon[i], maxMPG);
        minPrice = fillups[i].calcMin(price[i], minPrice);
        maxPrice = fillups[i].calcMax(price[i], maxPrice);
        fillups[i].printResults(i, day[i], distance[i], cost[i], milesPerGallon[i]);  
    } 

The calcMax method seems to work, but the calcMin does not. Perhaps there is a way to make them work using the Double.MAX_VALUE and Double.MIN_VALUE constants.

First, I'll repeat your two methods:

//calculate the minimum 
public double calcMin(double value, double min)
{
    if (min < value)
   {
       min = value;
   }
   return value;
}

//calculate the maximum
public double calcMax(double value, double max)
{
    if (max < value)
    {
        max = value;
    }
   return max;
}

Do you see that you use the same logic for calcMin as you do for calcMax ? Replace the < in calcMin by > and it should work.

You are searching for the smaller value thus, if the given value is smaller than the current known minimum, then you replace it. You may start with Double.MAX_VALUE for the best known minimum at the beginning (and then you make it better every round). Analogously you may use Double.MIN_VALUE in the first round as best known maximum .

A smaller, much more compact way is to use Math.min(double, double) (and max ). Your methods themselves do some useless stuff, there is no need to assign min = value inside the method as min and value get deleted upon leaving the scope of this method. You could simply do this:

public double calcMin(double value, double min) {
    if (min < value) {
        return min;
    } else {
        return value;
    }
}

For finding the smallest value in a Set you may use Collections.min(Set) . But be aware that this method needs to search the whole set. It may be better using a good sorting algorithm first. Also note that a Set has no order per definition, a List is sort-able.

Well, I think you get the idea. Cheers.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM