-1

With the help of How to find biggest variable using while loop? I manage to find what's the highest value from an array but then i don't know of which area the result belongs to...

    String area1[] = new String[2];
    String area2[] = new String[2];
    String area3[] = new String[2];
    String area4[] = new String[2];
    String area5[] = new String[2];

    area1[0] = "15";
    area1[1] = "Area 1";
    area2[0] = "7";
    area2[1] = "Area 2";
    area3[0] = "11";
    area3[1] = "Area 3";
    area4[0] = "9";
    area4[1] = "Area 4";
    area5[0] = "7";
    area5[1] = "Area 5";

    int max = Math.max(Integer.valueOf(area1[0]), Math.max(Integer.valueOf(area2[0]), Math.max(Integer.valueOf(area3[0]), Math.max(Integer.valueOf(area4[0]), Integer.valueOf(area5[0])))));

So, until now I know the highest value of the array (max) but i don't know which area belongs...

I hope you can help me how to solve this. Thanks!

Community
  • 1
  • 1
xzrudy
  • 93
  • 1
  • 8
  • 3
    Use a loop, like in http://stackoverflow.com/a/16599444/14955 – Thilo Jun 05 '14 at 12:46
  • 1
    Why do you have five calls to `Integer.valueOf()` that have no apparent purpose? – Duncan Jones Jun 05 '14 at 12:52
  • 1
    If you find yourself doing strange stuff with arrays like this, then typically you've reached a situation where you should be defining your own class. You probably need an `Area` class, containing a name (e.g. `"Area 1"`) and another integer field. – Duncan Jones Jun 05 '14 at 12:54
  • Also note that you can create arrays like this: `String[] area1 = new String[] {"15", "Area 1"}`; – Duncan Jones Jun 05 '14 at 13:07

5 Answers5

1

An object oriented approach would be much better. Create an Area class:

public class Area {    
    private final int areaNumber;
    private final int someOtherValue;

    public Area(int areaNumber, int someOtherValue) {
        this.areaNumber = areaNumber;
        this.someOtherValue = someOtherValue;
    }

    @Override
    public String toString() {
        return String.format("Area: %d (%d)", areaNumber, someOtherValue);
    }
}

Then use it like this:

List<Area> areas = Arrays.asList(
        new Area(1, 15), 
        new Area(2, 7),
        new Area(3, 11)); // etc

Area maxArea = Collections.max(areas, new Comparator<Area>() {
    @Override
    public int compare(Area o1, Area o2) {
        return Integer.compare(o1.someOtherValue, o2.someOtherValue);
    }
});

System.out.println(maxArea);

This would print: Area: 1 (15)

Depending upon your exact use case, you may wish to have your Area class implement Comparable<Area> if you always plan to order the instances in the same way.

Duncan Jones
  • 67,400
  • 29
  • 193
  • 254
0

Put all the areas in an array, iterate through finding the max value, then saving that value and the name of the area. I have the code returning a string with both pieces of info, but if you only need to know the max area, you can return just the name.

String[][] areas {area1,area2,area3,area4,area5};
int maxValue=-MAX_INTEGTER;
String maxArea = "";
for(int i=0; i<areas.size; i++){
    if(Integer.parseInt(areas[i][0]) >= maxValue){
        maxValue = Integer.parseInt(areas[i][0]);
        maxArea = areas[i][1];
    }
 }
 return maxArea +" : " maxValue;

This will return a string like: "Area 3: 11"

Adam Yost
  • 3,616
  • 23
  • 36
0

If you want to use 5 Arrays you have to do something like this:

int max = Math.max(Integer.valueOf(area1[0]);
String area = "area1";
int tmp = Math.max(Integer.valueOf(area2[0]);
if(max < tmp) {
  max = tmp;
  area = "area2";
}
tmp = Math.max(Integer.valueOf(area3[0]);
if(max < tmp) {
  max = tmp;
  area = "area3";
}
tmp = Math.max(Integer.valueOf(area4[0]);
if(max < tmp) {
  max = tmp;
  area = "area4";
}
tmp = Math.max(Integer.valueOf(area5[0]);
if(max < tmp) {
  max = tmp;
  area = "area5";
}
Baalthasarr
  • 377
  • 1
  • 13
0

You can use this function:

public static String[] max(String[]... input) {
    String[] max = null;
    int maxVal = -1;

    for (String[] strings : input) {
        int value = Integer.valueOf(strings[0]);
        if(value > maxVal) {
            maxVal = value;
            max = strings;
        }
    }

    return max;
}

This will take all your arrays as input and will return the Array that has the max value.

Usage:

    String area1[] = new String[2];
    String area2[] = new String[2];
    String area3[] = new String[2];
    String area4[] = new String[2];
    String area5[] = new String[2];

    area1[0] = "15";
    area1[1] = "Area 1";
    area2[0] = "7";
    area2[1] = "Area 2";
    area3[0] = "11";
    area3[1] = "Area 3";
    area4[0] = "9";
    area4[1] = "Area 4";
    area5[0] = "7";
    area5[1] = "Area 5";

    System.out.println(Arrays.toString(max(area1,area2,area3,area4,area5)));

Output:

[15, Area 1]
Sanjeev
  • 9,876
  • 2
  • 22
  • 33
0

Well, since you are using Java, i reccomend usage of Java's fine mechanisms such as classes, collections and custom comparators:

class Area {

    public int number;
    public String name;

    public Area(int number, String name) {
        this.number = number;
        this.name = name;
    }

    @Override
    public String toString() {
        return "Area{" + "number=" + number + ", name=" + name + '}';
    }

}

...

ArrayList<Area> areas = new ArrayList<>();
areas.add(new Area(15, "Area 1"));
areas.add(new Area(7, "Area 2"));
areas.add(new Area(11, "Area 3"));
areas.add(new Area(9, "Area 4"));
areas.add(new Area(7, "Area 5"));

Area max = Collections.max(areas, new Comparator<Area>() {
    @Override
    public int compare(Area o1, Area o2) {
        return o1.number - o2.number;
    }
});

System.out.println(max);
kajacx
  • 12,361
  • 5
  • 43
  • 70