2015-11-01 12 views
7

Ich versuche, zwei Klassen mit jeder Klasse hat eine Instantiierung einer anderen Klasse, aber mit einem java.lang.StackOverFlowError. Die erste Klasse sieht aus wie untenStackOverFlow Fehler bei Klassen

public class ReverseGPA { 
GPpredictor gp_predictor = new GPpredictor(); //This is the line that causes error 

double CURRENT_CREDITS; 
double FUTURE_CREDITS; 
double CUM_GPA; 
double DESIRED_GPA; 

double NEW_GRADE_POINT; 
int ROUNDED_GRADE_POINT; 

double NEW_GPS; 
} 

Und sieht die andere Klasse wie dieses

public class GPpredictor { 
ReverseGPA rev_gpa = new ReverseGPA(); //This is the line that causes error 

ArrayList<String> arrayCourseName = new ArrayList<>(); 
ArrayList<Integer> arrayCourseCredit = new ArrayList<>(); 
ArrayList<String> arrayCourseGrade = new ArrayList<>(); 

int COURSES; 
int CREDIT; 
String COURSENAME; 

//For predicting purposes 
int GRADE; 
} 

ich es so gemacht, weil ich die Methoden der Klasse ReverseGPA verwenden müssen, um in der Klasse GPpredictor verwendet werden (ich brauche die Gradierpunkte zu verwenden, durch die Getter-Methode verwendet wird)

Wird für alle Kommentare sehr dankbar sein und hilft

Antwort

7

Sie unendliche Rekursion GOI haben Da die Klassen Instanzen von sich selbst erstellen, erstellt ReverseGPA eine GPpredictor-Instanz, die einen ReverseGPA erstellt, der einen GPpredictor erstellt, der einen ReverseGPA erstellt, der einen GPpredictor erstellt, der einen ReverseGPA erstellt, der einen GPpredictor erstellt ....

So in einer konkreten Art und Weise, Sie haben:

public class A { 
    B b = new B(); 
} 

und

public class B { 
    A a = new A(); 
} 

Stoppen Sie den Wahnsinn - zumindest einer dieser Klassen über einen Konstruktorparameter oder Setter-Methode in einer Instanz übergeben. Ich bin nicht sicher, was Ihre Klassen tun, also kann ich nicht sagen, welches (oder wenn beide) dies tun sollten.

Wieder in einer konkreten Art und Weise, haben mindestens eine

public static void main(String[] args) { 
    A a = new A(); 
    B b = new B(a); // pass a into B 
    a.setB(b); // pass b into A 
} 
+0

Hallo, ich danke Ihnen sehr

public class A { B b; public void setB(B b) { this.b = b; } } 

und

public class B { A a; public B(A a) { this.a = a; } } 

Und im Hauptverfahren tun für die schnelle Antwort! Allerdings habe ich dieses Problem. Die Klasse ReverseGPA hat eine Methode, die die GPpredictor-Methode aufruft. Während der GPpredictor über eine Methode verfügt, die ReverseGPA-Werte benötigt. Also ist die Lösung, eine Instanz jeder Klasse zu erstellen, nein? Fehle ich etwas? Sehr dankbar für Ihre Antwort, Entschuldigung für Ihre Zeit – Adam

+0

@ user3764392: ja, ich habe Ihnen bereits gesagt, was Sie tun sollten. Sie können nicht beide Instanzen in jeder Klasse erstellen, sondern stattdessen mindestens eine Instanz in die andere übergeben. –

+0

Vielen Dank, das hat das Problem gelöst! – Adam