如何跟踪用户输入特定输入的次数?

时间:2015-01-07 16:41:47

标签: java arrays loops for-loop java.util.scanner

我的程序应该要求用户输入一些成绩。输入完成后,程序必须显示输入的等级数(或者换句话说,输入每个等级的次数)。

例如,如果用户两次进入3级,那么menas总共2名学生已经达到3级。如果F级被输入3次,则表示3名学生获得了失败的F级,依此类推。 ......

最终输出应该如下所示:

    Example output: 
grade F= 3 students
grade 3= 2 studnets
and so on....
...........................
...........................

现在我的问题是跟踪每个年级并打印出来告诉他们每个年级的入学次数(也就是指每个特定年级有多少学生)。我无法想出解决它的想法。

我的代码:

    package studentgrade;

import java.util.*;

public class StudentGrade {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("How many total grade you want to enter (Depending on the total number of students)? ");
        int totalStudents = input.nextInt();
        String grade[] = new String[totalStudents];

        //asking user to enter grade
        for (int i = 0; i < totalStudents; i++) {
            System.out.println("Enter grade " + (i + 1) + ": ");
            System.out.println("Choose only between grade 3 and F:\n");

            grade[i] = input.next();
            if (grade[i] == "3") {//3 defines the only passing grade
                //Store that into a variable
            } else if (grade[i].equalsIgnoreCase("F")) {//F defines the failing grade

                //Store that into a variable
            }//else{
            //System.out.println("Invalid input. Try again");
            //}
        }
        //Now print out which grade was entered how many times
    }
}

3 个答案:

答案 0 :(得分:0)

在顶部定义一个类似于每个等级的变量并将它们设置为0,然后,每次在&#34; if&#34;声明,将一个添加到相应的变量。 可变++

最后,使用

  System.out.println("Grade 3: " + variable3);
    System.out.println("Grade F: " + variableF);

另外,使用.equals方法比较if语句中的两个字符串

答案 1 :(得分:0)

如果您不需要这种介绍值,只需创建一个所需大小为n的数组(不要确切地知道从3到F的含义)。

int[] grade = new int[n];

如果您可以直接输入数字的所有输入:

grade[input.next()] ++;

然后,由于所有输入都不是int,您可以使用开关

来解决它
switch(input.next()) {
     case "3":
          grade[0] ++;
     case "2":
          grade[1] ++;
     ....
     case "F":
          grade[n-1] ++;

 }

答案 2 :(得分:0)

这对Map很有用。现在你只存储输入3F,但是如果你想让这个程序适应更多等级,那么它就会完美地扩展,这是一个干净利落的解决方案。

// the map to store how many times a grade was entered
private static final Map<String, Integer> gradeSumMap = new HashMap<String, Integer>();

public static void addToGradeSum(String key, int num) {
    if(gradeSumMap.get(key) == null) {
        gradeSumMap.put(key, num);
    } else {
        gradeSumMap.put(key, gradeSumMap.get(key) + num);
    }
}

public static void printGradeSumMap() {
    for(String key : gradeSumMap.keySet()) {
        System.out.println("grade " + key + " = " + gradeSumMap.get(key));
    }
}

// this needs to also be .equals or .equalsIgnoreCase
if (grade[i].equals("3")) {
    addToGradeSum(grade[i], 1);
} else if (grade[i].equalsIgnoreCase("F")) {
    addToGradeSum(grade[i], 1);
}

然后只要在打印时调用printGradeSumMap()