计算ArrayList中特定范围内的范围

时间:2014-04-05 15:00:01

标签: java loops if-statement arraylist

所以我有一个由用户输入的0%到100%标记的ArrayList,我需要计算Level R,Level 1,Level 2,Level 3,Level 4的数量。

例如: [30,45,60,65,72,78,85,87,95]

R级的数字(标记<50):2

第1级的数字(标记&gt; = 50&amp;&amp; mark&lt; 60):0

第2级的数字(标记&gt; = 60&amp;&amp; mark&lt; 70):2

第3级的数字(标记&gt; = 70&amp;&amp; mark&lt; 80):2

第4级的数字(标记&gt; = 80):3

我不知道如何计算ArrayList中的特定范围。初学程序员......

谢谢!

4 个答案:

答案 0 :(得分:0)

这是一个基本的实现。

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);

答案 1 :(得分:0)

使用简单的switch语句。试试这个,

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]);
        }
    }
}

答案 2 :(得分: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 ) );
    }
}

您总是可以在levelNumberMap中加入更多限制,而不用担心更改逻辑。 改进 虽然我使用整数数组作为地图的关键,但您可以创建自定义类,并确保实现equals和hashcode方法。

答案 3 :(得分:0)

使用Guava Range和Collections2.filter。像这样:

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());