Две части моей java кодировки не связаны - PullRequest
0 голосов
/ 12 июля 2020

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

import java.util.Scanner;

public class Q1 {
     static int fib(double n){ 
         int f[] = new int[(int) (n + 1)]; 
         int i; 
         int num1 = 0;
        f[0] = num1; 
         if (n > 0) { 
            int num2 = 0;
            f[1] = num2; 
             for (i = 2; i <= n; i++) { 
                 f[i] = f[i - 1] + f[i - 2]; 
            } 
        } 
        return f[(int) n]; 
    } 
     public static void main(String args[]) {
            
            Scanner scan = new Scanner(System.in);
            System.out.print("Enter the first f: ");
            double num1 = scan.nextDouble();
            System.out.print("Enter the second f: ");
            double num2 = scan.nextDouble();
            System.out.print("Enter the time period: ");
            double n = scan.nextDouble();
            
            System.out.println(fib(n)); 
     }
}

Ответы [ 3 ]

0 голосов
/ 12 июля 2020

Если можно, я бы порекомендовал вам go по некоторым основам о переменных в Java. Ваша функция fib не может использовать double num1 / num2, как они определены в main. Вместо этого вы инициализировали новые int num1 / num2 = 0 переменные внутри fib, вы инициализируете их с помощью 0 , а затем вы запускаете сумму Фибоначчи, в то время как на самом деле вы делаете 0 + 0 постоянно.

0 голосов
/ 12 июля 2020

Почему fib имеет аргумент double, когда он целиком использует целочисленную арифметику c?

Что может означать последовательность Фибоначчи для нецелого аргумента?

Все эти приведения и вспомогательные переменные go убираются, если вы используете int.

 static int fib(int n) { 
     int f[] = new int[n + 2]; 
     f[0] = f[1] = 0; 
     for (int i = 2; i <= n; i++) { 
        f[i] = f[i - 1] + f[i - 2]; 
     } 
     return f[n];
  } 

Обратите внимание, что вам не нужен явный тест n > 0; об этом позаботится i <= n в условии l oop.

Здесь не показано - использование типа double в основной подпрограмме также следует заменить на int. И неясно, что вы собираетесь делать с num1 и num2. Они определенно не связаны с теми переменными, которые сейчас не существуют, которые были объявлены и установлены в ноль в fib.

0 голосов
/ 12 июля 2020

Вы можете внести следующие изменения в код:

  1. Передайте num1 и num2 в вызове метода fib:

    System.out.println(fib(n,num1,num2)); 
    
  2. Используйте эти num1 и num2 и назначьте их f [0] и f [1] в функции fib

    static int fib(double n, double num1, double num2){ 
         int f[] = new int[(int) (n + 1)]; 
         int i; 
         f[0] = (int)num1; 
         if (n > 0) { 
            f[1] = (int)num2; 
             for (i = 2; i <= n; i++) { 
                 f[i] = f[i - 1] + f[i - 2]; 
            } 
        } 
        return f[(int)n]; 
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...