# Null Eins Spiel



## El Kabong (18. Jun 2010)

Hallo!

Ich hab folgende Aufgabenstellung:



> Ein Spieler des NullEinsSpiels hat einen Namen und kann ein Spiel spielen, das er entweder gewinnt oder verliert.
> Definieren Sie eine Klasse, die die Spielbilanz eines Spielers führt.
> Diese Klasse soll über eine Methode spiel(boolean gewonnen) verfügen, mit der angeben werden kann,
> ob der Spieler gewonnen oder verloren hat. Außerdem soll die Anzahl der insgesamt gespielten Spiele, der insgesamt
> ...



Nun, was ich bisher hinbekommen habe ich nicht sehr viel.


```
public class NullEinsSpiel {
public static void main(String[] args) {

	spiel();
	
}

	public static void spiel() {
	
	int zaehler = 0;
	int zahl = (int)((Math.random()) *  2 + 0);
	
	if (zahl == 0) {
		System.out.println(true);
		zaehler = zaehler++;
		
	} else {
		System.out.println(false);
		zaehler = zaehler++;
	
	}

	System.out.println(zaehler);
	}
	}
```


Meine Idee war es das wenn die Zahl 0 rauskommt das der Spieler dann gewinnt und wenn eine 1 rauskommt das der Spieler dann eben verliert. Gut, dass ich die 0 und 1 rausbekomme hab ich hinbekommen. Allerdings hab ich Schwierigkeiten mit dem Zähler.
In der Aufgabenstellung steht ja das jedes Spiel gezählt werden muss. Ich dachte mir dann einfach das nach jedem ausgeben von true oder false der Zähler um eins erhöht wird. Nur leider funktioniert das nicht so ganz wie ich es mir erhofft hatte.


Danke für die Hilfe!



Gruß,
El Kabong


----------



## Gast2 (18. Jun 2010)

Ein Spiel ist ein Spiel... Du sollst aber mehrere Spiele (oder zumindest Durchläufe) haben...


```
public class NullEinsSpiel {
	private int alleSpiele = 0;
	private int gewonneneSpiele = 0;

	public static void main(String[] args) {
		NullEinsSpiel nes = new NullEinsSpiel();
		
		// 10 mal spielen
		for (int i = 0; i < 10; i++) {
			
			// setzte mit deiner zufall methode gewonnen oder verloren
			int zahl = (int) ((Math.random()) * 2 + 0);
			if (zahl == 0) {
				nes.spiel(true);
			} else {
				nes.spiel(false);
			}
		}

		// noch 10 mal spielen - diesmal mit etwas schönerer Zufallsfuntion
		Random rnd = new Random();
		for (int i = 0; i < 10; i++) {
	        nes.spiel(rnd.nextBoolean());
		}
		
		System.out.println("Alle Spiele: "+nes.getAlleSpiele());
		System.out.println("Gewonnen Spiele: "+nes.getGewonneneSpiele());
		System.out.println("Verlorene Spiele: "+(nes.getAlleSpiele()-nes.getGewonneneSpiele()));
	}

	public void spiel(boolean gewonnen) {
		alleSpiele++;
		if (gewonnen) {
			gewonneneSpiele++;
		}
	}

	public int getAlleSpiele() {
		return alleSpiele;
	}

	public int getGewonneneSpiele() {
		return gewonneneSpiele;
	}

}
```

Versuch das mal nachzuvollziehen - und die Statistik/Gewinnquote und den Spieler dann dazu zu bauen


----------



## El Kabong (19. Jun 2010)

Hallo!

Bei der Methode spiel(boolean gewonnen) muss ja ein Parameter übergeben werden. rnd.nextBoolean() ist dieser Parameter, richtig?


Ich hab jetzt versucht den Spieler einzubauen und die Quote. 


```
import java.util.Random;

public class NullEinsSpiel {
	private double alleSpiele = 0;
	private double gewonneneSpiele = 0;
	private double quote;
	private String name;

	public static void main(String[] args) {
		NullEinsSpiel nes = new NullEinsSpiel();
		NullEinsSpiel name = new NullEinsSpiel("Mr Floppy");

		for (int i = 0; i < 10; i++) {

			int zahl = (int) ((Math.random()) * 2 + 0);
			if (zahl == 0) {
				nes.spiel(true);
			} else {
				nes.spiel(false);
			}
		}

		// noch 10 mal spielen - diesmal mit etwas schönerer Zufallsfuntion
		Random rnd = new Random();
		for (int i = 0; i < 10; i++) {
			nes.spiel(rnd.nextBoolean());
		}

		System.out.println("Name des Spielers: " + name.name);
		System.out.println("Alle Spiele: " + nes.getAlleSpiele());
		System.out.println("Gewonnen Spiele: " + nes.getGewonneneSpiele());
		System.out.println("Verlorene Spiele: "
				+ (nes.getAlleSpiele() - nes.getGewonneneSpiele()));
		System.out.println("Quote: " + nes.getGewinnQuote());

	}

	public void spiel(boolean gewonnen) {
		alleSpiele++;
		if (gewonnen) {
			gewonneneSpiele++;
		}
	}

	public double getAlleSpiele() {
		return alleSpiele;
	}

	public double getGewonneneSpiele() {
		return gewonneneSpiele;
	}

	public double getGewinnQuote() {
		this.quote = gewonneneSpiele / alleSpiele * 100;
		return quote;
	}

	public NullEinsSpiel(String name) {
		this.name = name;
	}

	public NullEinsSpiel() {
		
	}
}
```


