java中的对象不会在主类

时间:2015-09-28 11:51:42

标签: java class object main execute

我是一个编程菜鸟。 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;

    }
}

2 个答案:

答案 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();

这会一直持续到达堆栈溢出为止。

也可以按定义类开始大写。