所以我有一个由用户输入的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中的特定范围。初学程序员......
谢谢!
答案 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());