-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);

它导致NullPointerException. 我想知道为什么会这样。

4

4 回答 4

2

引用类型变量数组在初始化后填充null条目。你需要

groupmember[i] = new groupmember();

在你可以做之前:

groupmember[i].setname(name);

将来,请遵循 Java 命名约定,并让您的类以大写字母开头,例如GroupMember(甚至是 CamelCase)。

于 2013-06-09T19:34:59.730 回答
0

您刚刚初始化了 type 的数组groupmember,现在数组中的所有值都为 null,为了开始使用数组,您需要执行 .

groupmember[i] = new groupmember();

于 2013-06-09T19:38:27.497 回答
0

groupmember[i]从未定义,您需要添加

groupmember[i] = new groupmember();

或类似的事情在你的周期开始。

于 2013-06-09T19:34:23.563 回答
-1

这样做:字符串名称=“”;如果未初始化,则字符串具有默认值 null。

于 2013-06-09T19:23:09.397 回答