2016-10-11 2 views
-2

Так что это вопрос: Определить, сколько итераций следующей операции не требуется, пока условие (а * а + Ь * Ь)> 4 достигается:Counting Итерации

NEWA = а * а - Ь * б + х

NEWB = 2 * а * Ь + у

а = NEWA

б = NEWB

я застрял на это некоторое время. Любая помощь будет принята с благодарностью.

public static int findEscapeCount(double x, double y, int maxIterations) 
{ 
    int count =0; 
    double a; 
    double b; 
    double newA; 
    double newB; 

    for(a=0; a<maxIterations; a++) 
    { 
     for(b=0; b<maxIterations; b++) 
     { 
      newA = a * a - b * b + x; 
      newB = 2 * a * b + y; 
      a = newA; 
      b = newB; 

      if((a * a + b * b) < 4) 
      { 
       count = count+1;  

      } 

     } 

    } 
    return count; 
} 
+0

Исправить отступы. Какой результат вы получаете? – nicomp

+1

Осветите, @JoeC, OP разместил свой код. Это законный запрос. – nicomp

+0

, вы должны использовать одиночный цикл while, чтобы проверить условие (a * a + b * b) <4 и прирастить a & b каждую итерацию. затем сохраните счетчик итераций. он автоматически выйдет, когда условие будет выполнено, и ваш счет будет правильным. –

ответ

0

Если я правильно понять эту проблему, то это должно быть вдоль линий, что вам нужно:

public static int findEscapeCount(double x, double y, int maxIterations) 
{ 
    int count =0; 
    double a; 
    double b; 
    double newA; 
    double newB; 


    while((a * a + b * b) > 4) 
    { 
     a++; 
     b++; 

     newA = a * a - b * b + x; 
     newB = 2 * a * b + y; 
     a = newA; 
     b = newB; 

     count++; 

    } 

    return count; 

} 

EDIT: после повторного прочтения вопрос, я даже не конечно, если требуется увеличение «a» и «b», каждая итерация необходима, поскольку вы переадресовываете их каждую итерацию в любом случае ... но вам придется определить это из ваших требований!

+0

Дело в том, что мне нужно предоставить максимальное количество итераций. Поэтому, если после этого максимального времени условие все еще не выполняется, то ответом является заданное число максимальных итераций. Я не уверен, как это сделать в цикле while. –

+0

вы можете проверить переменную «count» с помощью инструкции «if» и если она равна «maxIterationCount», тогда выйдите из цикла while с «break»; заявление и вернуть счет –

+0

Я переключил «больше», чем на «меньше», и попробовал это, и все еще не правильно. Я не уверен, почему это кажется, что это сработает. Он возвращает 1 каждый раз, независимо от аргумента. –