# Math.random und Strings



## BaxterStockman (24. Nov 2010)

Hai, 

ich will ne Methode erstellen die Stein, papier oder schere ausgibt, dafür hab ich MAth.random benutzt 

hier der code 

```
public class Aufgabe16 {

public static void main (String[] args ) {
	long schere=1, stein=0, papier=2;
	  
String sch = (new Long (schere)).toString();
String st = (new Long (stein)).toString();
String p = (new Long (papier)).toString();
//System.out.println("Der PC trifft nun eine Wahl");

int wahl = (int) (Math.random()*3);
System.out.println(wahl);

	
}

}
```

Er gibt jetzt aber nur Zahlen aus, also entweder 0, 1 oder 2. 

Ich wollte aber dass er stein, papier oder schere ausgibt, was ich ja auch davor mit long definiert habe, 

was fehlt hier ?


----------



## ARadauer (24. Nov 2010)

was soll ausgegeben werden? stein oder die zahl?

```
String[] auswahl = { "Stein", "Schere", "Papier" };  
      // String sch = (new Long (schere)).toString(); ich frag gar nicht ;-)
      System.out.println("Der PC trifft nun eine Wahl");
      int wahl = (int) (Math.random() * auswahl.length);
      System.out.println(auswahl[wahl]);
```


----------



## Sempah (24. Nov 2010)

BaxterStockman hat gesagt.:


> Ich wollte aber dass er stein, papier oder schere ausgibt, was ich ja auch davor mit long definiert habe,




du hast nur Variablen mit den Namen stein, papier und schere vom Typ long definiert und nicht bspw. Strings mit den Werten stein, papier und schere.

Btw. 
	
	
	
	





```
String sch = (new Long (schere)).toString();
```
sowas schaut grausig aus ...


----------



## VfL_Freak (24. Nov 2010)

Moin,

vlt mal zur Erklärung  .... mit 


> (new Long (schere)).toString();


wird lediglich der Wert der long-Variablen mit Namen "schere" (hier also '1') in einen String überführt (also wiederum "1"), nicht jedoch der _NAME_ der Variable !!

Du musst es schon so umsetzen, wie weiter oben von _ARadauer_ beschrieben !

Gruß
Klaus


----------



## BaxterStockman (25. Nov 2010)

ok, das funktioniert schon mal, danke, 

aber ich will ja, dass die Strings also Stein, Papier, Schere mit den Zahlen 0,1,2 belegt werden. 

D.h. dass ich dann später nur noch den Gewinner des Spiels anhand der Zahlen festlegen kann. Sprich wenn ich das von Arauder umsetze, dann hab´ ich ja keine Zahlen, sondern nur Namen


----------



## bygones (25. Nov 2010)

```
public static void main(String[] args) {
        System.out.println(S.Papier + " --> " + S.Papier.ordinal());
        System.out.println(S.Schere + " --> " + S.Schere.ordinal());
        System.out.println(S.Stein + " --> " + S.Stein.ordinal());
    }

    enum S {
        Stein, Schere, Papier
    }
```

abgesehen davon ... richtig coole Nerds spielen: rock paper scissors lizard spock !


----------



## Andi_CH (25. Nov 2010)

Hm, er zeigt dir nur, wie du am einfachsten von einer Zahl auf den enstprechenden String zur Ausgabe kommst ....

Alles andere liegt an dir


----------



## Landei (25. Nov 2010)

Ich würde eine objektorientiertere Variante vorschlagen:


```
import java.util.Random;
public class Aufgabe16 {
  
   public enum Auswahl { Stein, Schere, Papier };
   private final static Random random = new Random();
 
   public static void main (String[] args ) {
      System.out.println(auswahl());
   }
  
   public static Auswahl auswahl() {
       Auswahl[] values = Auswahl.values();
       return values[random.nextInt(values.length)];
   }
}
```


----------



## ARadauer (25. Nov 2010)

http://yotamak.blogs.com/.a/6a00d8341c145e53ef0115702a7997970b-800wi


----------



## Andi_CH (25. Nov 2010)

Ih muss präzisieren:



BaxterStockman hat gesagt.:


> aber ich will ja, dass die Strings also Stein, Papier, Schere mit den Zahlen 0,1,2 belegt werden.



Es ist unmöglich eine Zahl mit einem String zu "belegen";
Aber es ist möglich über die Zahl zu einem String zu kommen -> ARadauer zeigte ja wie!


```
String[] auswahl = { "Stein", "Schere", "Papier" };  
System.out.println(auswahl[0]); // Stein
System.out.println(auswahl[1]); // Schere
System.out.println(auswahl[2]); // Papier
```

Ausserdem ist in seiner Antwort die variable "wahl" mit dem gezogenen Wert belegt, den du für die Enscheidung wer nun gewonnen hat benutzen kannst.


----------



## Andi_CH (25. Nov 2010)

ARadauer hat gesagt.:


> http://yotamak.blogs.com/.a/6a00d8341c145e53ef0115702a7997970b-800wi



:lol:

Ersetz die Kreise durch Klassen und du hast schon beinahe das vollständige UML Diagramm der Software an der ich im Moment arbeiten muss :-(


----------



## ARadauer (25. Nov 2010)

stimmt



> D.h. dass ich dann später nur noch den Gewinner des Spiels anhand der Zahlen festlegen kann. Sprich wenn ich das von Arauder umsetze, dann hab´ ich ja keine Zahlen, sondern nur Namen


wahl ist deine zahl ;-)


----------



## BaxterStockman (25. Nov 2010)

ok perfekt, danke, jetzt hab ichs gecheckt


----------



## Landei (25. Nov 2010)

BaxterStockman hat gesagt.:


> aber ich will ja, dass die Strings also Stein, Papier, Schere mit den Zahlen 0,1,2 belegt werden.



In meiner Lösung kann man auf Stein, Schere und Papier die Methode ordinal() aufrufen, die diese Zahl (entsprechend der Reihenfolge in der Definition von Auswahl) liefert.


----------

