Java StackOverflowerrNull

Java StackOverflowerrNull,java,Java,我在这里遇到的错误是在我的方法调用和类创建其他类的构造函数中有一个无限或接近无限的循环。我的程序试图做的是根据实际统计数据半随机生成调查结果。我将非常感激,不仅仅是一些关于这里出了什么问题的见解。但是关于如何防止这种情况发生,以及我自己分析错误消息的方法,有一些建议和指针。我了解一些工作,但正如我在下面所说的,我是编程新手,我是大学一年级新生,所以编程对我来说是新的。提前感谢并为我之前的帖子感到抱歉,我想我会花时间给你们一个合适的帖子 这是我自己做的第二个项目,如果不是最好的,我很抱歉 这是我的

我在这里遇到的错误是在我的方法调用和类创建其他类的构造函数中有一个无限或接近无限的循环。我的程序试图做的是根据实际统计数据半随机生成调查结果。我将非常感激,不仅仅是一些关于这里出了什么问题的见解。但是关于如何防止这种情况发生,以及我自己分析错误消息的方法,有一些建议和指针。我了解一些工作,但正如我在下面所说的,我是编程新手,我是大学一年级新生,所以编程对我来说是新的。提前感谢并为我之前的帖子感到抱歉,我想我会花时间给你们一个合适的帖子

这是我自己做的第二个项目,如果不是最好的,我很抱歉

这是我的测试课:

 public Tester()
{
    randomGenerator = new Random();
    probability = new Probability();
    stats = new Statistics();
    double chance = randomGenerator.nextDouble();
    double gender = probability.getProbabilityOfMale();
    if(chance > gender)
    {
        male = false;
        stats.incrementFemale();
    }else{
        male = true;
        stats.incrementMale();
    }
    age = randomGenerator.nextInt(49)+16;
    int range = stats.getNumberOfQuestion();
    for(int i=0;i<range;i++)
    {
       probabilities = probability.probOfAnswer(i);
       answers = probability.getAnswers(i);
       chance = randomGenerator.nextDouble();
       int size = probabilities.size();
       for(int j=0;j<size;j++)
       {
         double qTemp = chance - probabilities.get(j);
         if(qTemp <= 0.0)
         {
             Answer aTemp = answers.get(j);
             aTemp.incrementCounter();
             answers.set(j,aTemp);
          }
       }
    }
}
公共测试仪()
{
随机生成器=新随机();
概率=新概率();
统计数据=新统计数据();
double chance=randomGenerator.nextDouble();
双重性别=概率。getProbabilityOfMale();
如果(机会>性别)
{
男=假;
stats.incrementFemale();
}否则{
男=真;
stats.incrementMale();
}
年龄=randomGenerator.nextInt(49)+16;
int range=stats.getNumberOfQuestion();
for(inti=0;问题中的i
。(Question.java:17)
at Survey.addQuestion(Survey.java:23)
at统计。(Statistics.java:52)
在质询中。(质询.java:17)
at Survey.addQuestion(Survey.java:23)
at统计。(Statistics.java:52)
概率论(Probability.java:19)
您需要检查为什么Question正在创建Statistics对象,并且Statistics正在尝试创建导致无限递归的Question对象。由于行号已给出,您可以查看相应的行。

问题。(Question.java:17)
at Survey.addQuestion(Survey.java:23)
at统计。(Statistics.java:52)
在质询中。(质询.java:17)
at Survey.addQuestion(Survey.java:23)
at统计。(Statistics.java:52)
概率论(Probability.java:19)

您需要检查为什么Question正在创建Statistics对象,并且Statistics正在尝试创建导致无限递归的Question对象。由于行号已给出,您可以查看相应的行。

根据堆栈跟踪判断,问题在于您没有向我们展示的三个部分—
问题d
Statistics
constructors和
Survey.addQuestion
方法:

从堆栈跟踪中:

at Survey.addQuestion(Survey.java:23)
at Statistics.<init>(Statistics.java:52)
at Question.<init>(Question.java:17)
at Survey.addQuestion(Survey.java:23)
at Statistics.<init>(Statistics.java:52)
at Question.<init>(Question.java:17)
at Survey.addQuestion(Survey.java:23)
at统计。(Statistics.java:52)
在质询中。(质询.java:17)
at Survey.addQuestion(Survey.java:23)
at统计。(Statistics.java:52)
在质询中。(质询.java:17)
因此,您的
问题
构造函数正在调用
统计
构造函数。但是
统计
构造函数随后正在调用
调查.addQuestion
,后者反过来调用
问题
构造函数

在我看来,要进行的构建比实际有用的多得多。为什么
统计
构造函数需要在调查中添加任何内容?我不希望
统计
类甚至知道调查和问题


完全有可能通过将对现有对象的引用传递给构造函数来修复很多问题,因此
概率
构造函数在其构造函数中获取
统计信息
引用,并将其用于其
统计信息
字段,可能比创建新的
统计信息
对象更好f、 如果不知道这些类真正要表示什么,很难说……这可能是问题的一部分。您是否牢牢掌握了每个类的职责?在进行任何代码更改之前,请仔细考虑这一点。

从堆栈跟踪判断,问题出在三个部分,您没有展示给您s-问题
和统计
构建者和调查。添加问题方法:

从堆栈跟踪中:

at Survey.addQuestion(Survey.java:23)
at Statistics.<init>(Statistics.java:52)
at Question.<init>(Question.java:17)
at Survey.addQuestion(Survey.java:23)
at Statistics.<init>(Statistics.java:52)
at Question.<init>(Question.java:17)
at Survey.addQuestion(Survey.java:23)
at统计。(Statistics.java:52)
在质询中。(质询.java:17)
at Survey.addQuestion(Survey.java:23)
at统计。(Statistics.java:52)
在质询中。(质询.java:17)
因此,您的
问题
构造函数正在调用
统计
构造函数。但是
统计
构造函数随后正在调用
调查.addQuestion
,后者反过来调用
问题
构造函数

在我看来,要进行的构建比实际有用的多得多。为什么
统计
构造函数需要在调查中添加任何内容?我不希望
统计
类甚至知道调查和问题


完全有可能通过将对现有对象的引用传递给构造函数来修复很多问题,因此
概率
构造函数在其构造函数中获取
统计信息
引用,并将其用于其
统计信息
字段,可能比创建新的
统计信息
对象更好f、 如果不知道这些类真正要表示什么,很难说……这可能是问题的一部分。您是否牢牢掌握了每个类的职责?在更改任何代码之前,请仔细考虑这一点。

我们没有相关的源代码,但错误消息指出了问题所在:

  • 测试人员创建一个概率
  • 概率构造函数创建一个统计信息
  • 统计构造函数调用Survey.addQuestion()
  • addQuestion()创建一个问题
  • 问题创建一个统计(转到3并无限循环)

  • 我认为您应该传递对象,而不是每次都创建它们。

    我们没有相关的源代码,但是错误消息
    at Question.<init>(Question.java:17)
    at Survey.addQuestion(Survey.java:23)
    at Statistics.<init>(Statistics.java:52)
    at Question.<init>(Question.java:17)
    at Survey.addQuestion(Survey.java:23)
    at Statistics.<init>(Statistics.java:52)
    at Probability.<init>(Probability.java:19)
    
    at Survey.addQuestion(Survey.java:23)
    at Statistics.<init>(Statistics.java:52)
    at Question.<init>(Question.java:17)
    at Survey.addQuestion(Survey.java:23)
    at Statistics.<init>(Statistics.java:52)
    at Question.<init>(Question.java:17)