2015-11-01 13 views
7

Próbuję utworzyć dwie klasy z każdą klasą, która ma instancję innej klasy, ale havaing a java.lang.StackOverFlowError. Pierwsza klasa wygląda jak poniżejBłąd StackOverFlow na zajęciach

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; 
} 

A druga klasa wygląda to

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; 
} 

zrobiłem to w ten sposób, ponieważ trzeba użyć metody z klasy ReverseGPA być stosowane w klasie GPpredictor (muszę korzystać z punktów klasy, stosując metodę getter)

będzie bardzo wdzięczny za wszelkie uwagi i pomaga

Odpowiedz

7

masz nieskończonej rekurencji rząd Indii Podczas gdy klasy tworzą w sobie nawzajem swoje instancje, ReverseGPA tworzy instancję GPpredictor, która tworzy ReverseGPA, która tworzy GPpredictor, który tworzy ReverseGPA, która tworzy GPpredictor, który tworzy ReverseGPA, która tworzy GPpredictor ...

Więc w konkretny sposób, masz:

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

i

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

Zatrzymaj szaleństwo - pass w wystąpieniu co najmniej jednej z tych klas poprzez parametr konstruktora lub metody setter. Nie jestem pewien, co robią twoje zajęcia, więc nie mogę powiedzieć, które (lub jeśli obie) powinny to zrobić.

Ponownie, w konkretny sposób, mieć co najmniej jeden zrobić

public class A { 
    B b; 

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

i

public class B { 
    A a; 

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

aw głównej metody

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

Witam, dziękuję bardzo za szybka odpowiedź! Mam jednak ten problem. Klasa ReverseGPA ma metodę, która wywołuje metodę GPpredictor. Podczas GPpredictor mają metodę, która potrzebuje wartości ReverseGPA. Więc rozwiązaniem jest stworzenie instancji każdej klasy nie? Czy czegoś brakuje? Bardzo wdzięczny za twoją odpowiedź, przepraszam za poświęcenie ci czasu – Adam

+0

@ user3764392: tak, już ci powiedziałem, co powinieneś zrobić. Nie możesz utworzyć obu instancji w każdej klasie, dlatego zamiast tego przenieś co najmniej jedną instancję do drugiej. –

+0

dziękuję bardzo, że rozwiązał problem! – Adam

Powiązane problemy