2016-12-12 4 views
0

Можете ли вы помочь мне в решении моей проблемы с моим массивом объектов класса человек? Каждый раз, когда я запускаю программу, у меня проблема с нулевым указателем. Вот код.Создание объекта объекта ArrayList и его добавление в ArrayList

List<Student> listPerson = new ArrayList<>(); 
Student[] stud = null; 
int counter = 0; 

ResultSet rs = DBMSConnection.GetDetails(); 

while(rs.next()){ 

    stud[counter] = new Student(); 
    stud[counter].setFirst_name(rs.getString("first_name")); 
    stud[counter].setLast_name(rs.getString("last_name")); 
    stud[counter].setAddress(rs.getString("address")); 
    counter++;  
} 

for(int i = 0 ; i < counter ; i++){ 
    listPerson.add(stud[i]); 
} 

Это редактировать, что вы добавили в другие ответы

То, что я действительно хочу, как эти ребята.

Student stud = new Student(); 
stud.firstname = "john"; 
stud.lastname = "doe"; 


Student stud2 = new Student(); 
stud2.firstname = "Mike"; 
stud2.lastname = "doe"; 

List<Student> list = new ArrayList<>(); 
list.add(stud); 
list.add(stud2); 

Примечание: Есть ли способ, которым я могу создать экземпляр Student в петле; например.

int record = 100; 
Student[] sa = null; 

for(int i = 0; i<record; i++){ 
    sa[i] = new Student[]; //instantiate Objects on the fly 
    list.add(sa[i]); 
} 

Я хочу назначить все первую запись в первый экземпляр объекта, как шпилька имеет значения первой записи stud2 имеет вторую запись и передать его в список.

+0

Кстати, то, что я Я пытаюсь сделать это, я обращаюсь к базе данных и зацикливаю на все записи студентов один за другим и передавая ее в программу с помощью набора результатов. На мой взгляд, я создаю динамический массив учеников класса объектов и получаю детали из базы данных. Вам нужно руководствоваться здесь. Спасибо – kornben

+0

¿Каков размер вашего массива «Student [] stud = null»? Он никогда не изменяется от нуля, поэтому размер равен 0 ... и вы добавляете новые элементы в массив. Вам не нужен этот массив. Только это: «while (rs.next()) {listPerson.add (новый ученик (rs.getString (« first_name »), rs.getString (« last_name »), rs.getString (« адрес »)); : вам нужно создать непустой конструктор со всеми деталями студента. – Shondeslitch

+0

Класс объекта класса Student [] должен быть динамическим, потому что я не хочу отслеживать размер массива. Я просто хочу создать динамический массив только для хранения больших значений массива. Технически размер объекта Student должен соответствовать размеру записей. – kornben

ответ

1

Ваш массив нулевой Student[] stud = null; как он никогда не меняется от нулевой, но в действительности не нужен массив

считают

ResultSet rs = DBMSConnection.GetDetails(); 

    while(rs.next()){ 

     Student stud = new Student(); 
     stud.setFirst_name(rs.getString("first_name")); 
     stud.setLast_name(rs.getString("last_name")); 
     stud.setAddress(rs.getString("address")); 
     listPerson.add(stud); 
    } 

редактировать

Вы можете позже перебирать этого ArrayList следующим образом

for (Student student: listPerson) { 
    System.out.println (student.getFirst()); 
}  
+0

Ic, но проблема в том, что у меня есть несколько значений в моей базе данных, и я хочу создать массив студентов и добавить его к объектам Student. Это будет работать?? Я пытаюсь создать несколько экземпляров класса Student и таких как stud, stud1, stud2 динамически – kornben

+0

Я хочу получить все значения и передать их в JTable, я не использую библиотеки rs2xml .. просто хочу код данные вручную. Спасибо за совет – kornben

+0

Да, для каждой записи, которую вы извлекаете из своей БД, вы добавляете нового ученика в ArrayList. –

0

Массивы - это объекты в Java, которые хранят несколько переменных одного типа. Массивы могут содержать примитивы или ссылки на объекты, но сам массив всегда будет объектом в куче, даже если массив объявлен для хранения примитивных элементов.

Построение массива означает создание объекта массива в куче (где живут все объекты ), т. Е. Делает новое по типу массива. Чтобы создать объект массива, Java должна знать, сколько места выделяется в куче, поэтому вы должны указать размер массива во время создания. Размер массива - это количество элементов, которые будет удерживать массив.

Если вы хотите динамически управлять своими данными, вы можете использовать один из типов Collection из java.util (включая HashMap, ArrayList, TreeSet).

В вашем случае,

List<Student> listPerson = new ArrayList<>(); 
ResultSet rs = DBMSConnection.GetDetails(); 

while(rs.next()){ 

    Student stud = new Student(); 
    stud.setFirst_name(rs.getString("first_name")); 
    stud.setLast_name(rs.getString("last_name")); 
    stud.setAddress(rs.getString("address")); 
    listPerson.add(stud); 
} 

После в то время как цикл по этой работе, вы получите все ваши данные (listPerson) и может перейти к вашей JTable для синтаксического анализа и т.д.

+0

Это будет работать ребятам, но грустно сказать, что я может получить только последнюю запись. То, что я пытаюсь сделать, - получить все значения из базы данных с помощью жестко закодированных java-кодов. Я не хочу использовать некоторые библиотеки на данный момент, такие как rs2xml, потому что я планирую взять некоторые экзамены Gov't для Java в моей стране. Я ценю ваши комментарии, но я до сих пор не нашел решений. – kornben

+0

Что мне действительно нужно, я хочу динамически создавать объект Student. В любом случае я могу создать экземпляр класса человека внутри цикла dnynamically, например. Stud [0], Stud [1], Stud [2] внутри функции и присваивать в нее все значения и передавать их в listPerson. – kornben

+0

@kornben Это именно то, что делает мой ответ. Я думаю, что у вас есть фундаментальное недоразумение, и ваш вопрос явно не говорит о том, что происходит не так. Пожалуйста, подумайте о том, чтобы обновить свой вопрос с дополнительной информацией и/или кодом, чтобы мы могли помочь –

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