2015-02-03 3 views
0

Я пытаюсь обновить переменную startPreyPopulationSize и startPredatorPopulation каждый раз, когда она итерации, но я не уверен, как это сделать, поскольку нижний для цикла влияет на верхний правый?Обновление моих переменных в цикле for?

//Equation to find out prey population size. 
    for(double rate = 0; rate <= numberOfPeriods; rate++) { 

     double partOne = startPreyPopulationSize/rate * (1 + RATE_A_BIRTH - RATE_B_PREDATION * (startPredatorPopulationSize/rate)); 
     double updatedPreyPopulation = startPreyPopulationSize/(rate + 1); 
     updatedPreyPopulation = partOne; 
     System.out.printf("Period %5.0f: Prey Population %.2f; \n", rate, updatedPreyPopulation); 

    } 


    //Equation to find out predator population size. 
    for(double rate2 = 0; rate2 <= numberOfPeriods; rate2++) { 
     double partTwoEquation = startPredatorPopulationSize/rate2 * (1 - RATE_C_DEATHS + RATE_D_INCREASE * (startPreyPopulationSize/rate2)); 
     double updatedPredatorPopulation = startPredatorPopulationSize/(rate2 + 1); 
     updatedPredatorPopulation = partTwoEquation; 
     System.out.printf("Period %5.0f: Predator Population %.2f; \n", rate2, updatedPredatorPopulation); 
    } 

ОБНОВЛЕНО КОД Я основывая свою формулу от этого, если это помогает http://i.imgur.com/rUQ774q.jpg я знаю, что моя формула от так или иначе.

//Equation to find out prey population size. 
    for(double rate = 0; rate < numberOfPeriods; rate++) { 

     partOne = startPreyPopulationSize/rate * (1 + RATE_A_BIRTH - RATE_B_PREDATION * (startPredatorPopulationSize/rate)); 
     currentPreyPopulationSize = startPreyPopulationSize/(rate + 1); 
     currentPreyPopulationSize = partOne; 
     System.out.printf("Period %5.0f: Prey Population %.2f; \n", rate, currentPreyPopulationSize); 

     partTwoEquation = startPredatorPopulationSize/rate * (1 - RATE_C_DEATHS + RATE_D_INCREASE * (startPreyPopulationSize/rate)); 
     currentPredatorPopulationSize = startPredatorPopulationSize/(rate + 1); 
     currentPredatorPopulationSize = partTwoEquation; 
     System.out.printf("Period %5.0f: Predator Population %.2f; \n", rate, currentPredatorPopulationSize); 


     startPreyPopulationSize = currentPreyPopulationSize; 
     startPredatorPopulationSize = currentPredatorPopulationSize; 
    } 
+0

Используйте 1 для цикла только здесь и обновляйте оба в одном цикле. –

+2

Не глядя на ваш код, почему нижняя петля повлияет на верхнюю? – nhgrif

+0

И ваши расчеты ** ** ** выключены. Вам нужно получить код инициализации ** вне ** для циклов for. В противном случае вы повторно инициализируете популяции с каждой итерацией цикла, и поэтому популяции не изменятся. –

ответ

0

Ну, ваш код для уравнений, которые вы указали, неверен.

1) В уравнении у вас нет деления на rate, поэтому она должна выглядеть

double currentPreyPopulationSize = startPreyPopulationSize * (1 + RATE_A_BIRTH - RATE_B_PREDATION * (startPredatorPopulationSize)); 

2) Кроме того, это деление вызывает -Infinity, потому что rate является 0 для первой итерации.

+0

Итак, что бы я использовал для индекса «n»? Это скорость, которую я знаю, но будет ли она использоваться внутри цикла for? –

+0

@ Erick Villalpando это не деление, это индекс - количество жертв и хищников для n-го и (n + 1) -го периода. Вам нужно это, чтобы вывести номер периода и выполнить расчетное количество раз (вы получаете его от пользовательского ввода). С этого вы должны изменить '' numberOfPeriods'' и '' rate'' '' int''. – NikolayKondratyev

Смежные вопросы