2016-10-16 1 views
1

Diese Klasse ganz gut kompiliert:Anzeige ergibt sich aus Array von Objekten

public class Student{ 
//define variables 
static String name; 

//define constructor 
public Student(String n){ 
    name = n; 
} 

//define method to display name 
public static void displayStudent(){ 
    System.out.println("Name: " + name); 
} 
} 

Hier ist die Klasse, wo ich die displayStudent() Methode aufzurufen bin versucht, aber ich bin immer java.lang.NullPointerException Ausnahme von der for loop kommen :

public class MyClass{ 

//define array of object Student 
private Student[] students; 

//constructor 
MyClass(int size){ 
Student[] students = new Student[size]; 
} 

    //define method to display the students variable 
public void displayAllStudents(){ 
    for (int i = 0; i <= students.length; i++){ 
     students[i].displayStudent(); 
    } 
} 

ich es mit Eclipse Festsetzung bin versucht, aber es sagt, dass in MyClass „der Wert der lokalen variablen students nicht verwendet wird“. Wo ist mein Fehler?

+1

Sie erstellen ein Array, aber füllen es noch nicht mit Objekten, es hat nur Null-Referenzen, wie Sie herausfinden. Füllen Sie jedes Array-Element zuerst mit 'new Student (...)', bevor Sie es verwenden. –

Antwort

2

Sie erstellen eine lokale Variable hier

MyClass(int size){ 
    // only exists inside this scope. 
    Student[] students = new Student[size]; 
} 

Aber das ist zu diesem Konstruktor lokale, so dass Sie sofort wegwerfen. Ich nehme an, Sie das Feldstudents

MyClass(int size) { 
    students = new Student[size]; 
} 

Hinweis zu setzen bedeutet: all dies tut, ist eine Reihe von Verweisen auf Studenten erstellen, die alle null sind. Also, was Sie auch brauchen, ist ein Schüler-Objekt für jeden dieser Indizes

MyClass(int size) { 
    students = new Student[size]; 
    for (int i = 0; i < size; i++) 
     students[i] = new Student(); 
} 

Hinweis zu erstellen, wie das gemeinsame Muster muss < nicht <= Ihre Druckschleife zu verwenden, ist entweder

for (int i = 0; i < students.length; i++){ 

oder

for (int i = 0; i <= students.length-1; i++){ 

Als Indizes bei 0 starten, wenn Sie n Elemente haben, wird die letztesein

p.s. Wahrscheinlich meintest du nicht, dass die Variable "name" statisch ist. Wenn Sie es statisch machen, wird allen Instanzen von "Student" derselbe Name zugewiesen.

+0

ja gelöst! Vielen Dank! – JohnSnow

+0

@Radik Das sollte wirklich ein Kommentar zu der Frage sein. –

+1

@sirio Wenn diese Antwort Ihr Problem gelöst hat, dann markieren Sie es bitte als die richtige Antwort. Dies liegt daran, dass alle Beiträge in Stack Overflow auch zukünftigen Besuchern hilfreich sein sollen und Beiträge mit akzeptierten Antworten hilfreicher sein können. – progyammer

1

Es ist wegen dieser Array-Größe ändern, dass Code in

public void displayAllStudents(){ for (int i = 0; i < students.length; i++){ students[i].displayStudent(); } }

wenn ein Array 3 Elemente array.length Funktion Rückkehr haben 3. Und Sie es von 0 zählen, 1,2,3 yaa da ist 4 Nummer. Es wird das Array outbound Exception oder Nullpointer Exception zurückgeben.

+0

Yep, sobald ich es behoben habe, bekam ich Arrayoutofbounds, also reparierte ich es mit 'students.length -1' und funktioniert jetzt. Vielen Dank! – JohnSnow

1

Siehe den Link für Lösung: https://github.com/omkar-nibandhe/StackOverflowSolutions/commit/c7aa250caeeed6a3827e0579b174aae59d4f9c22

Änderungen in der Klasse gemacht werden: "MyClass" für Deklarationsteil Studenten [].

-Sie rufen den Konstruktor mit der Größe des Arrays auf, initialisieren Sie also den Student [] mit der von Ihnen gewählten Größe (in diesem Fall hart auf 10 codiert).

Hoffe das hilft dir.

+0

Sie sollten Ihren Code hier einfügen, anstatt über einen Link. –

+1

Entschuldigung. das ist mein 1. Beitrag. wird das nächste Mal kümmern. –

0

Wie Sie sehen, verwenden Sie das Array von Schülern, aber Sie rufen nicht den Konstruktor der Schülerklasse (mit Argument) und daher enthalten sie null als gespeicherten Wert im Namensfeld und gibt Ihnen eine Nullzeigerausnahme.

class MyClass{ 

//define array of object Student 
private Student[] students; 

//constructor 
MyClass(int size){ 
Student[] students = new Student[size]; 
} 

    //define method to display the students variable 
public void displayAllStudents(){ 
    for (int i = 0; i <= students.length; i++){ 
     students[i].displayStudent();//this will give null pointer execption because student 
     // objects are not inisialised and cointains null 
    } 
} 
} 

aber dieser Code gibt keine Nullzeigerausnahme.

class MyClass{ 

//define array of object Student 
private Student[] students; 

//constructor 
MyClass(int size){ 
Student[] students = new Student[size]; 
for(int i=0;i<size;i++){ 
    students[i]=new Student("the string value"); 
} 
} 

    //define method to display the students variable 
public void displayAllStudents(){ 
    for (int i = 0; i <= students.length; i++){ 
     students[i].displayStudent(); 
    } 
} 
} 
Verwandte Themen