2012-03-07 5 views
1
import java.io.*; 

public class workPoS { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     dataList[] some_list = new dataList[10]; 

     for (int x = 0; x < some_list.length; x++) { 
      some_list[x].firstName = "John"; 
      some_list[x].middleName = "Jacob"; 
      some_list[x].lastName = "Jingle-Heimer-Schmidt"; 
      some_list[x].age = 101; 
     } 

     for (int x = 0; x < some_list.length; x++) { 
      System.out.println(some_list[x].firstName + " " 
        + some_list[x].middleName + " " + some_list[x].lastName 
        + " Age: " + some_list[x].age); 
     } 

    } 

    public class dataList { 
     String firstName, middleName, lastName; 
     int age; 

     public dataList() { 
      firstName = ""; 
      middleName = ""; 
      lastName = ""; 
      age = 0; 
     } 
    } 

} 

ОШИБКА: Исключение в потоке "основного" java.lang.NullPointerException на workPoS.main (workPoS.java:12)Создание массива из пользовательского класса?

Это строка 12:

some_list[x].firstName = "John"; 

Кажется, что я могу получить доступ к some_list [x], но как только я укажу конструктор, some_list [x] .firstName, результатом будет нулевое значение.

Я просто ссылаюсь на значение конструктора неправильно? Если да, то каков правильный способ сделать это?

Спасибо, ребята!

+0

является android точной меткой? Пункт входа для приложения для Android не является «основным», как для настольного приложения. –

ответ

0

Если вы используете оба классов в одном файле .java, Протестируйте этот код

import java.io.*;

public class workPoS {

public workPoS() { 
    super(); 

}

/** * @param args */ public static void main(String[] args) { workPoS wp = new workPoS(); dataList[] some_list = new dataList[10];

for (int x = 0; x < some_list.length; x++) { 
     some_list[x] = wp.new dataList(); 
     some_list[x].firstName = "John"; 
     some_list[x].middleName = "Jacob"; 
     some_list[x].lastName = "Jingle-Heimer-Schmidt"; 
     some_list[x].age = 101; 
    } 

    for (int x = 0; x < some_list.length; x++) { 
     System.out.println(some_list[x].firstName + " " 
       + some_list[x].middleName + " " + some_list[x].lastName 
       + " Age: " + some_list[x].age); 
    } 

} 

public class dataList { 
    String firstName, middleName, lastName; 
    int age; 

    public dataList() { 
     firstName = ""; 
     middleName = ""; 
     lastName = ""; 
     age = 0; 
    } 
} 

}

+0

Удивительный! Спасибо, что на самом деле нашли время, чтобы решить проблему, а не предполагать, что я полный идиот. – mrcampos

7

Посмотрите здесь:

dataList[] some_list = new dataList[10]; 

for (int x = 0; x < some_list.length; x++) { 
    some_list[x].firstName = "John"; 

Вы создали массив - но все элементы будут нулевые ссылки. Вы говорите о «неверном указании значения конструктора» - вы не , вызывающий конструктор вообще. Вы должны иметь:

for (int x = 0; x < some_list.length; x++) { 
    some_list[x] = new dataList(); 
    some_list[x].firstName = "John"; 

Для получения дополнительной информации см. Java Tutorial for Arrays.

(Вы также должны исправить свои имена, чтобы следовать соглашению об именах Java, и сделать ваши поля частными, но это совсем другое дело ...)

Смежные вопросы