Skip to forum
Benachrichtigungen
Alles löschen

Hilfe bei Java ! $inside

36 Beiträge
13 Benutzer
0 Reactions
2,444 Ansichten
Ghanubis
Joined: 28.11.2007

Original von bm2008
Geht um Iterative Berechung einer Fibonacci Folge;

public static long FibonacciIterativ (int zahl) {
int i;
int[] f= new int[(int)(zahl+1)];
f[0]=0;
f[1]=1;

for (int i=2; i<= zahl; ++i);
f= f[i-1]+f[i-2];

return f[(int)zahl];

Er sagt mir immer das i nicht deklariert ist. Wenn ich dann i definiere sagt er die varibale is doppelt. Achso muss halt wieder ne extra Methode schreiben und die Ein/Ausgabe wieder in der main Methode erfolgen

Oben die Deklaration von i löschen und das ; nach der Klammer der for-Schleife entfernen, dann passts.
/edit: und nochmal überdenken was genau die beiden casts nach int bewirken sollen :P


Antwort
Zitat
FiftyBlume
Joined: 06.06.2010

Original von bm2008
Geht um Iterative Berechung einer Fibonacci Folge;

public static long FibonacciIterativ (int zahl) {
int i;
int[] f= new int[(int)(zahl+1)];
f[0]=0;
f[1]=1;

for (int i=2; i<= zahl; ++i);
f= f[i-1]+f[i-2];

return f[(int)zahl];

Er sagt mir immer das i nicht deklariert ist. Wenn ich dann i definiere sagt er die varibale is doppelt. Achso muss halt wieder ne extra Methode schreiben und die Ein/Ausgabe wieder in der main Methode erfolgen

ja, ist relativ obv, wo der fehler ist:

f= f[i-1]+f[i-2];

Ich nehme an, dass soll innerhalb der Vorschleife stehen, richtig?
ohne klammern{} gilt nur der Teil bis zum nächsten Semikolon als Teil der Vorschleife...k.urz: Lösch das Semikolon nach der Schleife und dann läufts.

oben die Deklaration würd ich auch rausnehmen, ist überflüssig.

Und wie Ghanubis schon gesagt hat, die casts sind überflüssig :-)


Antwort
Zitat

Bring ja vom Prinzip her nichts, weil dann nur noch die halbe Berechnung der Fibonacci Folge vorhanden ist. Jmd noch eine andere Idee. Rekursiv/nach Binet hab ich schon. Mir fehlt halt noch Iterativ.


Antwort
Zitat

Original von FiftyBlume

Original von bm2008
Geht um Iterative Berechung einer Fibonacci Folge;

public static long FibonacciIterativ (int zahl) {
int i;
int[] f= new int[(int)(zahl+1)];
f[0]=0;
f[1]=1;

for (int i=2; i<= zahl; ++i);
f= f[i-1]+f[i-2];

return f[(int)zahl];

Er sagt mir immer das i nicht deklariert ist. Wenn ich dann i definiere sagt er die varibale is doppelt. Achso muss halt wieder ne extra Methode schreiben und die Ein/Ausgabe wieder in der main Methode erfolgen

ja, ist relativ obv, wo der fehler ist:

f= f[i-1]+f[i-2];

Ich nehme an, dass soll innerhalb der Vorschleife stehen, richtig?
ohne klammern{} gilt nur der Teil bis zum nächsten Semikolon als Teil der Vorschleife...k.urz: Lösch das Semikolon nach der Schleife und dann läufts.

oben die Deklaration würd ich auch rausnehmen, ist überflüssig.

Und wie Ghanubis schon gesagt hat, die casts sind überflüssig :-)

obv is obv

oh mann bin ich dämlich


Antwort
Zitat

Bekomme jetzt die Fehlermeldung, nachdem ich das Prog ausführe und eine Zahl eingebe, dass auf Zahlen außerhalb des Arrays zugegriffen werden. Verstehe im Moment nur noch nicht ganz warum.


Antwort
Zitat
Ghanubis
Joined: 28.11.2007

Eventuell beim initialisieren des Arrays versehentlich beim new int[zahl + 1] das +1 rausgelöscht? For-Schleife fängt neuerdings bei 1 oder 0 an? Ohne den Code zu sehen is das son bissel im Trüben fischen ;)
Im Zweifelsfall mal nen Breakpoint setzen und durchsteppen, dann siehst du wann genau da die unerwünschten Zugriffe auftreten. Oder ganz stark ist auch das gute alte Konsolen-Debugging, in die for-Schleife nach der Zeile mit der aktuellen Berechnung mal die Zeile
System.out.println("i: " + i + " f: "+ f);
einfügen und schauen ob dir der Kram direkt am Anfang oder erst am Ende um die Ohren fliegt...


Antwort
Zitat

Original von Ghanubis
Eventuell beim initialisieren des Arrays versehentlich beim new int[zahl + 1] das +1 rausgelöscht? For-Schleife fängt neuerdings bei 1 oder 0 an? Ohne den Code zu sehen is das son bissel im Trüben fischen ;)
Im Zweifelsfall mal nen Breakpoint setzen und durchsteppen, dann siehst du wann genau da die unerwünschten Zugriffe auftreten. Oder ganz stark ist auch das gute alte Konsolen-Debugging, in die for-Schleife nach der Zeile mit der aktuellen Berechnung mal die Zeile
System.out.println("i: " + i + " f: "+ f);
einfügen und schauen ob dir der Kram direkt am Anfang oder erst am Ende um die Ohren fliegt...

Der komplette Code findet sich hier.

http://pastie.org/3012696


