如何跟踪用户输入特定输入的次数?
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
的一个很好的用途。现在你只存储输入 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);
}
然后在你想打印的时候调用printGradeSumMap()
我的程序应该要求用户输入一些成绩。输入完成后,程序要显示哪个年级被输入了多少次(或者说每个年级输入了多少次)。
例如,如果用户输入了两次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
的一个很好的用途。现在你只存储输入 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);
}
然后在你想打印的时候调用printGradeSumMap()