Java 类上的堆栈溢出错误

Java 类上的堆栈溢出错误,java,Java,我试图创建两个类,每个类都有另一个类的实例化,但是有一个java.lang.StackOverflowerError。第一个类如下所示 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 D

我试图创建两个类,每个类都有另一个类的实例化,但是有一个
java.lang.StackOverflowerError
。第一个类如下所示

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;
}
另一个类看起来像这样

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;
}
公共类GPpredictor{
reverseegpa rev_gpa=new reverseegpa();//这是导致错误的行
ArrayList arrayCourseName=新的ArrayList();
ArrayList arrayCourseCredit=新的ArrayList();
ArrayList arrayCourseGrade=新的ArrayList();
int课程;
国际信贷;
字符串COURSENAME;
//用于预测目的
国际等级;
}
我这样做是因为我需要使用类ReverseGPA中的方法来用于类GPpredictor(我需要使用grade points,通过使用getter方法)


非常感谢您的任何评论和帮助

当类在它们自己内部创建彼此的实例时,您得到了无限递归,因此ReverseGPA创建了一个GPpredictor实例,该实例创建了一个ReverseGPA,该实例创建了一个GPpredictor,该GPpredictor创建了一个ReverseGPA,该GPpredictor创建了一个GPpredictor,该GPpredictor创建了一个ReverseGPPredictor,该GPpredictor创建了一个GP这将创建一个GPpredictor

因此,具体而言,你必须:

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

停止疯狂——通过构造函数参数或setter方法将实例传递给这些类中的至少一个。我不确定你们的课程是做什么的,所以我不能说哪一个(或者两个都做)应该这样做

再一次,以具体的方式,至少有一个这样做

public class A {
   B b;

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

主要方法是

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
}

您好,非常感谢您的快速回复!然而,我有这个问题。ReverseGPA类有一个调用GPpredictor方法的方法。而GPpredictor有一种需要反向EGPA值的方法。因此,解决方案是为每个类创建一个实例?我错过什么了吗?非常感谢您的回答,很抱歉占用了您的时间time@user3764392:是的,我已经告诉过你该怎么做了。您不能在每个类中同时创建两个实例,因此应至少将一个实例传递给另一个实例。@user3764392:不客气。请查看编辑以回答问题。
public class B {
   A a; 

   public B(A a) {
       this.a = a;
   }
}
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
}