2017-12-31 19 views
0

Bsp: n1 = 100, n2 = 250, out = 233.Finden der größten ungeraden Fibonacci-Zahl in den angegebenen Wertebereichen

Hier muss ich die größte ungerade Fibonacci-Zahl in der gegebenen Reihe von Bereichen finden. Wenn eine ungerade Fibonacci-Zahl nicht existiert, sollte sie 0 ergeben. Ich werde als 50 mal 0 und dann als 10 mal 233 ausgegeben. Wo ist mein Fehler und wie bekomme ich die gewünschte Ausgabe?

public class Fibo { 
    public static void main(String[] args) { 
     try { 
      int n1 = 100; 
      int n2 = 250; 
      int res = 0; 

      if (n1 % 2 == 0) { 
       n1 += 1; 

       for (int i = n1; i < n2; i += 2) { 
        if (isPerfectSquare(5 * i * i + 4) || isPerfectSquare(5 * i * i - 4)) 
         res = i; 
        System.out.println(res); 
       } 
      } 
     } catch(Exception ignored) { 
      System.out.println("0"); 
     } 
    } 

    public static boolean isPerfectSquare(int num) { 
     double sqrt = Math.sqrt(num); 
     int x = (int)sqrt; 
     return Math.pow(sqrt, 2) == Math.pow(x, 2); 
    } 
} 
+0

Bitte formatieren Sie den Code! Ihre IDE sollte alles für Sie einrücken und formatieren. – bcsb1001

+2

* Bitte bearbeiten Sie mich * Sorry; Ich habe keinen Editor für * Akshay * auf meinem Computer installiert, und ich kann auch keinen mit Google finden. Vielleicht solltest du mit deinem Arzt sprechen? –

+0

Ihr Problem wird sich ergeben, wenn Sie den Rat hier befolgen: [Wie kleine Programme zu debuggen] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Sie müssen wirklich lernen, dies selbst zu tun, und jetzt ist es eine gute Zeit zu lernen. Die Ente weiß ... –

Antwort

-1
public static int getLargestOddFibonacciBetween(int lo, int hi) { 
    assert lo <= hi; 

    int f0 = 0; 
    int f1 = 1; 
    int res = -1; 

    while (f1 <= hi) { 
     int val = f0 + f1; 
     f0 = f1; 
     f1 = val; 

     if (val >= lo && val <= hi && isOdd(val)) 
      res = val; 
    } 

    return res; 
} 

private static boolean isOdd(int val) { 
    return (val & 1) == 1; 
} 
+0

Die Antworten sollten eine Erklärung/Argumentation enthalten (z. B. was hat das OP falsch gemacht?), Nicht nur Code - siehe OP's Frage: "Wo ist mein Fehler und wie bekomme ich die gewünschte Ausgabe?" – MyStackRunnethOver

Verwandte Themen