Antwort
Zitat
Phati
Joined: 21.10.2006

Original von bm2008

Original von Ghanubis
Eventuell beim initialisieren des Arrays versehentlich beim new int[zahl + 1] das +1 rausgelöscht? For-Schleife fängt neuerdings bei 1 oder 0 an? Ohne den Code zu sehen is das son bissel im Trüben fischen ;)
Im Zweifelsfall mal nen Breakpoint setzen und durchsteppen, dann siehst du wann genau da die unerwünschten Zugriffe auftreten. Oder ganz stark ist auch das gute alte Konsolen-Debugging, in die for-Schleife nach der Zeile mit der aktuellen Berechnung mal die Zeile
System.out.println("i: " + i + " f: "+ f);
einfügen und schauen ob dir der Kram direkt am Anfang oder erst am Ende um die Ohren fliegt...

Der komplette Code findet sich hier.

http://pastie.org/3012696

Zeile 49 ist "falsch". Du willst auf die "StdIn" zugreifen und das wurde nirgens erzeugt. Nimm einfach Scanner, geht am besten:

Scanner eingabe = new Scanner(System.in);
System.out.print("Bitte geben sie eine Zahl ein: ");
zahl = eingabe.nextLong();

Antwort
Zitat
Ghanubis
Joined: 28.11.2007

Du hast an der For-Schleife rumgeschraubt:

for (int i=2; i<= i; i++)

das kann so nichts werden, mach da mal wieder zahl draus ;)


Antwort
Zitat

Original von Phati

Original von bm2008

Original von Ghanubis
Eventuell beim initialisieren des Arrays versehentlich beim new int[zahl + 1] das +1 rausgelöscht? For-Schleife fängt neuerdings bei 1 oder 0 an? Ohne den Code zu sehen is das son bissel im Trüben fischen ;)
Im Zweifelsfall mal nen Breakpoint setzen und durchsteppen, dann siehst du wann genau da die unerwünschten Zugriffe auftreten. Oder ganz stark ist auch das gute alte Konsolen-Debugging, in die for-Schleife nach der Zeile mit der aktuellen Berechnung mal die Zeile
System.out.println("i: " + i + " f: "+ f);
einfügen und schauen ob dir der Kram direkt am Anfang oder erst am Ende um die Ohren fliegt...

Der komplette Code findet sich hier.

http://pastie.org/3012696

Zeile 49 ist "falsch". Du willst auf die "StdIn" zugreifen und das wurde nirgens erzeugt. Nimm einfach Scanner, geht am besten:

Scanner eingabe = new Scanner(System.in);
System.out.print("Bitte geben sie eine Zahl ein: ");
zahl = eingabe.nextLong();

Die Eingabe funktioniert. Ist jetzt bei dem Code nicht zu sehen aber habe dafür ne extra Methode


Antwort
Zitat

schleife bis f.length ?(


Antwort
Zitat

Original von njaa
schleife bis f.length ?(

???


Antwort
Zitat

Ist das noch aktuell? Könntest du evtl. mitteilen für was für eine "Veranstaltung" das sein soll? Ich will dir nicht zu nahe treten aber du scheinst die Lösung von fifty nicht zu verstehen, evtl. daran weil ihr es eher so machen sollst wie MisterJ, also eher "simpel" für einen Anfänger.

Falls du es erklären musst bei Lehrer/Prof/Tut dann solltest du es wirklich verstehen was da passiert, auch in deinem Interesse.

Btw. fasse ich nicht das ich sowas schreibe, ich werde alt und klinge schon wie mein Vater. ;(


Antwort
Zitat

Original von more007
Ist das noch aktuell? Könntest du evtl. mitteilen für was für eine "Veranstaltung" das sein soll? Ich will dir nicht zu nahe treten aber du scheinst die Lösung von fifty nicht zu verstehen, evtl. daran weil ihr es eher so machen sollst wie MisterJ, also eher "simpel" für einen Anfänger.

Falls du es erklären musst bei Lehrer/Prof/Tut dann solltest du es wirklich verstehen was da passiert, auch in deinem Interesse.

Btw. fasse ich nicht das ich sowas schreibe, ich werde alt und klinge schon wie mein Vater. ;(

Ist noch aktuell ...
Versteh auch nich ganz was er meint. Hab 2 Wochen Zeit mir dann den Code anzuschauen und zu verstehen was da überhaupt passiert. Hab auch schon Interesse daran zu verstehen was da passiert. Die nächsten Aufgaben werden ja nich leichter !


Antwort
Zitat

Original von MisterJ

quer = 0;
while(zahl > 0) {
    quer += zahl % 10;
    zahl /= 10;
}
return quer;

Für deine Aufgabe 1 solltest du mal hier drüber nachdenken, wenn du verstehst was da passiert, ist die Aufgabe ein Kinderspiel.

Was passiert also wenn jemand eine Zahl eingibt.

Am besten nimmst dir eine Beispiel Zahl und versuchst dir das zu visualisieren.

Wenn dir irgendwas unklar ist, also wie gesagt ich weiß nicht wo du stehst, wie += oder /= nachfragen oder googlen wie auch immer. :)


Antwort
Zitat
MisterJ
Joined: 26.03.2006

Für die fibonacci aufgabe kannst du dir auch den ganzen array kram sparen.

Du brauchst ja nicht alle fibonacci zahlen, sondern nur die letze.

Um die jeweils aktuelle zu berechnen musst du dir also nur die beiden davor merken und dann N mal die aktuelle neue berechnen und alles "eins weiter" schieben.


Antwort
Zitat