Java Eclipse Iterer

Anne1991

Mitglied
Ich habe überhaupt keine Ahnung von Java, soll folgendes bewältigen:( :

Aufgabe 4: Fibonacci-Zahlen ohne Arrays

1) Schreibt eine Klasse FiboIterator, welche das Interface Iterator
(Iterator (Java Platform SE 6)) implementiert. Von 1 angefangen
soll next() die jeweils nächste Fibonacci-Zahl zurückgeben. Die Metohode hasNext() stellt sicher,
dass die nächste Zahl kleiner als die maximal darstellbare Zahl ist (Integer.MAXINT) und kein
Überlauf passiert.

2) Macht euch mit der Interpretation der Fibonacci-Folge als Kaninchenpopulation vertraut (z.B.
Fibonacci-Folge ? Wikipedia). Erzeugt die
Klasse Populator, welche von FiboIterator erbt. Hier soll bei jeder Iteration die Anzahl der
Jungtiere zufällig um bis zu 50% vergrößert oder verkleinert werden.

3) Erstellt eine Klasse Game. Instanzen dieser Klasse werden mit Angabe der gewünschten Anzahl
an Mitspielern erzeugt. Dann wird die entsprechende Menge Populatoren erzeugt, auf die so lange
next() aufgerufen wird, bis eine der Populationen mehr als 100 Tiere zählt (ihr könnt hierfür die
hasNext() Methode in Populator anpassen). Bei jeder Iteration soll der Zuwachs und die daraus
resultierende Größe der Population ausgegeben werden. Überlegt euch also auch eine passende
und übersichtliche Ausgabe (Ihr könnt dafür die Methode printf() benutzen).

Vielen Dank für jede hilfe :oops:
 
G

Gast2

Gast
Naja, was willst du denn?

Willst du lernen wie du die Aufgabe lösen kannst? Dann schau dir meine beiden Links (und später noch viele weitere an).
Willst du dass dir jemand die Aufgabe löst? Dann schau ins Jobforum.
 

Anne1991

Mitglied
also ich weiß wie die fibonacci zahlen funktionieren:
0+1 =1
1+1 =2
1+2 =3
2+3 =5....

ich weiß nur nicht was es genau mit next() und hasNext() auf sich hat? Bzw wie ich das ganze anfangen soll:autsch:
 

diggaa1984

Top Contributor
Du weisst wie die Reihenfolge der Zahlenreihe aussieht, du hast mit der Aufgabenstellung eine obere Grenze von Integer.MAX_VALUE (wo genau die Grenze liegt spielt gar keine Rolle).

Von 1 angefangen soll next() die jeweils nächste Fibonacci-Zahl zurückgeben. Die Metohode hasNext() stellt sicher, dass die nächste Zahl kleiner als die maximal darstellbare Zahl ist (Integer.MAXINT) und kein Überlauf passiert.

Nun formuliere doch mal den Ablauf mit deinen Worten. Wenn man sieht dass du die Umsetzung zumindest richtig formulieren kannst ist man gewillter zu helfen (gern auch Pseudocode)
 
Zuletzt bearbeitet:

Anne1991

Mitglied
Java:
public class Aufgabe4 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a=0; //startwert
		int b=1; //startwert
		int c=a; //hilfsvariable
		int ergebnis=a+b;
		
		
		while (ergebnis<100) {
			System.out.println(ergebnis);
			
			c=a;
			a=b;
			b=c+b;
			
			ergebnis =a+b;
			
			
		}
	}

}


console gibt aus:


1
2
3
5
8
13
21
34
55
89
 
M

Marcinek

Gast
Wenn du es jetzt noch schaffst die EDIT Taste sinnvoll zu nutzen kommen wir der Sache schon sehr nah.

Du musst nun eine methode "next" implemtieren, die genau einen Schleifendurchlauf macht

und dann das ergebnis zurückgibt.

Die Werte A B C musst du dann als Objektattribute definieren.
 

diggaa1984

Top Contributor
ist doch schonmal nen brauchbarer anfang ...

Schreibt eine Klasse FiboIterator, welche das Interface Iterator (Iterator (Java Platform SE 6)) implementiert
Was ein interface ist weisst du!? Das schreibt dir zumindest vor, dass deine Klasse FiboIterator ein paar Methoden umsetzen MUSS. Diese Methoden des Interfaces sind fest vorgegeben und daran musst du dich halten. Da gibts genau 3 Stück:
boolean hasNext()
Returns true if the iteration has more elements.

E next()
Returns the next element in the iteration.

void remove()
Removes from the underlying collection the last element returned by the iterator (optional operation).

und damit muss deine Klasse zwangsweise schon die geforderten Methoden bereitstelle. Nun musst du ja nur dein Code den du schon hast, sinnvoll in den Methoden unterbringen.

Am Ende sollte sowas funktionieren:
Java:
public class Aufgabe4 {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        FiboIterator fibIt = new FiboIterator();
        System.out.println(fibIt.next()); //gibt 1 aus
        System.out.println(fibIt.next()); //gibt 2 aus
        System.out.println(fibIt.next()); //gibt 3 aus etc
    }
}

man könnte noch überlegen dem Konstruktor der FiboKlasse obere (Integer.MAX_VALUE) und untere (1) Grenze mitzugeben. Die Klasse FiboIterator zu schreiben, welche mit obigem Code klappt, wäre erstmal dein nächstes Ziel.

Wichtig eben das Implementieren des Iterator-Interfaces!
 

Anne1991

Mitglied
ne ich weiß nicht was ein interface ist
ich versteh nix außer das ich nur Blödsinn mache :(

Java:
public class Aufgabe4 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		FiboIterator fibIt = new FiboIterator();
        System.out.println(fibIt.next()); //gibt 1 aus
        System.out.println(fibIt.next()); //gibt 2 aus
        System.out.println(fibIt.next()); //gibt 3 aus 

		int a=0; //startwert
		int b=1; //startwert
		int c=a; //hilfsvariable
		int ergebnis=a+b;
		
		
		while (ergebnis<100) {
			System.out.println(ergebnis);
			
			c=a;
			a=b;
			b=c+b;
			
			ergebnis =a+b;
			
			
		}
	}

}


jetzt hab ich drei 2en mehr in der ausgabe
 

diggaa1984

Top Contributor
hat besser angefangen als gedacht, naja hier hast du was für interfaces und klassen. Die Mühe musst dir schon machen, dann sollte dieser Teil der Aufgabe eigentlich kein Problem darstellen!

Java ist auch eine Insel - 6.11 Schnittstellen

ich versteh nix außer das ich nur Blödsinn mache

wenn der erste code tatsache von dir war, war er so blöd ja nicht, aber ich zweifel grad das du den selbst geschrieben hast!
 
Zuletzt bearbeitet:

Kiri

Bekanntes Mitglied
Das wäre eine mögliche Lösung für 1):


Java:
public class Aufgabe4 {

    public static void main(String[] args) {
        FiboIterator fib = new FiboIterator();
        int i = 0;
        while(fib.hasNext()){
            System.out.println(fib.next() + "");
        }
    }
}

Java:
public class FiboIterator implements Iterator{

    private int a=0; //startwert
    private int b=1; //startwert
    private int c=a; //hilfsvariable
    
    @Override
    public boolean hasNext() {
        if((b+a) < Integer.MAX_VALUE && (b+a) > 0){
            return true;
        }else{
            return false;
        }
    }

    @Override
    public Object next() {
        c=a;
        a=b;
        b=c+b;
        return b;
    }

    @Override
    public void remove() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
}
 

Neue Themen


Oben