# Java Eclipse Iterer



## Anne1991 (22. Jan 2012)

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


----------



## Gast2 (22. Jan 2012)

Java von Kopf bis Fuß: Amazon.de: Kathy Sierra, Bert Bates, Lars Schulten, Elke Buchholz: Bücher
The Java™ Tutorials

Bitte.


----------



## diggaa1984 (22. Jan 2012)

oder Jobforum :bahnhof:


----------



## Anne1991 (22. Jan 2012)

das hilft mir nicht wirklich weiter...aber Danke


----------



## Gast2 (22. Jan 2012)

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 (22. Jan 2012)

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 (22. Jan 2012)

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)


----------



## Anne1991 (22. Jan 2012)

sieht jetzt so aus


----------



## Anne1991 (22. Jan 2012)

```
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


----------



## Anne1991 (22. Jan 2012)

so weit so gut aber was soll ich jetzt mit next und hasnext anstellen?


----------



## Marcinek (22. Jan 2012)

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.


----------



## Anne1991 (22. Jan 2012)

Marcinek hat gesagt.:


> 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.


 wie mache ich das???

PS:sorry ich hatte bis jetzt nur 2h java programmierung


----------



## diggaa1984 (22. Jan 2012)

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()
> ...



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:

```
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 (22. Jan 2012)

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


```
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 (22. Jan 2012)

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!


----------



## Anne1991 (22. Jan 2012)

in 6.11.8 wird es beschreibe ich kann damit nur leider nix anfangen


----------



## ARadauer (22. Jan 2012)

Anne1991 hat gesagt.:


> in 6.11.8 wird es beschreibe ich kann damit nur leider nix anfangen



Mit so einer Aussage können wir leider nix anfangen. Hast du eine konkrete Frage?


----------



## Anne1991 (22. Jan 2012)

Könntest du bitte einfach meinen Code abändern das es für aufgabe 1 stimmt und mir dann daneben die erklärungen machen mit //macht...


----------



## Kiri (22. Jan 2012)

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



```
public class Aufgabe4 {

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


```
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.");
    }
    
}
```


----------



## Noctarius (23. Jan 2012)

Das es immer wieder Leute gibt, da bei sowas einfach eine Lösung posten... unglaublich...


----------

