Последовательность Фибоначчи с использованием массива в Java

#java #arrays

#java #массивы

Вопрос:

Я хочу получить последовательность Фибоначчи, введенную пользователем в массив. Задача, поставленная передо мной, заключалась в том, чтобы «Запросить у пользователя ввод 2 целых чисел, которые будут приниматься для первого и второго элементов массива размером 10 массивов».

Вот мой код.

 int limit = 10;
    int[] fib = new int[limit];
    fib[0] = 0;
    fib[1] = 1;
  for (int j = 1; j < 2; j  ) 
  {
    System.out.print("Enter number "   "["   j   "]: ");
    num[j] = reader.nextInt();
    num[j] = fib[j 1]   fib[j 2];
    System.out.println("");
  }
    System.out.print("Result: ");
    for(int j = 0; j < limit; j   ) 
    {
      System.out.print(fib[j]   " ");
      System.out.print("");
    }
  

Мне очень нужна помощь в этом, я искал решение часами и до сих пор не понимаю.

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

1. В приведенном вами вопросе вообще не упоминается последовательность Фибоначчи. Какие проблемы у вас возникли с вашим кодом?

2. Фибоначчи добавляет предыдущие 2 числа к текущему. Если вы посмотрите на свой код, вы принимаете ввод в num[j] с помощью usinf reader.nextInt() . но затем вы снова изменяете это значение в следующей строке. Вот где вы ошибаетесь. Подумайте об этом так. Получите первое число в num[0]. Пока не выполняйте никаких вычислений. Получаем второе число в num[1]. Теперь, начиная с 2 на подопечных, добавьте два предыдущих значения вместе. Это должно дать вам ответ, который вы ожидаете.

3. Неясно, в чем ваша проблема, но вы никогда не инициируете num массив перед его использованием, что может вызвать проблемы.

4. Проблема в том, что я не понимаю, что означает задача. Но, насколько я знаю, первые 2 целых числа будут использоваться как первое и второе для массива размером 10, который будет отображать результат. Пример: первое целое число: 2 Второе целое число: 3 Результатом будет 2 3 5 8 13…

5. Кроме того, какова цель пользовательского ввода? Похоже, что это нарушит последовательность.

Ответ №1:

Я просто внесу некоторые исправления в ваш код и объясню их:

 int limit = 10;
int[] fib = new int[limit];
// fib[0] = 0;
// fib[1] = 1;
// The two lines above are wrong. Even though the real fibonacci sequence starts
// with 0 and 1, the question asks for the first two terms to come from user
// inputs. Instead, you can initialize them below:

// In your old code, you had "j = 1; j < 2; j  ". However, that only loops once.
// So, have your condition to be j <= 2 instead: (I'm assuming that you want 1
// and 2 and not zero-based because it should print out "Enter number [1]:" and
// "Enter number [2]:"
for (int j = 0; j < 2; j  ) // Not "j < 2"
{
  System.out.print("Enter number "   "["   j   "]: ");
  fib[j] = reader.nextInt(); // not num[j] = ..., it's fib[j] = ...
  // num[j] = fib[j 1]   fib[j 2];
  // You don't need this ^^^
  System.out.println("");
}

// Now you need to fill in the array:
for (int j = 2; j < limit; j  )
{
  fib[j] = fib[j - 1]   fib[j - 2];
}

System.out.print("Result: ");
for(int j = 0; j < limit; j  ) 
{
  System.out.print(fib[j]   " ");
  System.out.print("");
}
  

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

1. Теперь я понял. Извините, просто новичок в использовании массива

Ответ №2:

Здесь у вас есть ряд ошибок. Попробуйте ответить на следующие вопросы:

  1. Какова цель num переменной здесь? Вы используете его для ввода ( num[j] = reader.nextInt(); ), затем вы также используете его для хранения последовательности Фибоначчи ( num[j] = fib[j 1] fib[j 2]; )!!!

  2. Первый цикл выполняется только один раз. Предполагая, что ваши вычисления верны (что не в данном случае!), Он будет иметь значения только для первого числа Фибоначчи.

  3. Наконец, когда вы печатаете числа Фибоначчи, вы не используете num переменную! Почему?

В любом случае, вот решение вашей проблемы. Но это вам не поможет, если вы не понимаете логику, стоящую за этим, и не знаете, какая строка что делает!!!

     int limit = 10;
    int[] fib = new int[limit];
    for (int j = 0; j < 2; j  ) 
    {
        System.out.print("Enter number "   "["   j   1   "]: ");
        fib[j] = reader.nextInt(); // These are the first two fibonacci numbers provided by the user
        System.out.println("");
    }
    System.out.print("Result: ");
    for(int j = 0; j < limit; j   ) 
    {
        if( j > 1 ) // You only calculate from the third Fibonacci, as the first two were given by user
        {
           fib[j] = fib[j-1]   fib[j-2];
        }
        System.out.print(fib[j]   " ");
        System.out.print("");
    }
  

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

1. Извините, я просто новичок в использовании массива. Вот почему у меня было так много ошибок.

2. Не беспокойтесь! Это происходит в начале. Всего наилучшего!