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

How do I keep track the number of times a specific input was entered by the user?

我的程序应该要求用户输入一些成绩。输入完成后,程序要显示哪个年级被输入了多少次(或者说每个年级输入了多少次)。

例如,如果用户输入了两次3级,那么总共有2名学生获得了3级。如果3次输入F级,则意味着有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
    }
}

在顶部定义一个类似于每个年级的变量并将它们设置为0,然后在"if"语句中每次将相应变量加一。 变量++

最后,使用

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

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

如果您不需要那种引入的值,只需创建一个具有所需大小的数组 n(看不出从 3 到 F 到底是什么意思)。

int[] grade = new int[n];

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

grade[input.next()] ++;

然后,由于所有的输入都不是int你可以用一个switch来解决

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

 }

这是 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()