2016-12-19 7 views
-2

ハッシュマップ内の生徒を削除する方法を探しています。私の試行は(選択= 8)です。残念ながら、学生を削除しようとすると(クイズのスコアとともに)、その名前は引き続き表示されます。どんな助けでも大歓迎です。ハッシュマップ内のオブジェクトを削除する方法

package studentquizgrades; 

import java.util.Arrays; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.Scanner; 
import java.util.Set; 

public class StudentQuizGrades { 

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); 

    boolean finish = false; 


    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, View a list of all students - 6"); 
     System.out.println("Get a student's quiz scores - 7, Delete student- 8, Quit - 9"); 
     int choice = userInput.nextInt(); 

     if (choice == 1) { 
      Set<String> keySet = map.keySet(); 
      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) { 
      Set<String> keySet = map.keySet(); 
      for (String currentKey : keySet) { 
       Student student = map.get(currentKey); 
       System.out.println(); 
       System.out.println(currentKey); 
       System.out.println(Arrays.toString(student.getQuizGrades())); 
       System.out.println(); 

      } 

     } else if (choice == 3) { 
      Set<String> keySet = map.keySet(); 
      int max = 0; 
      String maxName = null; 

      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]; 
         maxName = currentKey; 
        } 
       } 
      } 
      System.out.println(); 
      System.out.println("The highest quiz score was " + max + "; his/her name is " + maxName); 
      System.out.println(); 

     } else if (choice == 4) { 
      Set<String> keySet = map.keySet(); 
      int min = Integer.MAX_VALUE; 
      String minName = null; 

      for (String currentKey : keySet) { 
       Student student = map.get(currentKey); 
       int index = 0; 
       int[] scores = student.getQuizGrades(); 

       for (int counter = 0; counter < scores.length; counter++) { 
        if (scores[counter] < min) { 
         minName = currentKey; 
         min = scores[counter]; 

        } 

       } 

      } 
      System.out.println(); 
      System.out.println("The lowest quiz score was " + min + "; his or her name is " + minName); 
      System.out.println(); 

     } else if (choice == 5) { 
      Set<String> keySet = map.keySet(); 
      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(""); 
      System.out.println("The class average is: " + average); 
      System.out.println(""); 
     } else if (choice == 6) { 
      Set<String> keySet = map.keySet(); 
      System.out.println(""); 
      System.out.println("List of students: "); 
      for (String currentKey : keySet) { 
       Student student = map.get(currentKey); 

       System.out.println(currentKey); 

      } 
     } 
     else if(choice == 7){ 


      Set<String> keySet = map.keySet(); 
      System.out.println(""); 
      System.out.println("Please enter a student's name: "); 
      String studentName = userInput.next(); 
      for (String currentKey : keySet) { 

       Student student = map.get(currentKey); 

       if(studentName.equals(currentKey)){ 

        System.out.println(currentKey + "'s quiz scores:"); 
        int [] quizArray = student.getQuizGrades(); 
        for(int counter1 = 0; counter1 < quizArray.length; counter1++){ 

         System.out.println(quizArray[counter1]); 

        } 
       } 

      } 
     } 


        else if(choice == 8){ 


      Set<String> keySet = map.keySet(); 
      System.out.println(""); 
      System.out.println("Please enter a student's name: "); 
      String studentName = userInput.next(); 
      for (String currentKey : keySet) { 

       Student student = map.get(currentKey); 

       if(studentName.equals(currentKey)){ 

        student = null; 
       } 

      } 
     } 


     else if (choice == 9) { 
      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; 
    } 
} 
+4

'Map'がどのように動作するか誤解していると思います。 'Map#get()'メソッドが目的のエントリを直接返すときに、一致するエントリを見つけるためにキーセットを繰り返します。また、 'Map#remove()' ...コレクションクラスのチュートリアルに戻ってレビューをする時が来たと思います。あなたのコードは、必要以上に複雑で非効率的です。 –

+0

'map.remove(studentName);を使用してください – 4castle

+0

なぜあなたは地図を使用していますか?セットはもっと良いかもしれない –

答えて

1
Student student = map.get(currentKey); 

if(studentName.equals(currentKey)){ 

    student = null; 
} 

nullにstudentを置くことmap内のオブジェクトが削除または削除されたことを意味するものではありません。 これは単にstudentという名前のリファレンスがオブジェクトを指していないことを意味します。

Java APIを参照してください。 https://docs.oracle.com/javase/7/docs/api/

https://docs.oracle.com/javase/7/docs/api/java/util/Map.html#remove(java.lang.Object)

1

学生学生= map.get(currentKey); //割り当てマップ値(スチューデント)ローカル学生に可変 (studentName.equals(currentKey))なら、{ 学生= NULL; //それは、既存のマップ に更新されないように}、その地域の学生変数にnullを代入

プットmap.put(currentKey、NULL)// (OR) map.remove(currentKeyをマッピングする場合はnull更新)//マップからエントリを削除する

関連する問題