2013-06-09 2 views
-2

Это мой код. Я просто читаю файл, у которого есть первые строки, а затем строки, как строка, их число равно числу в первой строке.Строка вызывает NullPointerException

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. Я хочу знать, почему это происходит.

+1

Я не могу найти 'groupmember [я] .setname (имя)' в любом месте, но выглядит как 'groupmember [я]' 'является null'. –

+0

Я даже не могу найти 'groupmember [i]' – Bill

+1

Пожалуйста, опубликуйте [SSCCE] (http://sscce.org/). – haylem

ответ

0

groupmember[i] никогда не определяется, вам нужно добавить

groupmember[i] = new groupmember(); 

или что-то подобное, что в начале вашего цикла.

+0

да это проблема, спасибо – osama

-1

Сделайте это: String name = ""; Строка имеет значение по умолчанию null, если оно не инициализировано.

+0

только если они являются переменными экземпляра ..... – pinkpanther

2

Массив переменных ссылочного типа заполняется null записей после инициализации. Вам нужно

groupmember[i] = new groupmember(); 

, прежде чем вы можете сделать:

groupmember[i].setname(name); 

В будущем, пожалуйста, следуйте соглашения об именовании Java и ваши занятия начинаются с заглавной буквы, как GroupMember (даже CamelCase).

+0

Вы правы, спасибо за советы. – osama

0

Вы только что инициализировали массив типа groupmember, теперь все значения в массиве равны нулю, чтобы начать использовать массив, вам нужно сделать.

groupmember[i] = new groupmember();