我是一个编程菜鸟。 2个月前开始大致并且一直在努力变得更好。我刚刚转向面向对象的东西,我遇到了一些麻烦。我写了这个测试程序,但没有一个会执行。它没有任何错误,但在控制台中重复
"Exception in thread "main" java.lang.StackOverflowError
at userinput.<init>(userinput.java:4)
at DialogueOption.<init>(DialogueOption.java:5)
一遍又一遍。 这是三个班级。对不起,如果有任何格式错误。
第一堂课
public class window{
public static void main(String args[]){
DialogueOption Dialogue1 = new DialogueOption();
userinput userin = new userinput();
Dialogue1.responseList();
userin.FIResponse();
Dialogue1.dialogueOP();
while(Dialogue1.badinput = true);
Dialogue1.responseList();
userin.FIResponse();
Dialogue1.dialogueOP();
}
}
第二课
public class DialogueOption extends window {
int DialogueOp1;
window win = new window();
userinput userin = new userinput();
public boolean badinput;
public void responseList(){
System.out.println("Get out of bed, you lazy ****.");
System.out.println("1. **** you, bro. I'm staying in bed.");
System.out.println("2. Fine, lets go to class.");
System.out.println("3. Eh?");
}
public void dialogueOP() {
userin.FIResponse();
switch(userin.Response){
case 1:
System.out.println("**** you then");
break;
case 2:
System.out.println("Good guy");
break;
}
if(userin.Response >= 3){
System.out.println("Bad input, try again.");
badinput = true;
}
}
}
第3课
import java.util.Scanner;
public class userinput extends window {
DialogueOption Dialogue1 = new DialogueOption();
public int Response;
public void FIResponse(){
Scanner input = new Scanner(System.in);
int response = input.nextInt();
Response = response;
}
}
答案 0 :(得分:2)
在您的DialogueOption
内,您正在创建userinput
,而DialogueOption
又会创建一个while(Dialogue1.badinput = true);
对象。这会创建一个链,它会一直初始化对象,直到最终得到堆栈溢出异常。
您需要更改设计,以避免这种循环依赖。
另一个注意事项是,将while(Dialogue1.badinput == true);
替换为while(Dialogue1.badinput);
或Linq
答案 1 :(得分:1)
选中此项:您的new DialogueOption()
创建了一个新的userinput userin = new userinput();
,用于创建新的DialogueOption Dialogue1 = new DialogueOption();
,从而创建新的userinput userin = new userinput();
这会一直持续到达堆栈溢出为止。
也可以按定义类开始大写。