如何显示每个级别(R, 1, 2, 3, 4)的学生人数?
该程序接受用户输入的数字:R为50及以下,级别1为40-60,级别2为60-70,级别3为70-80,级别4为80+
我正在使用一个数组:
ArrayList<Integer> strArray = new ArrayList<>();
显示一个人输入的信息。我只是遇到了一些麻烦。有人能帮帮我吗?我正在使用NetBeans。
示例输入:12、32、56、76、89、87、78
我想让它变成R:2, lv1:1, lv2:0, lv3:2, lv4:2
请尝试下面的代码,这将有助于您,
public void showResult()
{
int LevelR = 0, Level1 = 0, Level2 = 0, Level3 = 0, Level4 = 0;
ArrayList<Integer> strArray = new ArrayList<>();
strArray.add(12);
strArray.add(32);
strArray.add(56);
strArray.add(76);
strArray.add(89);
strArray.add(87);
strArray.add(78);
for(int i : strArray)
{
if(i < 50)
{
LevelR++;
}
else if(i >= 50 && i < 60)
{
Level1++;
}
else if(i >= 60 && i < 70)
{
Level2++;
}
else if(i >= 70 && i < 80)
{
Level3++;
}
else if(i >= 80)
{
Level4++;
}
}
System.out.println("R:" + LevelR + ", Lvl 1:" + Level1 + ", Lvl2:" + Level2 + " ,Lvl3:" + Level3 + ", Lvl 4:" + Level4);
}
我在函数内部静态地添加了值,您可以在函数中传递它并根据您的要求使用它
这里我使用了if语句并将结果保存在一个String中。然后将字符串存储到数组列表中:
ArrayList<Integer> strArray = new ArrayList<>();
int txtLevel =Integer.parseInt(userTxt.getText());
String result ="";
if(txtLevel >=40 && txtLevel <60){
result = "Level 1";
}
else if(txtLevel >=60 && txtLevel <70){
result = "Level 2";
}else if(txtLevel >=70 && txtLevel <=80){
result = "Level 3";
}else {
result = "Level 4";
}
strArray.add(result);
对于你的问题,我假设你是一个Java初学者,还在学习编程的基本概念。
您必须遵循以下步骤:
- 您可以预先定义范围。上面的解决方案也会起作用。否则你可以使用Java的
ValueRange
功能。 - 扫描输入字符串。您可以使用
Scanner
。 - 在扫描输入字符串后,必须通过去掉逗号来分隔数字。
- 您必须将输入数字映射到相应的范围,并在每个范围中获得输入值的数量。
- 现在你必须产生预期的输出
下面的解决方案使用Java8实现步骤(2-5)。学习这个实现对你也很有用。
public static void main(String[] args) {
//Define Range and their message in the output
Map<ValueRange, String> rangeToMessage = new LinkedHashMap<ValueRange, String>() {
{
put(ValueRange.of(0, 40), "R");
put(ValueRange.of(40, 60), "Lvl 1");
put(ValueRange.of(60, 70), "Lvl 2");
put(ValueRange.of(70, 80), "Lvl 3");
put(ValueRange.of(80, Integer.MAX_VALUE), "Lvl 4");
}
};
//Process Input String
String input = "12,32,56,76,89,87,78";
input.split(",");
List<String> strArray = Arrays.asList(input.split(","));
Function<Integer, Optional<ValueRange>> getRange = value -> rangeToMessage.keySet().stream()
.filter(t -> t.isValidIntValue(value)).findFirst();
//Map input numbers to their appropriate Range and get the number of input value in each Range
Map<ValueRange, Long> rangeNcount = strArray.stream().map(Integer::parseInt).map(getRange)
.filter(opt -> opt.isPresent()).map(opt -> opt.get())
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
//Produce expected output message
Function<ValueRange,Long> getCount = range-> (rangeNcount.get(range)==null)?Long.valueOf(0):rangeNcount.get(range);
String outputMessage = rangeToMessage.keySet().stream().map(range->rangeToMessage.get(range)+":"+getCount.apply(range)).collect(Collectors.joining(","));
System.out.println(outputMessage);
}
我是怎么解决的,但是它很乱
int size=strArray.size();
int sum=0;
int a=0;
int b=0;
int c=0;
int d=0;
int e=0;
int aver=sum/size;
for(int counter=0;counter<strArray.size();counter++){
sum+=strArray.get(counter);
if (strArray.get(counter)<50){
a++;
}
if (strArray.get(counter)<60 && strArray.get(counter)>=50 && strArray.get(counter)==50)
{
b++;
}if (strArray.get(counter)<70 && strArray.get(counter)>=60 && strArray.get(counter)==60){
c++;
}if (strArray.get(counter)<80 && strArray.get(counter)>=70 && strArray.get(counter)==70){
d++;
}if (strArray.get(counter)>=80 && strArray.get(counter)==80){
e++;
}
}
this.done.append("the average is: "+aver+
"Maximim value:"+Collections.max(strArray)+
"Minimum value"+Collections.min(strArray)+
"nNumber of level 4: " + e+"nNumber of level 3: "
+d+"nNumber of level 2: "+c+"nNumber of level 1: "+b
+"nNumber of level R: "+a);
我的数组int被称为str数组如果有人搞混了。
如果我在这个网站上,任何人在这个任务上需要帮助就问我,我感到你的痛苦,我不得不从谷歌和youtube上学习一切