Подсчет итераций

#java #loops #for-loop #nested-loops

#java #циклы #for-цикл #вложенные циклы

Вопрос:

Итак, это вопрос: определите, сколько итераций следующей операции требуется, пока не будет достигнуто условие (a * a b * b)> 4:

newA = a * a — b * b x

newB = 2 * a * b y

a = newA

b = 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;
}
  

Комментарии:

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

2. Расслабься, @JoeC, ОП опубликовал свой код. Это законный запрос.

3. вы должны использовать один цикл while, чтобы проверить условие (a * a b * b) < 4 и увеличивать a amp; b на каждой итерации. затем ведите подсчет итераций. он автоматически завершится, когда условие будет выполнено, и ваш счет будет правильным.

4. Я не указал, каков мой результат. Когда x и y оба равны 1, я получаю результат 1, когда он должен быть 2, например. Я постараюсь сделать то, что вы сказали @big_water спасибо за совет.

5. И спасибо @nicomp, я не пытаюсь копировать и вставлять код для ответа, я пытаюсь получить помощь.

Ответ №1:

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

 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;

}
  

РЕДАКТИРОВАТЬ: после повторного прочтения вопроса я даже не уверен, необходимо ли увеличивать «a» и «b» на каждой итерации, поскольку вы в любом случае переназначаете их на каждой итерации… но вам нужно будет определить это из ваших требований!

Комментарии:

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

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

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

4. @JonahBartz Я думаю, вы хотите сохранить его как больше, чем в этом случае. Разве это не условие в вашем вопросе?

5. @JonahBartz, какие числа вы используете для ввода в функцию (x и y)