Instanz Problem

Lybrial

Bekanntes Mitglied
Huhu,

hab ein Problem, ich habe eine Instanz einer Klasse erstellt und möchte auf eine Methode
dieser Klasse zugreifen und ausführen. Das tut er allerdings nicht:

Java:
public class Game{
	private Playfield pf = new Playfield();
	private PlayerI playeri = new PlayerI();
	private PlayerII playerii = new PlayerII();
	private ComputerLow computerlow = new ComputerLow();
	private ComputerMiddle compoutermiddle = new ComputerMiddle();
	private ComputerHard computerhard = new ComputerHard();
	private PrintOut printout = new PrintOut();
	private int spielen = 1;
	private int gewonnen = 0;
	//****Default-Konstruktor******************
	public Game(){}
	//**********************************************************************************
	public void game(){
		do{
			printout.rules();
			do{
				printout.whoPlays();
			}while (printout.whoPlays != 1 && printout.whoPlays != 2);
			
			do{
				printout.whoStarts();
			}while (printout.whoStarts != 1 && printout.whoStarts !=2);
			
			do{
				printout.howDifficult();
			}while (printout.howDifficult != 1 && printout.howDifficult != 2 && printout.howDifficult != 3);
			
			if(printout.whoPlays == 1){
				if(printout.whoStarts == 1){
					
					do{
						pf.printPlayfield();
						playeri.makeChoosePlayerI();
						pf.printPlayfield();
						if(printout.howDifficult == 1){
							computerlow.makeChooseComputer();
						}
						else if(printout.howDifficult == 2){
							compoutermiddle.makeChooseComputer();
						}
						else if(printout.howDifficult == 3){
							computerhard.makeChooseComputer();
						}
						pf.printPlayfield();
					}while(gewonnen == 0);
				}
			}
		}while (spielen == 1);
	}
}

Diese Methode pf.printPlayfield(); wird nicht ausgeführt

Java:
public class Playfield{
	public char[] setSquareChar = new char[]{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
	//*****Default-Construktor****************
	public Playfield(){};
	//**********************************************************************************
	public void printPlayfield(){
		System.out.println("   #   #   ");
		System.out.println(" "+setSquareChar[0]+" # "+setSquareChar[1]+" # "+setSquareChar[2]+" ");
		System.out.println("   #   #   ");
		System.out.println("###########");
		System.out.println("   #   #   ");
		System.out.println(" "+setSquareChar[3]+" # "+setSquareChar[4]+" # "+setSquareChar[5]+" ");
		System.out.println("   #   #   ");
		System.out.println("###########");
		System.out.println("   #   #   ");
		System.out.println(" "+setSquareChar[6]+" # "+setSquareChar[7]+" # "+setSquareChar[8]+" ");
		System.out.println("   #   #   ");
	}
	//**********************************************************************************
}
 
Treten Fehler auf? Exceptions?
Wenn nein, bist du sicher dass
Code:
printout.whoPlays
und
Code:
printout.whoStarts
jeweils gleich 1 sind?
 
Dazu müsste man wohl die Klassen PrintOut kennen.

Hast Du es schon mal mit einem Debugger oder - ersatzweise - mit dem Einfügen von Ausschreibungen ("System.out.println( "Bin jetzt in Zeile x in der Methode y")") versucht?
 
Ok,

Hier die Klasse Printout:
Java:
import java.util.Scanner;

public class PrintOut{
	public int whoStarts = 8;
	public int whoPlays = 8;
	public int howDifficult = 8;
	//****Default-Konstruktor******************
	public PrintOut(){}
	//**********************************************************************************
	public void rules(){
		System.out.println("###################################################################");
		System.out.println("#  Tic-Tac-Toe ist ein einfaches Brettspiel für zwei Spieler.     #");
		System.out.println("#  Das Spielbrett hat 9 Positionen die in einem 3 * 3 Raster      #");
		System.out.println("#  angeordnet sind. Jeder Spieler setzt abwechselnd einen Stein   #");
		System.out.println("#  auf eines der freien Felder. Wer zuerst drei Steine in einer   #");
		System.out.println("#  Reihe, Spalte oder einer der beiden Diagonalen hat, hat        #");
		System.out.println("#  gewonnen. Sind alle 9 Felder belegt und keiner der beiden      #");
		System.out.println("#  Spieler hat gewonnen, endet das Spiel unentschieden.           #");
		System.out.println("###################################################################");
		System.out.println("#  Die 9 Positionen des Spielfeldes, sind von 1-9 durchnummeriert.#");
		System.out.println("#  Wenn du also ein Feld auswählen möchtest, gebe eine Zahl von   #");
		System.out.println("#  1-9 ein, achte darauf, dass du nur unbesetzte Felder wählen    #");
		System.out.println("#  kannst. Das Feld:                                              #");
		System.out.println("###################################################################");
		System.out.println("   #   #   ");
		System.out.println(" 1 # 2 # 3 ");
		System.out.println("   #   #   ");
		System.out.println("###########");
		System.out.println("   #   #   ");
		System.out.println(" 4 # 5 # 6 ");
		System.out.println("   #   #   ");
		System.out.println("###########");
		System.out.println("   #   #   ");
		System.out.println(" 7 # 8 # 9 ");
		System.out.println("   #   #   ");
		System.out.println("###################################################################");
		System.out.println("#  Viel Spaß beim Spielen :)                                      #");
		System.out.println("###################################################################");
	}
	//**********************************************************************************
	public void whoPlays(){
		Scanner sc = new Scanner(System.in);
		System.out.println("");
		System.out.println("###################################################################");
		System.out.println("#       Wer spielt? Player vs. Player(1), Player vs. CPU(2)       #");
		System.out.println("###################################################################");
		System.out.print("#==>");
		whoPlays = sc.nextInt();
	}
	//**********************************************************************************
	public void whoStarts(){
		if(whoPlays == 1){
			Scanner sc = new Scanner(System.in);
			System.out.println("###################################################################");
			System.out.println("#     Wer soll das Spiel beginnen? Player I(1), Player II(2)      #");
			System.out.println("###################################################################");
			System.out.print("#==>");
			whoStarts = sc.nextInt();
		}
		else if(whoPlays == 2){
			Scanner sc = new Scanner(System.in);
			System.out.println("###################################################################");
			System.out.println("#       Wer soll das Spiel beginnen? Player(1), Computer(2)       #");
			System.out.println("###################################################################");
			System.out.print("#==>");
			whoStarts = sc.nextInt();
		}
	}
	//**********************************************************************************
	public void howDifficult(){
		if(whoPlays == 2){
			Scanner sc = new Scanner(System.in);
			System.out.println("###################################################################");
			System.out.println("#               Schwierigkeit: WI(1), MI(2), INF(3)               #");
			System.out.println("###################################################################");
			System.out.print("#==>");
			howDifficult = sc.nextInt();
		}
	}
	//**********************************************************************************
}

Die printout.rules(); usw aus der printout Klasse werden ja Problemlos ausgegeben, nur
leider wird das Spielfeld nie gedruckt.
Ich stelle natürlich sicher das whoPlays und whoStarts 1 ist.
 
Also das ist die noch nicht ganz fertige Game Klasse:

Java:
public class Game{
	private Playfield pf = new Playfield();
	private PlayerI playeri = new PlayerI();
	private PlayerII playerii = new PlayerII();
	private ComputerLow computerlow = new ComputerLow();
	private ComputerMiddle compoutermiddle = new ComputerMiddle();
	private ComputerHard computerhard = new ComputerHard();
	private PrintOut printout = new PrintOut();
	private int spielen = 1;
	private int gewonnen = 0;
	//****Default-Konstruktor******************
	public Game(){}
	//**********************************************************************************
	public void game(){
		do{//So lange wieder holen, bis Spieler nicht mehr spielen moechte
			printout.rules();
			do{//Solange abfragen, bis gueltige Eingabe gemacht wird
				printout.whoPlays();
			}while (printout.whoPlays != 1 && printout.whoPlays != 2);
			
			do{//Solange abfragen, bis gueltige Eingabe gemacht wird
				printout.whoStarts();
			}while (printout.whoStarts != 1 && printout.whoStarts !=2);
			
			do{//Solange abfragen, bis gueltige Eingabe gemacht wird
				printout.howDifficult();
			}while (printout.howDifficult != 1 && printout.howDifficult != 2 && printout.howDifficult != 3);
			
			if(printout.whoPlays == 1){
				if(printout.whoStarts == 1){
					playerIStartsVSComputer();//entsprechenden Spielablauf aufrufen
				}
				else if(printout.whoStarts == 2){
					playerIVSComputerStarts();//entsprechenden Spielablauf aufrufen
				}
			}
			else if(printout.whoPlays == 2){
				if(printout.whoStarts == 1){
					playerIStartsVSPlayerII();//entsprechenden Spielablauf aufrufen
				}
				else if(printout.whoStarts == 2){
					playerIVSPlayerIIStarts();//entsprechenden Spielablauf aufrufen
				}
			}
		}while (spielen == 1);
	}
	//**********************************************************************************
	private void playerIStartsVSPlayerII(){	
		do{//So lange spielen, bis einer der beiden gewonnen hat
			pf.printPlayfield();
			System.out.println("========================================");
			playeri.makeChoosePlayerI();
			
			while(pf.getSquareChar(playeri.getChoosePlayerI()) != ' '){//Ungueltige Eingabe abfangen
				System.out.println("Ungueltige Eingabe!");
				System.out.print("#==>");
				playeri.makeChoosePlayerI();
			}
			pf.setSquareChar(playeri.getChoosePlayerI(), 'X');//Zeichen setzen
			
			pf.printPlayfield();
			System.out.println("========================================");
			playerii.makeChoosePlayerII();
			
			while(pf.getSquareChar(playerii.getChoosePlayerII()) != ' '){//Ungueltige Eingabe abfangen
				System.out.println("Ungueltige Eingabe!");
				System.out.print("#==>");
				playerii.makeChoosePlayerII();
			}
			pf.setSquareChar(playerii.getChoosePlayerII(), 'X');//Zeichen setzen
			
			pf.printPlayfield();
			System.out.println("========================================");
		}while(gewonnen == 0);
	}
	//**********************************************************************************
	private void playerIVSPlayerIIStarts(){
		do{//So lange spielen, bis einer der beiden gewonnen hat
			pf.printPlayfield();
			System.out.println("========================================");
			playerii.makeChoosePlayerII();
			
			while(pf.getSquareChar(playerii.getChoosePlayerII()) != ' '){//Ungueltige Eingabe abfangen
				System.out.println("Ungueltige Eingabe!");
				System.out.print("#==>");
				playerii.makeChoosePlayerII();
			}
			pf.setSquareChar(playerii.getChoosePlayerII(), 'X');//Zeichen setzen
			
			pf.printPlayfield();
			System.out.println("========================================");
			playeri.makeChoosePlayerI();
			
			while(pf.getSquareChar(playeri.getChoosePlayerI()) != ' '){//Ungueltige Eingabe abfangen
				System.out.println("Ungueltige Eingabe!");
				System.out.print("#==>");
				playeri.makeChoosePlayerI();
			}
			pf.setSquareChar(playeri.getChoosePlayerI(), 'X');//Zeichen setzen
			
			pf.printPlayfield();
			System.out.println("========================================");
		}while(gewonnen == 0);
	}
	//**********************************************************************************
	private void playerIStartsVSComputer(){
		do{//So lange spielen, bis einer der beiden gewonnen hat
			pf.printPlayfield();
			System.out.println("========================================");
			playeri.makeChoosePlayerI();

			while(pf.getSquareChar(playeri.getChoosePlayerI()) != ' '){//Ungueltige Eingabe abfangen
				System.out.println("Ungueltige Eingabe!");
				System.out.print("#==>");
				playeri.makeChoosePlayerI();
			}
			pf.setSquareChar(playeri.getChoosePlayerI(), 'X');//Zeichen setzen
			
			pf.printPlayfield();
			System.out.println("========================================");
			if(printout.howDifficult == 1){//je nach Schwierigkeit unterscheiden
				
				do{//Ungueltige Eingabe abfangen
					computerlow.makeChooseComputer();
				}while (pf.getSquareChar(computerlow.getChooseComputer()) != ' ');
				
			}
			else if(printout.howDifficult == 2){//je nach Schwierigkeit unterscheiden
				compoutermiddle.makeChooseComputer();
			}
			else if(printout.howDifficult == 3){//je nach Schwierigkeit unterscheiden
				computerhard.makeChooseComputer();
			}
			pf.printPlayfield();
			System.out.println("========================================");
		}while(gewonnen == 0);
	}
	//**********************************************************************************
	private void playerIVSComputerStarts(){
		do{//So lange spielen, bis einer der beiden gewonnen hat
			pf.printPlayfield();
			System.out.println("========================================");
			if(printout.howDifficult == 1){//je nach Schwierigkeit unterscheiden
				computerlow.makeChooseComputer();
			}
			else if(printout.howDifficult == 2){//je nach Schwierigkeit unterscheiden
				compoutermiddle.makeChooseComputer();
			}
			else if(printout.howDifficult == 3){//je nach Schwierigkeit unterscheiden
				computerhard.makeChooseComputer();
			}
			pf.printPlayfield();
			System.out.println("========================================");
			playeri.makeChoosePlayerI();

			while(pf.getSquareChar(playeri.getChoosePlayerI()) != ' '){//Ungueltige Eingabe abfangen
				System.out.println("Ungueltige Eingabe!");
				System.out.print("#==>");
				playeri.makeChoosePlayerI();
			}
			pf.setSquareChar(playeri.getChoosePlayerI(), 'X');//Zeichen setzen
			
			pf.printPlayfield();
			System.out.println("========================================");
		}while(gewonnen == 0);
	}
	//**********************************************************************************
	private void win(){
		
	}
	//**********************************************************************************
}

Ich gebe 2 x die "1" ein um zu bezwecken, dass die Methode aufgerufen wird in der
Spieler 1 gegen den Computer antritt und der Spieler 1 beginnt.

Dann geht das Programm in eine Endlosschleife ohne irgendetwas weiter zu tun.
Der entsprechende CodeBlock der hierbei ausgeführt werden sollte, ist der folgende:

Java:
private void playerIStartsVSComputer(){
		do{//So lange spielen, bis einer der beiden gewonnen hat
			pf.printPlayfield();
			System.out.println("========================================");
			playeri.makeChoosePlayerI();

			while(pf.getSquareChar(playeri.getChoosePlayerI()) != ' '){//Ungueltige Eingabe abfangen
				System.out.println("Ungueltige Eingabe!");
				System.out.print("#==>");
				playeri.makeChoosePlayerI();
			}
			pf.setSquareChar(playeri.getChoosePlayerI(), 'X');//Zeichen setzen
			
			pf.printPlayfield();
			System.out.println("========================================");
			if(printout.howDifficult == 1){//je nach Schwierigkeit unterscheiden
				
				do{//Ungueltige Eingabe abfangen
					computerlow.makeChooseComputer();
				}while (pf.getSquareChar(computerlow.getChooseComputer()) != ' ');
				
			}
			else if(printout.howDifficult == 2){//je nach Schwierigkeit unterscheiden
				compoutermiddle.makeChooseComputer();
			}
			else if(printout.howDifficult == 3){//je nach Schwierigkeit unterscheiden
				computerhard.makeChooseComputer();
			}
			pf.printPlayfield();
			System.out.println("========================================");
		}while(gewonnen == 0);
	}
 

Zurück
Oben