0

So I have an ArrayList of marks from 0% to 100% inputted by the user and I need to count the amount of Level R, Level 1, Level 2, Level 3, Level 4.

For example: [30, 45, 60, 65, 72, 78, 85, 87, 95]

Number at level R (mark < 50): 2

Number at level 1 (mark >= 50 && mark < 60): 0

Number at level 2 (mark >= 60 && mark < 70): 2

Number at level 3 (mark >= 70 && mark < 80): 2

Number at level 4 (mark >= 80): 3

I am not sure how to count a specific range in an ArrayList. Beginner programmer...

Thanks!

4 Answers4

0

Here is a basic implementation.

int[] dataSet = {30, 45, 60, 65, 72, 78, 85, 87, 95};
int levelR = 0, levelOne = 0, levelTwo = 0, levelThree = 0, levelFour = 0;

for(int mark : dataSet) {
    if(mark >= 80)
        levelFour++;
    else if(mark >= 70 && mark < 80)
        levelThree++;
    else if(mark >= 60 && mark < 70)
        levelTwo++;
    else if(mark >= 50)
        levelOne++;
    else
        levelR++;

}
System.out.println(levelR + ":" + levelOne + ":" + levelTwo + ":" + levelThree + ":" + levelFour);
Hayden
  • 407
  • 1
  • 6
  • 15
0

Use simple switch statement. Try this,

public static void main(String[] args) {
    int arr[] = {30, 45, 60, 65, 72, 78, 85, 87, 95};
    int res[] = new int[5];

    for (int num : arr) {
        int division = num / 10;
        switch (division) {
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
                res[0]++;
                break;
            case 5:
            case 6:
            case 7:
                res[division - 4]++;
                break;
            case 8:
            case 9:
                res[4]++;
                break;
        }
    }
    for (int i = 0; i < res.length; i++) {
        if (i == 0) {
            System.out.println("Number at level R : " + res[0]);
        } else {
            System.out.println("Number at level " + i + " : " + res[i]);
        }
    }
}
Masudul
  • 21,823
  • 5
  • 43
  • 58
0
public static void main( String[] args ) {

    Integer[] marks = new Integer[] { 30, 45, 60, 65, 72, 78, 85, 87, 95 };
    Map<Integer[], Integer> levelNumberMap = new HashMap<Integer[], Integer>();
    levelNumberMap.put( new Integer[] { 50, 60 }, 0 );
    levelNumberMap.put( new Integer[] { 60, 70 }, 0 );
    levelNumberMap.put( new Integer[] { 70, 80 }, 0 );
    levelNumberMap.put( new Integer[] { 80 }, 0 );

    for( Integer[] level : levelNumberMap.keySet() ) {
        int count = 0;
        if( level.length == 2 ) {
            int lower = level[0];
            int upper = level[1];

            for( int mark : marks ) {
                if( mark >= lower && mark < upper ) {
                    count++;
                }
            }
        } else if( level.length == 1 ) {
            int lower = level[0];
            for( int mark : marks ) {
                if( mark >= lower ) {
                    count++;
                }
            }
        }
        levelNumberMap.put( level, count );
    }

    // sample print out
    for( Integer[] level : levelNumberMap.keySet() ) {
        System.out.println( "Level " + Arrays.asList( level ) + " number: "
                + levelNumberMap.get( level ) );
    }
}

You can always put in more limits into the levelNumberMap and not worry about changing the logic. An improvement Though i have used an integer array as the key to the map, you could create a custom class, and be sure to implement equals and hashcode methods.

ivanorone
  • 450
  • 4
  • 17
0

Use Guava Range and Collections2.filter. Like this:

final List<Integer> list = Lists.newArrayList(30, 45, 60, 65, 72, 78, 85, 87, 95);

System.out.println("Level R: " + Collections2.filter(list, Range.closed(1, 50)).size() + " Level 1: "
            + Collections2.filter(list, Range.closedOpen(50, 60)).size() + " Level 2: "
            + Collections2.filter(list, Range.closedOpen(60, 70)).size() + " Level 3: "
            + Collections2.filter(list, Range.closedOpen(70, 80)).size() + " Level 4: "
            + Collections2.filter(list, Range.greaterThan(79)).size());
rohitku1
  • 1
  • 2