2015-10-12 2 views
-2

. Моя программа должна запускать формулу и распечатывать конечный продукт, когда счетчик достигает 100 200 500, и когда переменная попадает в определенное значение. В настоящее время он печатаетLoop не проверяет несколько, если

Исключения в потоке «основной» java.lang.ArithmeticException:/нулевого

Что я понимаю, потому что до того, как счетчик вступает в силу и наталкивается переменной она пытается разделить на нуль, что и вызывает это. Когда я изменяю переменную, она останавливается на 100 и печатает «Значение π при 100 равно: 0.0». Вот код:

int i = 1; 
    int counter = 0; 
    double pi = 4/((2*i)*(2*i+1)*(2*i+2)); 
while(counter <= 100){ 
    i++; 
    counter ++; 

    if(i==100){ 
     System.out.println("The value of \u03C0 at 100 is: "+ pi); 
    } 
    if (i==200){ 
     System.out.println("The value of \u03C0 at 200 is: " +pi); 
    } 
    if (i==500){ 
     System.out.println("The value of \u03C0 at 500 is:"+pi); 
    } 
    if(pi==3.14159){ 
     System.out.println("The number of iterations to get to 3.14159 is "+counter+". \u03C0 = 3.141599074"); 
    } 
} 
+4

Там нет ничего в размещенном коде, где '/ по zero' может произойти – janos

+0

Это полный код? Только разделение, которое я вижу, это 'double pi = 4/((2 * i) * (2 * i + 1) * (2 * i + 2));' и оно не бросает 'divide zero zero'? – sam

+1

Вы никогда не достигнете i == 200, потому что ваш цикл while останавливается на 100, а i и счетчик увеличиваются с той же скоростью. –

ответ

0

Ваша логика имеет некоторые проблемы. Вы следили за своим кодом с помощью отладчика? Если вы посмотрите на код,

int i = 1; 
    int counter = 0; 
    double pi = 4/((2*i)*(2*i+1)*(2*i+2)); 

происходит один раз, прежде чем петля while фактически изменяет i. Переместите pi в цикл while для обновления pi с новым i. Отладчики - ваш друг.

Другое место, где отладчик будет вашим другом, будет находиться в нулевом порядке while. Выполните это и посмотрите, что произойдет, когда ваша логика приблизится к вашим условиям тестирования. Ваше первое волнение я предсказываю, будет вокруг counter = 99 и следующая пара петель через или нет :)

Вы можете рассмотреть некоторые if-else блоки для нескольких тестов, или вы можете также использовать switch заявление для встречных испытаний ,

0

Попробуйте

... 
for (counter = 1; counter <= 500; counter++, i++) { 
    double pi = (double) 4/((2*i)*(2*i+1)*(2*i+2)); 
    if (counter % 100 == 0) { 
    System.out.println("The value of \u03C0 at " + counter + " is: "+ pi); 
    } 

    if(pi == 3.14159){ 
    System.out.println("The number of iterations to get to 3.14159 is "+counter+". \u03C0 = 3.141599074"); 
} 
} 
Смежные вопросы