2015-09-27 23 views
0
import java.util.HashMap; 

public class StudentDatabase { 
private HashMap<String, int[]> quizmarks; 

public static final int NUM_QUIZZES = 10; 
public static final int MIN_GRADE = 0; 
public static final int MAX_GRADE = 100; 



public StudentDatabase(){ 
    quizmarks = new HashMap<String, int[]>(); 
} 

public String formatName(String name){ 
    String caps = ""; 
    String lowercase = ""; 
    if(name != null && name.length() > 0){ 
     caps = name.substring(0,1).toUpperCase(); 
    } 
    if(name.length() > 1){ 
     lowercase = name.substring(1).toLowerCase(); 
    } 
    return caps + lowercase; 
} 


public void addStudent(String studentName){ 
    if(studentName != null){ 

     int[] marks = new int[NUM_QUIZZES]; 


     quizmarks.put(formatName(studentName), marks); 
    } 
} 

public int[] getQuizzes(String student){ 
    if(student != null){ 
     System.out.println(quizmarks.get(student)); 

    } 
    return null; 
} 

public void changeQuizMark 
     (String studentName, int whichQuiz, int newMark){ 

    if(studentName!= null){ 
     quizmarks.get(studentName); 
    } 
    if(whichQuiz <= NUM_QUIZZES){ 
     quizmarks.get(whichQuiz); 
    } 

    if(newMark > MIN_GRADE && newMark < MAX_GRADE){ 

    } 
    quizmarks.put(studentName, new int[]{newMark}); 
} 

}困難增加陣列,同時也是一個HashMap

出於某種原因,陣列的一部分,並沒有完全傳授給我們,我們一直在鼓勵網上去得到它,所以我試着幫助首先要弄清楚爲什麼它在addStudents方法中說「它不能將int轉換爲int []」,當我試圖指定「標記」時,我很確定雙方都是int []數組。

我也不確定,因爲我無法通過這個錯誤,我的changeQuiz和newMarks字段實際上是如何分配給數組的右邊部分的。每個學生基本上都應該有10個問答題。我瘋狂地卡住了。

我很抱歉,我試圖在格式上工作,但它只是我第二次在這裏,我完全忘記了如何格式化,它給我的主要問題,我試圖按照我的指示做最好的。

+0

如何重現你的錯誤?你有另一個錯誤,但我看不到你提到的那個 – ka4eli

+0

我知道我使用Eclipse不知道如果它的一個小故障或什麼,但在addStudents方法它說我想將int轉換爲int []在它說的行上: 「int [] marks = new int [NUM_QUIZZES]」 – vanhalendlrband

+0

int [] marks = new int [NUM_QUIZZES]' - 它是完全合法的語句 – ka4eli

回答

0

你的主要錯誤是在這裏:

quizmarks.put(studentName, new int[]{newMark})

你不增加新的標誌已經存在的標記陣列,但創建因此,只有新的標記刪除舊痕陣列的新數組。所有你需要的是獲得你需要的數組,並通過索引修改它的元素。也做了一些小改進:

import java.util.Arrays; 
import java.util.HashMap; 

public class StudentDatabase { 
    private HashMap<String, int[]> quizmarks; 

    public static final int NUM_QUIZZES = 10; 
    public static final int MIN_GRADE = 0; 
    public static final int MAX_GRADE = 100; 


    public StudentDatabase() { 
     quizmarks = new HashMap<>(); 
    } 

    private String formatName(String name) { 
     String caps = ""; 
     String lowercase = ""; 
     if (name != null && name.length() > 0) { 
      caps = name.substring(0, 1).toUpperCase(); 
     } 
     if (name.length() > 1) { 
      lowercase = name.substring(1).toLowerCase(); 
     } 
     return caps + lowercase; 
    } 


    public void addStudent(String studentName) { 
     if (studentName != null) { 
      int[] marks = new int[NUM_QUIZZES]; 
      quizmarks.put(formatName(studentName), marks); 
     } 
    } 

    public void showQuizzes(String student) { 
     System.out.println(Arrays.toString(quizmarks.get(student))); 
    } 

    public void changeQuizMark(String studentName, int whichQuiz, int newMark) { 
     if (whichQuiz < NUM_QUIZZES && newMark >= MIN_GRADE && newMark =< MAX_GRADE) { 
      quizmarks.get(studentName)[whichQuiz] = newMark; 
     } 
    } 

} 
+0

好吧,好吧,我要在這裏給這個鏡頭一點點,只需要讓我的兒子先睡我會做好準備。感謝您的幫助。我完成後會更新你。 – vanhalendlrband

+0

好吧,它看起來不錯,我有幾個關於它是如何工作的問題。 在changeQuizMark方法中。當你調用「[whichQuiz]」時,它會選擇數組,因爲它與quizmarks.get在同一行中被調用?然後newMark將該標記賦給數組的whichQuiz號碼? – vanhalendlrband

+0

@vanhalendlrband,正好 – ka4eli