通过包含HashMap

时间:2016-05-25 10:32:39

标签: java arraylist hashmap

所以我在大学里学习Java的基础课程。我正在尝试创建一个包含Bachelorstudent类的arraylist的Bachelorstudents类(英语中分别为复数和单数的“bachelorstudents”),其中包含HashMap(键)和标记(值)。

我的问题是臭名昭着的“非静态方法无法从静态上下文中引用”。

“Bachelorstudent” 级:

public class Bachelorstudent{
    private String navn;
    private int studentNummer;
    private HashMap<String, Integer> karakterListe = new HashMap<>();
    public Bachelorstudent(String navn, Integer studentNummer){
        setNavn(navn);
        setStudentNummer(studentNummer);
    }
    public Bachelorstudent(){
    }
    public void setKarakter(String fagkode, Integer karakter){
        karakterListe.put(fagkode, karakter);
    }

    public HashMap<String, Integer> getKarakter(){
        return karakterListe;
    }
    public int snitt(){
        Integer snittKarakter = 0;
        int counter = 0;
        if(!karakterListe.isEmpty()){
            for(Integer karakter : karakterListe.values()){
                snittKarakter += karakter;
                counter++;
            }
        }else{
            return 6;
        }
        return snittKarakter /= counter;
    }
    public int getKarakterer(){
        Integer karakterer = 0;
        if(!karakterListe.isEmpty()){
            for(Integer karakter : karakterListe.values()){
                karakterer += karakter;
            }
        }else{
            return 0;
        }
        return karakterer;
    }

    public void setNavn(String navn){
        this.navn=navn;
    }
    public String getNavn(){
        return navn;
    }
    public void setStudentNummer(int studentNummber){
        this.studentNummer=studentNummer;
    }
    public int getStudentNummer(){
        return studentNummer;
    }
}

“Bachelorstudenter” 级:

public class Bachelorstudenter{
    private ArrayList<Bachelorstudent> bachelorStudenter = new ArrayList<>();

    public Bachelorstudenter(){
    }
    public void karakterSnitt(){

        for(Bachelorstudent bachelorstudenter : bachelorStudenter){
            Bachelorstudent student = new Bachelorstudent();
            for(Bachelorstudent bachelorstudent : Bachelorstudent.getKarakter()){ //<-- Non-static method error.
            }
        }
    }

    public Boolean eksisterer(Bachelorstudent student){
        boolean finnes = false;
        for(Bachelorstudent bachelorstudent : bachelorStudenter){
            if(bachelorstudent.getNavn().equals(student.getNavn())){
                finnes = true;
                }
            }
        return finnes;
    }
    public Boolean nyBachelorstudent(Bachelorstudent student){
        if(!eksisterer(student)){
            bachelorStudenter.add(student);
            return true;
        }
        else{
            System.out.println("Eksisterer i systemet fra før");
            return false;

        }
    }
}

我已经尝试过几个方面,例如调用类Bachelorstudent的实例(如上所示),尝试继承(不确定我是否做得对,但我做的不起作用)。如何调用Bachelorstudenter类中的.getKarakter()方法?

编辑:只是为了澄清。这种方法的要点是获得每个bachelorstudent的每个标记的平均值。我在Bachelorstudent中有一个方法可以做到这一点,但是我需要Bachelorstudenter中的等效方法,它可以找到每个学生每门课程的平均分数。

1 个答案:

答案 0 :(得分:0)

您需要使用对象来调用非静态方法。

在您的示例中,您需要使用当前迭代的对象来调用方法:

Object