如何在数组中显示2个数字之间的信息数量?

时间:2016-08-19 20:35:31

标签: java netbeans netbeans-8

如何显示每个级别(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,Lvl 1:1,Lvl2:0,Lvl3:2,Lvl 4:2

4 个答案:

答案 0 :(得分:1)

请尝试下面的代码,这将有助于您,

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

我在函数内部静态添加了值,您可以在函数中传递它,并根据您的要求使用它。

答案 1 :(得分:0)

这里我使用了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);

答案 2 :(得分:0)

关于你的问题,我假设你是Java的初学者,仍然在学习编程的基本概念。

您必须按照以下步骤操作:

  1. 您可以预先定义范围。上面的解决方案也可以。否则,您可以使用Java的ValueRange功能。
  2. 扫描输入字符串。您可以Scanner使用相同的内容。
  3. 扫描输入字符串后,您必须通过删除逗号来分隔数字。
  4. 您必须将输入数字映射到其相应的范围,并获取每个范围中的输入值数。
  5. 现在你必须产生预期的输出
  6. 下面的解决方案使用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);
    }
    

答案 3 :(得分:0)

我是如何解决它但却很混乱

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

如果有人感到困惑,我的Array int就叫做str数组。

如果我在这个网站上并且任何人都需要这个任务的帮助,请问我,我觉得我很痛苦,我必须学习谷歌和youtube的所有内容。