Java 在地图中查找关键点

Java 在地图中查找关键点,java,loops,for-loop,do-while,Java,Loops,For Loop,Do While,我正试图打印出在我的程序中测验分数最低的学生的名字 不幸的是,我没有找到一种使用getKey()方法识别学生姓名的方法。我面临的问题在声明中: else if (choice == 4) 任何帮助都将不胜感激 public class StudentQuizGrades { /** * @param args the command line arguments */ public static void main(String[] args) { Map<String,

我正试图打印出在我的程序中测验分数最低的学生的名字

不幸的是,我没有找到一种使用getKey()方法识别学生姓名的方法。我面临的问题在声明中:

else if (choice == 4)
任何帮助都将不胜感激

public class StudentQuizGrades {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    Map<String, Student> map = new HashMap<>();

    addStudent(map);

}

private static void addStudent(Map<String, Student> map) {
    Scanner userInput = new Scanner(System.in);
    Set<String> keySet = map.keySet();
    boolean finish = false;
    int studentID = 0;

    do {
        System.out.println("Please choose an option: ");
        System.out.println("Add student and quizzes - 1, Get all quiz scores - 2, Get highest quiz score- 3, ");
        System.out.println("Get lowest quiz score - 4, Get class average - 5, Quit - 6");
        int choice = userInput.nextInt();

        if (choice == 1) {
            System.out.println("How many students would you like to add?");
            int numberOfStudents = userInput.nextInt();
            for (int counter = 0; counter < numberOfStudents; counter++) {

                System.out.println("ENTER NAME");
                Scanner addName = new Scanner(System.in);
                String name = (addName.nextLine());

                System.out.println("Enter First Quiz Score");
                Scanner addQuiz1 = new Scanner(System.in);
                int quiz1 = (addQuiz1.nextInt());

                System.out.println("Enter Second Quiz Score");
                Scanner addQuiz2 = new Scanner(System.in);
                int quiz2 = (addQuiz2.nextInt());

                System.out.println("Enter Third Quiz Score");
                Scanner addQuiz3 = new Scanner(System.in);
                int quiz3 = (addQuiz3.nextInt());
                Student student = new Student(name, quiz1, quiz2, quiz3);
                map.put(student.getKey(), student);

            }

        } else if (choice == 2) {

            for (String currentKey : keySet) {
                Student student = map.get(currentKey);
                System.out.println(currentKey);
                System.out.println(Arrays.toString(student.getQuizGrades()));

            }

        } else if (choice == 3) {

            int max = 0;
            for (String currentKey : keySet) {
                Student student = map.get(currentKey);
                int[] scores = student.getQuizGrades();
                for (int counter = 1; counter < scores.length; counter++) {
                    if (scores[counter] > max) {
                        max = scores[counter];
                    }
                }
            }
            System.out.println("The highest quiz score was " + max);


        } else if (choice == 4) {

            int min = 0;

            for (String currentKey : keySet) {
                Student student = map.get(currentKey);

                int[] scores = student.getQuizGrades();
                int index = 0;
                min = scores[0];

                for (int counter = 1; counter < scores.length; counter++) {
                    if (scores[counter] < min) {
                        min = scores[counter];
                        index = counter;


                    }


                } 
                studentID = index;
            } 


            System.out.println("The lowest quiz score was " + min );

        } else if (choice == 5) {

            int[] allGrades;
            int sum = 0;
            int counter2 = 0;
            for (String currentKey : keySet) {
                Student student = map.get(currentKey);
                int[] scores = student.getQuizGrades();
                for (int counter = 0; counter < scores.length; counter++) {
                    int j = scores[counter];
                    sum = sum + j;
                    counter2++;
                }

            }
            int average = sum / counter2;
            System.out.println("The class average is: " + average);

        } else if (choice == 6) {
            finish = true;
            break;
        }

    } while (finish == false);
}
 }


public class Student {
private String key;
private int grade1;
private int grade2;
private int grade3;

    public Student(String key, int grade1, int grade2, int grade3){
        this.key = key;
        this.grade1 = grade1;
        this.grade2 = grade2;
        this.grade3 = grade3;
    }

    public String getKey(){
        return key;
    }

    public int[] getQuizGrades(){
       int [] anArray = {grade1, grade2, grade3};
       return anArray;
    }

    public int getAverageScore(){
        int average = (grade1 + grade2 + grade3)/3;
        return average;
    }
}
public class StudentQuizGrades{
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args){
Map Map=newhashmap();
addStudent(地图);
}
私有静态void addStudent(地图){
扫描仪用户输入=新扫描仪(System.in);
Set keySet=map.keySet();
布尔完成=假;
int studentID=0;
做{
System.out.println(“请选择一个选项:”);
println(“添加学生和测验-1,获得所有测验分数-2,获得最高测验分数-3,”);
println(“获得最低测验分数-4,获得班级平均分数-5,退出-6”);
int choice=userInput.nextInt();
如果(选项==1){
System.out.println(“您希望添加多少学生?”);
int numberOfStudents=userInput.nextInt();
for(int counter=0;counter最大值){
最大值=分数[计数器];
}
}
}
System.out.println(“最高测验分数为”+max);
}else if(选项==4){
int min=0;
用于(字符串currentKey:keySet){
学生=map.get(currentKey);
int[]分数=student.getQuizGrades();
int指数=0;
最小值=分数[0];
对于(int counter=1;counter
您可以使用
字符串类型
来存储最小值的名称。也许你的代码还存在其他小缺陷

备选方案如下:

else if (choice == 4) {
        Set<String> keySet = map.keySet(); //you should get keySet at here rather as your code for it maybe out date after 1 adding 
        int min = Integer.MAX_VALUE;// 
        String minName = null;///used to store the name of lowest
        for (String currentKey : keySet) {
            Student student = map.get(currentKey);
            int[] scores = student.getQuizGrades();

            for (int counter = 0; counter < scores.length; counter++) {//begin with 0 not 1 as your code
                if (scores[counter] < min) {
                    minName = currentKey;//store name
                    min = scores[counter];
                }
            } 
        } 
        System.out.println("The lowest quiz score was " + min + "his/her name is" + minName);
    }
else if(选项==4){
Set keySet=map.keySet();//您应该在此处获取keySet,因为您的代码在添加1之后可能过期
int min=整数。最大值;//
String minName=null;///用于存储最小值的名称
用于(字符串currentKey:keySet){
学生=map.get(currentKey);
int[]分数=student.getQuizGrades();
对于(int counter=0;counter
您可以使用
字符串类型
来存储最小值的名称。也许你的代码还存在其他小缺陷

备选方案如下:

else if (choice == 4) {
        Set<String> keySet = map.keySet(); //you should get keySet at here rather as your code for it maybe out date after 1 adding 
        int min = Integer.MAX_VALUE;// 
        String minName = null;///used to store the name of lowest
        for (String currentKey : keySet) {
            Student student = map.get(currentKey);
            int[] scores = student.getQuizGrades();

            for (int counter = 0; counter < scores.length; counter++) {//begin with 0 not 1 as your code
                if (scores[counter] < min) {
                    minName = currentKey;//store name
                    min = scores[counter];
                }
            } 
        } 
        System.out.println("The lowest quiz score was " + min + "his/her name is" + minName);
    }
else if(选项==4){
Set keySet=map.keySet();//您应该获得密钥