-2

これは私のコードです。最初に行を持つファイルを読み取り、次に行を文字列として読みました。その番号は最初の行の番号と同じです。

    import java.io.*;
import java.util.*;
 class groupmember
{
int recieving;
int giving;
String name;
groupmember()
{
    recieving=0;
    giving=0;
    //name=null;
}
public void setname (String Title)
{
   this.name = new String(Title);
}
public void setrecieving(int val)
{
    recieving=val;
}
public void setgiving(int val)
{
    giving=val;
}
public String getname()
{
return name;    
}
public int getrecieving()
{
    return recieving;
}
public int getgiving()
{
    return giving;
}
}
class gift1 {

    /**
     * @param args
     */
    public static void main(String[] args) throws IOException{
        BufferedReader f=new BufferedReader(new FileReader("gift1.in"));
        PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter("gift1.out")));
        StringTokenizer st=new StringTokenizer(f.readLine());
        int NP=Integer.parseInt(st.nextToken());

        int excpectedgived=0,div=0;
        groupmember []groupmember=new groupmember[NP];
        for(int i=0;i<NP;i++)
        {
            st=new StringTokenizer(f.readLine());           
            String name=st.nextToken();

            groupmember[i].setname(name);
        System.out.println(name);   
        }

        out.close();
    }

}

問題は次の行で発生します。

groupmember[i].setname(name);

It causes NullPointerException. I want to know why this happens.

4

4 に答える 4

2

参照型変数の配列はnull、初期化後にエントリで埋められます。あなたが必要

groupmember[i] = new groupmember();

あなたができる前に:

groupmember[i].setname(name);

将来的には、Java 命名規則に従い、クラスを大文字で始めるようにしてくださいGroupMember(キャメルケースも)。

于 2013-06-09T19:34:59.730 に答える
0

groupmember[i]は定義されていないため、追加する必要があります

groupmember[i] = new groupmember();

またはあなたのサイクルの開始時にそのようなもの。

于 2013-06-09T19:34:23.563 に答える