# Skat-Geber programmieren



## b1gsh0w (19. Nov 2009)

Hallo,

ich sitze vor ein paar Problemen, bei denen ich Hilfe benötige.
Ich habe folgende Aufgabenstellung



> Es soll ein Java-Programm geschrieben werden, das virtuelle Skat-Karten austeilt. Beim Skat wird mit 32 Karten gespielt. Es gibt die vier Farben Herz, Karo, Pik und Kreuz. Von jeder Farbe gibt es die Karten 7, 8, 9, 10, Bube, Dame, König, Ass. Es gibt drei Mitspieler von denen jeder zehn Karten bekommt. Die verbleibenden zwei Karten sind der Skat und werden auf den Tisch gelegt.



Ich komme bei der Zuweisung von Farben und Werten nicht weiter.
Die Zuweisung soll so aussehen:

....0…7......./8=0 => „Herz“
....8…15...../8=1 => „Pik“
....16…23.../8=2 => „Kreuz“
....24…31.../8=3 => „Karo“
%..|....|
....0....7 => Werte

Mit 31% sollen die Werte entstehen, mit 31/8 sollen die Farben entstehen.

Mein Code sieht momentan so aus:


```
import java.util.Random;

public class skat1{

    public static void main(String[] args) {

	int karten[] = new int[32];
	int spieler1[] = new int[10];
	int spieler2[] = new int[10];
	int spieler3[] = new int[10];
	int skat[] = new int[2];

	// public static String getFarbe(int temp) {

	//     z = 31;
	//     int temp = z / 8;
                   
	//     System.out.println(temp);
	//     switch(temp) {
	
	//     case 0: System.out.println("Herz");
	// 	break;
	//     case 1: System.out.println("Pik");
	// 	break;
	//     case 2: System.out.println("Kreuz");
	// 	break;
	//     case 3: System.out.println("Karo");
	// 	break;
	//     }

	java.util.Random random = new java.util.Random();
	
	for (int i = 0 ; i<10 ; i++) {
	    karten[i] = random.nextInt(32);
     
	System.out.println("Spieler1: " + karten[i]);
	}

	for (int i = 10 ; i<20 ; i++) {
	    karten[i] = random.nextInt(32);     
	System.out.println("Spieler2: " + karten[i]);
	}

	for (int i = 20 ; i<30 ; i++) {
	    karten[i] = random.nextInt(32);
     
	System.out.println("Spieler3: " + karten[i]);
	}

	for (int i = 30 ; i<32 ; i++) {
	    karten[i] = random.nextInt(32);
     
	System.out.println("Skat: " + karten[i]);
	}
    }
}
```

Die Zufallszahlen funktionieren bis jetzt auch noch nicht perfekt, es kommen immer ein paar doppelte heraus.

Wie kann ich den Werten, die bei System.out.println("Skat: " + karten_); usw. ausgegeben werde, die Farben zuweisen? Die Farbzuweisung in meinem Code habe ich mal "ausgeblendet", da sie sowieso nicht funktioniert. Aber so in etwa soll sie wohl aussehen. Wie kann ich die Werte 0 bis 31 durch 8 dividieren? Die 31/8 kann ich ja nicht so stehen lassen, das dient nur als Platzhalter.

Ich brauche dringend Hilfe. Ich will nicht noch mehrere Stunden davor sitzen und nicht voran kommen. Das frustriert einfach. Also, hilfreiche Hinweise sind sehr erwünscht, aber bitte keine Lösungen._


----------



## ARadauer (19. Nov 2009)

> Die Zufallszahlen funktionieren bis jetzt auch noch nicht perfekt, es kommen immer ein paar doppelte heraus.


ja klar, woher soll random.nextInt wissen was schon gekommen ist... Mach dir eine ArrayList für da deine karten ein und entfern diese beim geben...



> Wie kann ich den Werten, die bei System.out.println("Skat: " + karten_); usw. ausgegeben werde, die Farben zuweisen? _


_
Wen willst du welchen Wert zuseisen? MAch dir ein Objekt Karte. Im Konstruktor übergibst du die Nummer und das Objekt hat Methoden um den Wert und Farbe auszugeben...

Ich geb dir mal die Karte .. Moment..._


----------



## ARadauer (19. Nov 2009)

```
public class Karte {
   
   public static void main(String[] args) {
      for(int i = 0; i <32; i++){
         Karte k = new Karte(i);
         System.out.println(k);
      }
   }
   
   private int id;
   
   private static String[] werte ={"Sieben", "Acht", "Neun", "Zehn", "Bube", "Dame", "König", "Ass"};
   
   public Karte(int id){
      this.id = id;
   }
   
   public String getFarbe(){
      int farbe = id/8;
      switch (farbe) {
      case 0:
         return "Herz";    
         
      case 1:
         return "Pik";        
      case 2:
         return "Kreuz";        
      case 3:
         return "Karo";       
      }
      return "Fehler!";
      
   }
   
      
   public int getId() {
      return id;
   }

   public void setId(int id) {
      this.id = id;
   }

   public String getWert(){      
      int wert = id%8;
      return werte[wert];
   }
   
   public String toString(){
      return id+" "+getFarbe()+" "+getWert();
   }

}
```
Das mit dem %8 und  /8 hast du ganz richtig erkannt....
Das von mir sollte aber auch nur ein Beispiel sein. Ich würde das mit den Werten und Farben nicht als String machen... die Werte vielleicht als Enums oder eigene Objekte.. kommt auf die Anwendung drauf an....

Veilleicht noch ein Anstoß für den Dealer...

```
ArrayList<Karte> karten = new ArrayList<Karte>();
      for(int i = 0; i <32; i++){
         karten.add(new Karte(i));         
      }
      
      Collections.shuffle(karten);
      System.out.println("Geber teil 5 Karten aus..");
      for(int i= 0; i< 5; i++){
         Karte k = karten.remove(0);
         System.out.println(k);         
      }
      System.out.println("\nnoch "+karten.size()+" Karten im Deck...");
```


----------

