当前位置: 首页 > 知识库问答 >
问题:

方法中的Java-NullPointerException

柴昆杰
2023-03-14
import java.util.ArrayList;
import java.util.Scanner;

public class Creatore {

int counterStudenti = 0;
int counterMaterie = 0;
int counterCorsi = 0;
//int counterEsami = 0;
ArrayList<Studente> listaStudenti = new ArrayList<Studente>();
ArrayList<Materia> listaMaterie = new ArrayList<Materia>();
ArrayList<CorsoStudi> listaCorsi = new ArrayList<CorsoStudi>();
//ArrayList<EsameDato> listaEsami = new ArrayList<EsameDato>();


public void iscriviStudente(String nomeStudente, String cognomeStudente, CorsoStudi corsoStudente){
    listaStudenti.add(new Studente(nomeStudente, cognomeStudente, counterStudenti, corsoStudente));
    counterStudenti++;
}

public void reimmatricolaStudente(int unaMatricola, int unIdCorso){
    int c = 0;
    CorsoStudi unCorso = null;
    for(c = 0; c < listaCorsi.size(); c++){
        if(listaCorsi.get(c).getIdCorso() == unIdCorso)
            unCorso = listaCorsi.get(c);
    }
    int contatore = 0;
    for(contatore = 0; contatore < listaStudenti.size(); contatore++)
        if(listaStudenti.get(contatore).getMatricola() == unaMatricola){
            iscriviStudente(listaStudenti.get(contatore).getNome(), listaStudenti.get(contatore).getCognome(), unCorso);
            rimuoviStudente(unaMatricola);
        };
}

public void rimuoviStudente(int matricola){
    int contatore;
    for(contatore = 0; contatore < listaStudenti.size(); contatore++){
        if(listaStudenti.get(contatore).getMatricola() == matricola)
            listaStudenti.remove(contatore);
    }
}

public Materia creaMateria(String nomeMateria, int crediti){
    listaMaterie.add(new Materia( nomeMateria, crediti, counterMaterie));
    counterMaterie++;
    return listaMaterie.get(counterMaterie - 1);
}

public void creaCorsoStudi(String nomeCorso, ArrayList<Materia> materieCorso){
    CorsoStudi q = new CorsoStudi( nomeCorso, materieCorso, counterCorsi);
    listaCorsi.add(q);
    counterCorsi++;
}

public ArrayList<Studente> cercaStudente(int opzione, String pattern){
    int contatore = 0;
    ArrayList<Studente> listaRicercati = new ArrayList<Studente>();
    //opzione 1 = ricerca per nome
    if(opzione == 1)
        for(contatore = 0; contatore < listaStudenti.size(); contatore++){
            if(listaStudenti.get(contatore).getNome().equalsIgnoreCase(pattern))
                listaRicercati.add(listaStudenti.get(contatore));
        };
    //opzione 2 = ricerca per cognome
    if(opzione == 2)
        for(contatore = 0; contatore < listaStudenti.size(); contatore++){
            if(listaStudenti.get(contatore).getCognome().equalsIgnoreCase(pattern))
                listaRicercati.add(listaStudenti.get(contatore));
    };
    //opzione 3 = ricerca per matricola
    if(opzione == 3)
        for(contatore = 0; contatore < listaStudenti.size(); contatore++){
            if(listaStudenti.get(contatore).getMatricola() == Integer.parseInt(pattern))
                listaRicercati.add(listaStudenti.get(contatore));
    };
    //opzione 4 = ricerca per corsoStudi
    if(opzione == 4)
        for(contatore = 0; contatore < listaStudenti.size(); contatore++){
            if(listaStudenti.get(contatore).getCorsoStudi().getIdCorso() == Integer.parseInt(pattern))
                listaRicercati.add(listaStudenti.get(contatore));
    };

    return listaRicercati;
}

public Materia materiaDaId(int id){
    int c = 0;
    Materia materiaDaRitornare = null;
    for(c = 0; c < listaMaterie.size(); c++){
        if(listaMaterie.get(c).getIdMateria() == id)
            materiaDaRitornare = listaMaterie.get(c);
    }
    return materiaDaRitornare;
}
}

CorsoStudi.java

import java.util.ArrayList;
import java.util.Scanner;

