2012-03-11 45 views
0

我在这里的错误是在我的方法调用和类的创建其他类的构造函数的无限或接近无限循环。我的程序试图做的是根据实际统计数据半随机生成调查结果。我非常感谢不仅在这里发生了什么问题的一些洞察力。但是关于如何防止这种情况发生的一些建议和指导以及我自己分析错误信息的方法。我了解了一些工作,但就像我在下面陈述的那样,我对大学新生进行编程是新手,所以编程对我来说是新的。先谢谢了,并对我以前的帖子感到遗憾,我想我会花时间给你们一个合适的。stackoverflowror null

即时通讯新编程这是我的第二个项目我做了我自己的所以即时通讯抱歉,如果它不是最好的。

这是我的测试类:

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

统计类:

public ArrayList<Answer> getAnswers(int index) 
{ 
    temp = survey.getAnswers(index); 
    return temp; 
} 

public int getMale() 
{ 
    return male; 
} 

public int getFemale() 
{ 
    return female; 
} 

public int getNumberOfQuestion() 
{ 
    return numberOfQuestion; 
} 

public void incrementNumberOfQuestion() 
{ 
    numberOfQuestion++; 
} 

public void incrementMale() 
{ 
    male++; 
} 

public void incrementFemale() 
{ 
    female++; 
} 

和概率类:

public Probability() 
{ 
    stats = new Statistics(); 
    probOfAnswer = new ArrayList<Double>(0); 
} 

public ArrayList<Double> probOfAnswer(int index) 
{    
    temp = stats.getAnswers(index); 
    int size = temp.size(); 
    for(int i=0;i<size;i++) 
    { 
     aTemp = temp.get(i); 
     for(int j=0;j<size;j++) 
     { 
      Answer aTemp = temp.get(j); 
      sum += (double)aTemp.getCounter(); 
     } 
     double number = (double)aTemp.getCounter(); 
     probOfAnswer.add(number/sum); 
     sum = 0; 

    } 
    return probOfAnswer; 
} 

public ArrayList<Answer> getAnswers(int index) 
{ 
    temp = stats.getAnswers(index); 
    return temp; 
} 

public ArrayList<Double> getProbofAnswer() 
{ 
    return probOfAnswer; 
} 

public void probabilityOfMale() 
{   
    double male = (double)stats.getMale(); 
    double female = (double)stats.getFemale(); 
    probabilityOfMale = male/(male + female); 
} 

public double getProbabilityOfMale() 
{ 
    return probabilityOfMale; 
} 

这是唯一真正的重要组成部分,其中环exsists的其余代码不需要上传。

在上传我的错误消息在本网站上它不接受它作为代码插入代码,然后它不会让我提交消息后,所以我会上传代码其他软件,并链接它。

http://forum.overdosed.net/index.php/topic/56608-this-is-unimportant/

但我不知道多久,该论坛将让我保持这个职位有> <

+0

您没有向我们展示'Statistics'的构造函数,这是我怀疑问题的地方。 – 2012-03-11 07:51:17

+0

AHH抱歉持有 – 2012-03-11 07:53:05

回答

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) 

你需要检查为什么问题是创建统计对象并再次统计试图创建问题对象导致无限递归。由于行号已给出,您可以查看相应的行。

+0

谢谢发现并解决了这个问题,当我回到大学时,我会问我的教授在阅读错误信息时的提示。我仍然无法真正坐下来了解你是如何找出你想出的东西的。我的意思是我明白其中的一些,只是不足以真正理解所说的话。 – 2012-03-11 08:05:18

+0

@PatrickMurphy阅读堆栈跟踪没有任何窍门。如果函数A调用B并且在B中有例外,那么B中出现错误的点将位于顶部,接着放在A中,其中B被调用,等等。因此,如果您无法在第一时间找出错误,则可以深入并尝试找出原因。 – 2012-03-11 09:09:56

2

由堆栈跟踪情况来看,问题就出在你还没有表现出我们三个部分组成 - QuestionStatistics构造和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) 

所以你的Question构造函数调用Statistics构造函数。但构造函数Statistics然后调用Survey.addQuestion,这又调用Question构造函数。

感觉对我来说有很多更多的建设要比真的有用。为什么Statistics构造函数需要添加任何内容到调查中?我不希望Statistics类甚至知道关于调查和问题。

这是完全可能的,很多这可以固定传递一个参考的现有对象的构造 - 因此​​构造可能会更好采取在其构造Statistics参考,并使用其stats字段比创建新的Statistics对象本身。如果不知道这些类是否真的代表什么,但很难说......这可能是问题的一部分。你有牢牢掌握每个班级的责任是什么?在进行任何代码更改之前仔细考虑这一点。

0

我们没有相关的源代码,但错误信息说什么是错的:

  1. 测试创建了一个概率
  2. 概率构造函数创建一个统计
  3. 统计构造函数调用Survey.addQuestion( )
  4. addQuestion()创建了一个问题
  5. 问题创建一个统计(转到3和无限循环)

我认为你应该传递物体而不是每次创建它们。

相关问题