Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何跟踪用户输入特定输入的次数?_Java_Arrays_Loops_For Loop_Java.util.scanner - Fatal编程技术网

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

Java 如何跟踪用户输入特定输入的次数?,java,arrays,loops,for-loop,java.util.scanner,Java,Arrays,Loops,For Loop,Java.util.scanner,我的程序应该要求用户输入一些等级。输入完成后,程序必须显示哪个年级输入了多少次(或者换句话说,每个年级输入了多少次) 例如,如果用户两次进入3年级,那么总共有2名学生获得了3年级。如果F级输入3次,则表示有3名学生的F级不及格,以此类推 最终输出应如下所示: Example output: grade F= 3 students grade 3= 2 studnets and so on.... ........................... .................

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

例如,如果用户两次进入3年级,那么总共有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
    }
}
package-studentgrade;
导入java.util.*;
公营班级学生年级{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
System.out.println(“你想输入多少总成绩(取决于学生总数)”;
int totalStudents=input.nextInt();
字符串等级[]=新字符串[totalStudents];
//要求用户输入成绩
对于(int i=0;i
在顶部定义一个类似于每个等级的变量,并将其设置为0,然后每次在“if”语句中,将一个变量添加到相应的变量中。变量++

最后,使用

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

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

如果不需要引入值的排序,只需创建一个具有所需大小的数组
n
(不清楚从3到F的确切含义)

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

grade[input.next()] ++;
然后,由于并非所有输入都是
int
,您可以使用开关来解决它

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

 }

这是
地图
的一个很好的用途。现在,您只需存储输入
3
F
,但如果您想调整此程序以获得更多分数,这将非常适合扩展,并且是一个干净整洁的解决方案

// 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);
}
//用于存储分数输入次数的映射
私有静态最终映射gradeSumMap=newhashmap();
公共静态void addToGradeSum(字符串键,int num){
if(gradeSumMap.get(key)==null){
gradeSumMap.put(键,num);
}否则{
gradeSumMap.put(键,gradeSumMap.get(键)+num);
}
}
公共静态无效printGradeSumMap(){
for(字符串键:gradeSumMap.keySet()){
System.out.println(“grade”+key+“=”+gradeSumMap.get(key));
}
}
//这也需要是.equals或.equalsIgnoreCase
如果(等级[i]。等于(“3”)){
addToGradeSum(等级[i],1);
}否则,如果(等级[i]。等信号情况(“F”)){
addToGradeSum(等级[i],1);
}

然后只要调用
printGradeSumMap()
当你想要打印它时

你需要使用额外的数组来存储有多少学生得到了一个特定的分数。你可以使用一个整数数组,每个索引代表一个分数。当用户输入一个新的等级时,将该等级索引中元素的值增加1。或者,您可以将所有等级转储到一个数组或
ArrayList
,然后在需要时只计算每种类型的数量。使用键为等级的HashMap。此外,您不能将两个字符串与
=
进行比较。使用
.equals()
Input.next()返回一个字符串,因此案例3:必须是案例“3”:
// 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);
}