public class CorsoStudi {

private String nomeCorso;
private int idCorso;
private ArrayList<Materia> elencoMaterie;
private ArrayList<EsameDato> elencoEsamiDati;

public CorsoStudi(String unNomeCorso, ArrayList<Materia> unElencoMaterie, int unIdCorso){
    nomeCorso = unNomeCorso;
    elencoMaterie = unElencoMaterie;
    idCorso = unIdCorso;
    int contatore = 0;
    //EsameDato q = null;
    for(contatore = 0; contatore < unElencoMaterie.size(); contatore++){
        EsameDato q = new EsameDato(unElencoMaterie.get(contatore), 0);
        elencoEsamiDati.add(q);
    };
}

public String getNomeCorso(){
    return nomeCorso;
}

public int getIdCorso(){
    return idCorso;
}

public ArrayList<Materia> getElencoMaterie(){
    return elencoMaterie;
}

public ArrayList<EsameDato> getElencoEsamiDati(){
    return elencoEsamiDati;
}

public String toString(){
    String s = "";
    s = s + "Ecco le materie di questo Corso di Studi:\n";
    int c = 0;
    for(c= 0; c < elencoMaterie.size(); c++){
        s = s + elencoMaterie.get(c).getIdMateria() + " "; 
        s = s + elencoMaterie.get(c).getNomeMateria() + " (";
        s = s + elencoMaterie.get(c).getCrediti() + " crediti)\n";
    }
    return s;
}
}

共有1个答案

裴宜春
2023-03-14

您尚未初始化字段elencoesamidati,因此实际值为null

在向ArrayList添加元素之前,您需要创建以下内容:

private ArrayList<EsameDato> elencoEsamiDati = new ArrayList<EsameDato>();

您可能还需要初始化其他字段。

 类似资料:
  • 问题内容: 我想知道为什么他们在Java中设计方法来接受数组的输入? 在我看来,他们不需要此输入,因为ArrayList实例本身具有足够的详细信息以将数据转换为数组。 我的问题是为什么他们仍然需要传递数组?谢谢。 问题答案: 我能想到的两个原因: 删除表示通用参数在运行时不可用,因此不 知道 它包含字符串,而只是原始类型。因此,所有对的调用都必须返回,这并不是严格正确的。您实际上必须创建第二个数组

  • 问题内容: Object类中的getClass方法如何能够动态返回Class? 问题答案: 它不返回类 名 -返回代表该对象类型的类型。每个对象都“知道”它实际上是什么类型- 这取决于执行时间类型,即强制转换如何工作或失败。只是从对象中检索相关信息。 如果您的类仅包含一个,则每个对象仍将在内存中占用4个以上的字节:有效地存在一个对象“标头”,其中包含对对象的实际类型的引用,与监视器关联的信息该对象

  • 我目前正在学习方法和使用方法。有时,在决定在参数中放入什么时,我会感到困惑。我有一些代码,我在其中创建了三个方法,它们都对应。我必须为这个程序做的是显示一些服务和价格,并询问用户是否愿意。如果他们说是的话,价格会一直累积到数组结束。在我的第三种方法中,我遇到的问题是如何从main获得价格。我知道我应该使用void方法,因为我没有返回任何东西,只是将价格打印给用户。以下是我的程序代码: 具体而言,这

  • 问题内容: 我刚刚开始使用Java进行编程。在讨论方法和构造函数时,我们缺少使用的文字。我不确定到底是什么方法或构造函数以及什么使每个方法唯一。有人可以帮我定义它们并区分两者吗? 问题答案: 构造函数与方法之间的重要区别在于,构造函数初始化使用运算符创建的对象,而方法对已存在的对象执行操作。 构造函数不能直接调用。当关键字创建对象时,将隐式调用它们。可以直接在已使用创建的对象上调用方法。 构造函数

  • 问题内容: 在回答前面的一些问题以及最近的工作时,我一直在想为什么Java不支持其内置类中的方法链接。 例如,如果我要创建一个类,可以通过以下方法而不是void来使其 可链接: 内置库为什么不倾向于以这种方式执行操作?方法链接有不利之处吗? 我可能忽略了一些可以解释缺少方法链接的内容,但是任何默认返回void的setter方法都应该返回 对此 的引用(至少在我看来应该如此)。这样可以使以下情况更加

  • 问题内容: 在回答前面的一些问题以及最近的工作时,我一直在想为什么Java不支持其内置类中的方法链接。 例如,如果我要创建一个类,可以通过以下方法而不是void来使其 可链接: 内置库为什么不倾向于以这种方式执行操作?方法链接有不利之处吗? 我可能忽略了一些可以解释缺少方法链接的内容,但是任何默认返回void的setter方法都应该返回 对此 的引用(至少在我看来应该如此)。这样可以使以下情况更加