2012-03-11 5 views
0

Ошибка, с которой я столкнулся, представляет собой бесконечный или почти бесконечный цикл в моих вызовах метода и создании класса другими конструкторами класса. То, что моя программа пытается сделать, это полу-случайное генерирование результатов опроса, основанных на фактической статистике. Я был бы очень признателен не только за понимание того, что здесь происходит. Но некоторые советы и указания о том, как предотвратить это, и способы анализа сообщений об ошибках. Я получаю, как некоторые из работы, но, как я сказал ниже, я новичок в программировании, новичок в колледже, поэтому программирование для меня новое. Спасибо заранее и извините за предыдущий пост, подумал, что я потрачу время, чтобы дать вам ребята подходящую.stackoverflowerror 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 остальная часть кода не требуется для загрузки.

У меня возникли трудности с загрузкой моего сообщения об ошибке на этом сайте, не приняв его в качестве кода в вставке кода, после чего он не позволит мне отправить сообщение после этого, поэтому я собираюсь загрузить код elseware и связать его.

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

Но я не знаю, как долго этот форум позволит мне сохранить этот пост там> <

+0

Вы не показали нам конструктора 'Статистика', где я подозреваю, что проблема такова. –

+0

AHH жаль, держись –

ответ

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

Спасибо и исправил проблему, когда я возвращаюсь в колледж, я собираюсь попросить моих профессоров советов по чтению сообщений об ошибках. Я все еще не могу сесть и понять, как вы разобрались в том, что вы поняли. Я имею в виду, я понимаю некоторые из них, просто недостаточно, чтобы действительно понять, что говорится. –

+0

@PatrickMurphy В чтении трассировки стека нет трюка. Если функция A вызывает B, и у вас есть исключение в B, то точка, в которой произошла ошибка в B, будет сверху, а затем место в A, где был вызван B, и так далее. Поэтому, если вы не можете определить ошибку в первой точке, вы можете пойти глубже и попытаться найти причину. –

2

Судя по трассировке стека, проблема состоит из трех частей, которые вы не показали нам - в Question и Statistics конструкторами и 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 даже знает об опросах и вопросах.

Вполне возможно, что многое из этого может быть исправлено путем передачи ссылки на существующих объект конструкторов - так Probability конструктор может быть лучше приниматьStatistics ссылочных в своем конструкторе и использование, что для его stats поле, чем создание нового Statistics объект сам. Трудно сказать, не зная, что эти классы действительно предназначены для представления, хотя ... которые могут быть частью проблемы. У вас есть четкое понимание того, что несет ответственность каждый класс? Подумайте об этом, прежде чем делать какие-либо изменения кода.

0

У нас нет соответствующего исходного кода, но сообщение об ошибке говорит, что это не так:

  1. тестер создает Вероятность
  2. Вероятность конструктор создает Статистика
  3. Статистика конструктор вызывает Survey.addQuestion ()
  4. addQuestion() создает вопрос
  5. Вопрос создает статистику (Гото 3 и петли бесконечно)

Я думаю, вы должны, вероятно, передавать объекты, а не создавать их каждый раз.