簡體   English   中英

如何從另一個類調用HashMap的方法?

[英]How to call the method of HashMap from another class?

在我的評估課中,我有一個名為addMark的方法,它將學生ID和標記都放入稱為標記的哈希圖中。 我正在嘗試使用學生類將studentid和mark放入哈希圖中,但它一直在給我錯誤。 我打錯了評估班嗎? 有人可以幫忙嗎?

學生班:

public class Student {
 public void createStudents() {
   Mark m1 = new Mark(30, "Bad");
   Assessment.addMark("11", m1);
}

標記等級:

public class Mark {

private int mark;
private String comment;

public Mark(int mark){

}

public Mark(int mark, String comment){

}

public void setMark(int mark) throws Exception {
    /*
     * Start Preconditions
     */
    // Precondition: firstArgumentNonNegative
    if (mark < 0){
        throw new Exception("Precondition violated:"
                + " firstArgumentNonNegative");
    }
    /*
     * End Preconditions
     */
    this.mark = mark;
}

public int getMark() {
    return this.mark;
}

public void setComment(String comment){
    this.comment = comment;
}

public String getComment(){
    return this.comment;
}
}

評估課:

import java.util.HashMap;
import java.util.Map;

public abstract class Assessment {
private Map<String, Mark> marks = new HashMap<String, Mark>();


public String getAllStudentMarks(){
    String outString = "Student ID:\tMark:\tComment:";
    for (Map.Entry<String, Mark> entry : marks.entrySet()){
        String studentId = entry.getKey();
        Mark mark = entry.getValue();
        int value = mark.getMark();
        String comment = mark.getComment();
        outString += String.format("\n%s\t%d\t%s", studentId, value, comment);
    }
    return outString;
}

public boolean hasCompleted(String studentId){
    return marks.containsKey(studentId);
}


public void addMark(String studentId, Mark mark) throws Exception{
    /*
     * Start Preconditions
     */
    // Precondition: markNotGreaterThanWeight
    if (mark.getMark() > this.weight){
        throw new Exception("Precondition violated: "
                + "markNotGreaterThanWeight");
    }
    /*
     * End Preconditions
     */
    marks.put(studentId, mark);
}

public int getMark(String studentId){
    return marks.get(studentId).getMark();
}

public String getComment(String studentId){
    return marks.get(studentId).getComment();
}   

public abstract String description();
}

Assessment是一個抽象類,因此如果要使用它,則需要對其進行擴展:

class MyAssessment extends Assessment {
    @Override
    public String description() {
       return "My assessment";
    } 
}

然后,您可以在此新實現上調用addMark

MyAssessment myAssessment = new MyAssessment();
myAssessment.addMark("11", m1);

另外,此方法會引發Exception因此您需要嘗試/捕獲它

try {
    new MyAssessment().addMark("11", m1);
} catch(Exception e) {
    e.printStackTrace();
}

最后,您的Assessment類中沒有weight屬性,因此,如果要編譯該類,應該以某種方式定義一個。

private int weight = 0;

我找不到確切的問題,但是通過您的代碼,我發現了。

  1. 您需要擴展抽象類Assessment ex。 AssessmentManager

     class AssessmentManager extends Assessment 
  2. 創建AssessmentManager對象,然后使用它。

     AssessmentManager _assessment = new AssessmentManager(); _assessment.addMark(Student_ID, Marks) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM