Irgendein "Null" Fehler....

hallo alle zusammen,

ich sitze wieder an einem Übungsprojekt, nämlich an "Black Jack"!🙂
Eigentlich funktioniert alles ganz gut, jedoch bekomme ich manchmal immer "Null ausgegeben, wenn eine Zufallszahl (zwischen 1-13, oder 1-4) auf meinen "Kartenarray" zugreifen will.

Der Code ist noch nicht ganz fertig(die Auswertung fehlt noch)
Findet ihr den Fehler? Ich nämlich nicht ....???:L
Hier der Quellcode:

Java:
public class Haupt {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Automatisch generierter Methodenstub

		String [] [] stapel = new String [4] [13];
		
		for(int i = 0; i<4; i++)
		{
			switch(i)
			{
			case 0:
				for(int j = 1; i< 10; i++)
				{
					stapel[0][i]="Kreuz " + (j+1);
				}
				stapel[0][0]="Kreuz Ass";
				stapel[0][10]="Kreuz Bube";
				stapel[0][11]="Kreuz Dame";
				stapel[0][12]="Kreuz König";
				
			
			case 1: 
				for(int j = 1; i< 10; i++)
				{
					stapel[1][i]="Pik " + (j+1);
				}
				stapel[1][0]="Pik Ass";
				stapel[1][10]="Pik Bube";
				stapel[1][11]="Pik Dame";
				stapel[1][12]="Pik König";
				
			case 2:
				for(int j = 1; i< 10; i++)
				{
					stapel[2][i]="Herz " + (j+1);
				}
				stapel[2][0]="Herz Ass";
				stapel[2][10]="Herz Bube";
				stapel[2][11]="Herz Dame";
				stapel[2][12]="Herz König";
			
			case 3:
				for(int j = 1; i< 10; i++)
				{
					stapel[3][i]="Kreuz " + (j+1);
				}
				stapel[3][0]="Karo Ass";
				stapel[3][10]="Karo Bube";
				stapel[3][11]="Karo Dame";
				stapel[3][12]="Karo König";
			
			}
		}
		
		int wertezusammen = 0;
		int wertezusammenC = 0;
		
		System.out.println("Spieler: 1. Karte : ");
		wertezusammen = ausgabe(wertezusammen, stapel);
		
		System.out.println("Spieler: 2. Karte: ");
		wertezusammen = ausgabe(wertezusammen, stapel);
		
		int fertig = 1; //1 = Nichtfertig 2 = Fertig
		
		while(fertig==1)
		{
			System.out.println("Möchtest du noch eine Karte nehmen?");
			fertig = new java.util.Scanner(System.in).nextInt();
			if(fertig==2) break;
			wertezusammen = ausgabe(wertezusammen, stapel);
		}
		
		System.out.println();
		System.out.println("Nun ist der Croupier am Zug!");
		wertezusammenC = ausgabe(wertezusammenC,stapel);
		System.out.println("2. Zug vom Croupier");
		wertezusammenC = ausgabe(wertezusammenC, stapel);
		
		int fertigcroupier = 1; //1=Nein, 2= Ja
		while(fertigcroupier==1)
		{
			if(21-wertezusammen >7) 
			{
				fertigcroupier=2; break;
			}
			else
			{
				System.out.println("Zug vom Croupier: ");
				wertezusammenC = ausgabe(wertezusammenC, stapel);
			}
		}
		
		
		
		if(wertezusammen==21) System.out.println("Ja! Du hast gewonnen! BlackJack");
		else if(wertezusammen<21) System.out.println("Deine Zahl " + wertezusammen + " liegt leider unter 21");
		else if(wertezusammen>21) System.out.println("Deine Zahl " + wertezusammen + " liegt leider über 21");
		
	
		
	}

	private static int ausgabe(int wertezusammen, String[][] stapel) {
		// TODO Automatisch generierter Methodenstub
		
		int EKF = (int)(int) (Math.random() * (4-1) + 1)  ;
		int EKW = (int) (int) (Math.random() * (13-1) + 1)  ;
		
		
		wertezusammen = wertezusammen + EKW;
		System.out.println(stapel[EKF-1][EKW-1]);
		return wertezusammen;
	}

}

Vielen Dank schonmal

Nils
 
Schau dir mal deine Erstellung der Karten an:
Java:
 for(int j = 1; i< 10; i++)
Du erstellst die variable int j aber prüfst auf i und inkrementierst i.
Da kommt am Ende nichts gescheites bei raus 😉


Nebenbei: Die Äußere For Schleife und den Switch Case brauchst du beides nicht.
 
Noch ergänzend zu njans Beitrag:
Java:
stapel[0][i]="Kreuz " + (j+1);
Auch hier kann das i auf der linken Seite nicht stimmen.
 
Also, Dein Code zur Befüllung des Arrays (for-Schleife-switch-Konstrukt) sieht schon mal komisch aus. Das gehört umgeschrieben und in eine Methode ausgelagert, ungefähr so:
Java:
static String[][] initKartenStapel() {

  final String[][] stapel = new String[4][13];

  stapel[0][0]="Kreuz Ass";
  stapel[1][0]="Pik Ass";
  stapel[2][0]="Herz Ass";
  stapel[3][0]="Karo Ass";

  for(int i = 1; i < 10; i++) {
    final int kartenWert = i + 1;
    stapel[0][i]="Kreuz " + kartenWert;
    stapel[1][i]="Pik " + kartenWert;
    stapel[2][i]="Herz " + kartenWert;
    stapel[3][i]="Karo " + kartenWert;  
  }

  stapel[0][10]="Kreuz Bube";
  stapel[0][11]="Kreuz Dame";
  stapel[0][12]="Kreuz König";

  stapel[1][10]="Pik Bube";
  stapel[1][11]="Pik Dame";
  stapel[1][12]="Pik König";

  stapel[2][10]="Herz Bube";
  stapel[2][11]="Herz Dame";
  stapel[2][12]="Herz König";

  stapel[3][10]="Karo Bube";
  stapel[3][11]="Karo Dame";
  stapel[3][12]="Karo König";

  return stapel;           
}
Weitere Verfeinerungen jetzt mal außen vor gelassen...
 
Zuletzt bearbeitet von einem Moderator:
Vielen Dank für eure vielen Antworten und Verbesserungsvorschlägen!
Das mit den Vorschleifen und Switch Anweisungen: Da hatte ich sicherlich noch irgendwelche AltGedanken im Kopf,... Und habe diese auch noch eingebaut!

Nochmal ein Dank an euch allen

Nils
 
Java:
static String[][] initKartenStapel() {
  final String[][] stapel = new String[4][13];
  String kartenWert;
  for(int i = 0; i < 13; i++) {
    switch(i)
    {
      case  0: kartenWert="Ass";   break;
      case 10: kartenWert="Bube";  break;
      case 11: kartenWert="Dame";  break;
      case 12: kartenWert="König"; break;
      default: kartenWert = "" + (i + 1);
    }
    stapel[0][i]="Kreuz "+ kartenWert;
    stapel[1][i]="Pik "  + kartenWert;
    stapel[2][i]="Herz " + kartenWert;
    stapel[3][i]="Karo " + kartenWert;  
  }
  return stapel;           
}
Weitere Verfeinerungen jetzt mal außen vor gelassen...
 
Zuletzt bearbeitet:

Zurück
Oben