Erste Schritte Fibanocci-Reihen in Java umsetzen

CodeOcean

Mitglied
Hi!

Erstmal: Eine Fibanocci-Reihe, ist eine Zahlen-Reihe bei der immer die Summe der zwei vorangehenden Zahlen, die nächste Zahl ergibt.

Bsp: 0 1 1 2 3 5 8 13 21...

Genau diese wollte ich in Java umsetzen. Dazu sollte ich sagen, dass ich momentan mit dem Buch
"Einführung Java mit BlueJ" lerne. Meiner Meinung, wenn ich das schon haben kann, nach, ist das Buch gut geeignet um für eine solides Grundwissen zu sorgen. Ausserdem komme ich gut mit dem Schreibstil des Autors klar.

Nun bin ich bei Kapitel 6 angelangt, und sollte die besagt Fibanocci-Reihe in ein Programm umwandeln, dass die Zahlen auf der Konsole ausgibt.

Mein Ansatz sah so aus:
Java:
public class zahlen
{
    public static void main(String[] args)
    {
            int wert = 50; 
            int[] zahl = new int[wert];
            for(int i = 0; i == wert; i++)
            { 
              for(int j = 0; j == (zahl[wert -1] + zahl[wert -2]); j++)
              {
                zahl[i] = j; 
                
                if( (j == 0) || (j == 1) ) 
                {
                    System.out.println(j + " "); 
                }
                else 
                {
                    j = zahl[i - 1] + zahl[i - 2]; 
                    System.out.println(j); 
                }
               
              }
            }
    }
}

Es lässt sich zwar kompilieren, aber auf Abruf lässt sich die Konsole nicht blicken. 🙂
Dann hab ich die Lösung, auf beiliegender Buch-DVD, rausgesucht:

Java:
public class Fibonacci
{
    public static void main(String[] args)
    {
        long f1 = 0; 
        long f2 = 1;

        for(int i = 1; i <= 50; i++)        
        {         
            System.out.println("Die " + i + ". Zahl ist " + f1); 
           
            long temp = f1 + f2; 
            f1 = f2;
            f2 = temp;
        }
        
    }
}

Ich war etwas baff, als ich gesehen hab, mit wie wenig Code er das umgesetzt hat.
Vorallem dieser Gedankengang:
Java:
  long temp = f1 + f2; 
            f1 = f2;
            f2 = temp

So, jetzt zur eigentlichen Frage(Anfängerfrage): Ich hab das jetzt zwar verstanden, aber bin eben nicht selbst drauf gekommen. Ich lerne seit 3 Wochen Java, und frag mich deshalb, ob ich das hätte wissen müssen. Also, ob ich den Gedankengang selbst hätte haben müssen. Ich hab Das Buch durch gearbeitet und so gut wie alles behalten. Also das Grundwissen, das ich dazu gebraucht hätte, war da.

Ging es euch am Anfang auch so?

LG
 
Im prinzip formuliert er in den 3 zeilen mit dem tausch nur aus, was man sich im kopf denkt ;-)

wenn du den algorithmus verstanden hast, dann musst du nur versuchen ihn in java code umzusetzen.

das geht mal mehr mal weniger schnell,leicht und gut.




dafür braucht es einfach übung ;-)
je mehr man macht, desto mehr techniken lernst du das umzusetzen, was deine zielsetzung ist.
wenn du die aufgabe jetzt gestellt bekommen würdest, dann könntest du einen ganz neuen ansatz probieren 🙂
 
Ich bin selber noch Anfänger und habe zwischendrinn selber mal aufgehört, weil ich gedacht hab ich blick das ja sowiso nicht. Allerdings ging alles irgendwie besser als ich wieder angefangen habe. Ich denke man braucht einfach Zeit alles zu kapieren und braucht Ehrgeiz.
Also einfach weiter machen ! Es gibt Leute die würden das sofort kapieren, aber vllt etwas anderes nicht was du einfach besser verstehst. Insofern mach das Buch fertig und such dir am besten irgendwelche Programmieraufgaben, die für dich selber nützlich sein könnten. Aber fang wirklich leicht an. Hab mich bei meinem ersten Programm auch überschätzt.
 
nein, hämische bemerkungen wären hier falsch 🙂

jeder hat mal angefangen und kann sich sicher zurückerinnern, wie das damals war.

wichtig ist einfach, dass man den willen haben muss das zu verstehen und sich komplexen lösungswegen zu öffnen. wenn man öfter verschiedene aufgaben vor sich hat und sich dazu lösungen ausdenkt und diese versucht in code umzuwandeln, dann lern man immer mehr dazu 🙂

der eine lernt das schneller, der andere langsamer, aber solang man am ball bleibt und sich damit beschäftigen will, sehe ich da keine probleme
 
Nein, keine Sorge, du hättest das nicht selber wissen müssen. Du stellst zu viele Erwartungen an dich.

Es gibt einfach "Patterns" die man über die Zeit lernt und kann dann sowas wie du oben gesehen hast, dann irgendwo anders anwenden. (Also dass man eine Zwischenvariable verwendet, bspw.)

Andere Sprachen haben wieder ganz andere "Pattern", z.B. Funktionale Programmiersprachen (Haskell [vorsicht 😉]).

Du kannst ja mal versuchen Fibonacci rekursiv zu definieren, das ist nämlich noch kürzer und schöner.

Außerdem sind 3 Wochen nichts. null. niente. nada. zero. Das kannst lockerer sehen.
 
Bleib mal ganz ruhig, es ist völlig normal, dass man erst einmal viel zu kompliziert denkt.

Auch heute noch, nach über 10 Jahren (mehr oder weniger) professioneller Java-Programmierung lerne ich neue Techniken und Tricks, oder entdeckt neue Funktionen in den Java-APIs. Ich schätze mal, über die Hälfte aller Java-Programmierer würde für ein Programm zum Testen auf Palindrome (Wörter, die von hinten gelesen das gleiche ergeben wie von vorn) anfangen, mit irgendwelchen Schleifen zu hantieren, auch wenn es viel einfacher geht:

Java:
String s = "RELIEFPFEILER";
boolean isPalindrome = s.equals(new StringBuilder(s).reverse().toString());

Wichtig ist, dass man nicht stehen bleibt, sondern immer nach neuen, kreativen Lösungen sucht. Guten fremden Code zu lesen hilft, einige gute Bücher helfen, Seiten wie dieses Forum, stackoverflow.com oder codereview.stackexchange.com helfen, aber den Blick dafür kann man sich nur durch eigenes Programmieren erwerben. Und das ist eine gute Sache: Wenn man Programmieren lernen könnte wie Gehwege pflastern, und Programmierer nach eins, zwei Jahren schon alles wissen würden, was man übers Programmieren wissen kann, wäre unsere Arbeit nicht so interessant und begehrt.
 
Ich schätze mal, über die Hälfte aller Java-Programmierer würde für ein Programm zum Testen auf Palindrome (Wörter, die von hinten gelesen das gleiche ergeben wie von vorn) anfangen, mit irgendwelchen Schleifen zu hantieren, auch wenn es viel einfacher geht:
haha... bei der Frage nach dem Umdrehen eines Strings kommen schon einige immer auf nette Gedanken ;-) mhm Palindrom noch nicht bei Bewerbungen ausprobiert 😀
 

Zurück
Oben