*EDIT: * Ich musste den Datentyp int in double ändern, da ich ansonsten bei der Quote immer eine 0 rausbekommen würde. 



Gruß,
El Kabong


----------



## Gast2 (19. Jun 2010)

Jetzt stehen [c]name[/c] und [c]nes[/c] aber in keinem Zusammenhang.

Wenn du es so machen möchtest dann doch:

```
public static void main(String[] args) {
        NullEinsSpiel nes = new NullEinsSpiel("Mr Floppy");
        //... und der Rest
    }
```

Und dann solltest du auch eine [c]getName()[/c] anbieten und die nutzen:

```
public String getName(){
  return name;
}
```

und 


```
System.out.println("Name des Spielers: " + nes.getName());
```

Ich denke mal für eine Hausaufgabe sollte das schon langen. Wenn man etwas weiterdenkt könnte man sich fragen ob der Name des Spielers wirklich eine Eigenschaft des Spiels ist. Und auch ob die Anzahl der Gespielten Spiele Eigenschaft des Spiel sind. Wohl eher nicht - aber das würde einiges an Umbauarbeit bedeuten.


----------



## El Kabong (26. Nov 2010)

Ich hab diese Aufgabe zum Spaß nochmal bearbeitet. Ich wollte jetzt noch eine Niederlagenquote einbauen, jedoch wird die im meinen Programm nicht ausgerechnet und ich weiß nicht wieso. 
Echt zum verrückt werden.



```
package Klassen;

import java.util.Scanner;

public class NullEinsSpiel {

	static Scanner sc = new Scanner(System.in);

	static int counterGewonnen = 0;
	static int counterVerloren = 0;
	static int gespielteSpiele = 0;
	static int counterSpiele = 0;
	static double gewinnQuote;
	static double verlierQuote;
	static String spielername;

	public static void spiel(boolean gewonnen) {

		System.out.println("Bitte geben Sie ihren Namen ein : ");
		String spielername = sc.next();
		counterSpiele++;
		if (gewonnen) {
			System.out.println("Spielername : " + spielername);
			counterGewonnen++;
			System.out.println("Glückwunsch, gewonnen! ");
			System.out.println("Anzahl gewonnener Spiele : " + counterGewonnen);
			gewinnQuote = counterGewonnen / counterSpiele * 100;
			System.out.println("Ihre Gewinnquote liegt bei : " + gewinnQuote);
			System.out.println("Sie haben bereits " + counterSpiele
					+ " Spiel(e) gespielt.");

		} else {
			System.out.println("Spielername : " + spielername);
			counterVerloren++;
			System.out.println("Leider verloren! ");
			System.out.println("Anzahl verlorener Spiele : " + counterVerloren);
			verlierQuote = counterVerloren / counterSpiele * 100;
			System.out.println("Ihre Verlierquote liegt bei : " + verlierQuote);
			System.out.println("Sie haben bereits " + counterSpiele
					+ " Spiel(e) gespielt.");
		}

	}

	public static void main(String[] args) {

		NullEinsSpiel.spiel(true);
		NullEinsSpiel.spiel(true);
		NullEinsSpiel.spiel(false);

	}
}
```


----------



## Gast2 (26. Nov 2010)

```
verlierQuote = (double)counterVerloren / counterSpiele * 100;
```

Sollte da weiterhelfen

Vergleiche auch:


```
public static void main(String[] args) {
 
      double a;
      int i = 1;
      int j = 3;
      
      a = i / j * 100;
      System.out.println(a);
      a = (double)i / j * 100;
      System.out.println(a);
 
    }
```


----------



## El Kabong (26. Nov 2010)

Okay danke!
Aber da frag ich mich warum 
	
	
	
	





```
gewinnQuote = counterGewonnen / counterSpiele * 100;
```
 das funktioniert hat, oder hat das nur funktioniert da immer 100% rausgekommen sind?


----------



## Gast2 (27. Nov 2010)

El Kabong hat gesagt.:


> Okay danke!
> Aber da frag ich mich warum
> 
> 
> ...



Ja richtig, ist mir letzten mal drauf gucken durch die Lappen gegangen. Musst dir mal nen bisserl was anlesen zu int, long, double, float und den darauf implementierten algebraischen Funktionen.


----------

