2012-03-11 48 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和無限循環)

我認爲你應該傳遞物體而不是每次創建它們。

相關問題