Java 如何跟踪用户输入特定输入的次数?
我的程序应该要求用户输入一些等级。输入完成后,程序必须显示哪个年级输入了多少次(或者换句话说,每个年级输入了多少次) 例如,如果用户两次进入3年级,那么总共有2名学生获得了3年级。如果F级输入3次,则表示有3名学生的F级不及格,以此类推 最终输出应如下所示: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.... ........................... .................
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);
}