Objekte aufrufen

truejojo

Grünschnabel
Moin,

bin noch ein relativer Anfänger im programmieren und beschäftige mich momentan mit „abstrakten Klassen und Methoden“, sowie mit „Vererbung“.
Meine Frage selber beinhaltet, das Aufrufen von Objekten!!
Wichtig sind die Klassen „Spieler“ und „AlphabetPraesentation“!!
In der „TestKlasse“ rufe ich die Methode „starteSpiel“ auf, sie wird auch aufgerufen, aber das Spiel selber funktioniert leider nicht!
Es gibt Probleme in der „alphabetErkennenAblauf“ Methode sowie in der Methode „frageSpielerNamenAb“ aus der Klasse Spieler.
Wenn ich in der Klasse „AlphabetPraesentation“ ein Objekt spieler aus Spieler anlege und z.B. gleich eine 2 mit übergebe, bekomme ich immerhin keine NullPointerException und das Spiel kann soweit laufen, allerdings nicht mit den eingegebenen Namen, sondern mit so etwas z.B. „Ljava.lang.String;@26e431“.
Ich weiß in keinem Fall woran es liegen könnte, ich habe schon sämtliche Möglichkeiten ausprobiert, die ich aber nicht weiter erörtern will, da der Text sonst kein Ende nehmen würde J!
Es wäre super Toll, wenn mir eine/einer vielleicht bei den Problemen helfen könnte.
Wie funktioniert in diesem Kontext das Objektanlegen bzw. das aufrufen von Objekten, wie kann ich das Spiel auf diese Weise zum laufen bringen?
Insgesamt will ich noch mehr Klassen anlegen, wo weitere Spiele realisiert werden sollen, wie z.B. „BuchstabenWiedererkennen“, deshalb sollen eigentlich die Fragen nach „frageSpielerAnzahlAb“ als auch „frageSpielerNamenAb“, nur einmal betätigt werden, die dann für die diversen Spiele aus verschiedenen Klassen gelten.
Insofern ist die Frage, wie funktioniert das Objektanlegen für dieses Vorhaben, anhand des Beispiels der zwei besagten Klassen? Bzw. für die gesamte Klassenstruktur in denen Spiele realisiert werden?!

Dankeschööön für deine Hilfe!!
lieben Gruß, jojo

Java:
import javax.swing.JOptionPane;

public class AlphabetPraesentation extends Spiel  
{
	private int alphabetVon;
	private int alphabetBis;
	private int alphabetGanz;
	private boolean hatAuswahlVonBisMoeglichkeit;
	
	Spieler spieler = new Spieler();
	
	AlphabetPraesentation(int alphabetVon, 
						  int alphabetBis, 
						  int alphabetGanz, 
						  boolean hatAuswahlVonBisMoeglichkeit)
	{
		this.alphabetVon = alphabetVon;
		this.alphabetBis = alphabetBis;
		this.alphabetGanz = alphabetGanz;
		this.hatAuswahlVonBisMoeglichkeit = hatAuswahlVonBisMoeglichkeit;
	}
	
	AlphabetPraesentation(Spieler spieler)
	{
		this.spieler = spieler;
	}
	
	AlphabetPraesentation()
	{
		hatAuswahlVonBisMoeglichkeit = true;
	}
	
	public void frageAlphabetVonAb()
	{
		alphabetVon = Integer.parseInt(JOptionPane.showInputDialog("Mit welchem Buchstaben willst du anfangen zu üben?"));
	}
	
	public void frageAlphabetBisAb()
	{
		alphabetBis = Integer.parseInt(JOptionPane.showInputDialog("Bis zu welchem Buchstaben willst du üben?"));
	}
	
/*	public void frageAlphabetGanzAb()
	{
		alphabetGanz;//benötig man eigentlich gar nicht!
	}
*/	
	public void setzeAuswahlVonBisMoeglichkeit(boolean hatAuswahlVonBisMoeglichkeit)
	{
		this.hatAuswahlVonBisMoeglichkeit = hatAuswahlVonBisMoeglichkeit;
	}
	
	public int gebeAlphabetVonZurueck()
	{
		return alphabetVon;
	}
	
	public int gebeAlphabetBisZurueck()
	{
		return alphabetBis;
	}
	
	public int gebeAlphabetGanzZurueck()
	{
		return alphabetGanz = Methoden.ALPHABET.length();
	}
	
	@Override
	public void starteSpiel() 
	{
		alphabetErkennenAblauf();
	}
	
	@Override
	public void beendeSpiel() 
	{
		
	}

	@Override
	public boolean frageSpielZustandAb() 
	{
		return false;
	}

	@Override
	public SpielTyp setzeSpielTyp() 
	{
//		return SpielTyp.ALPHABETBUCHSTABENLERNEN;
		return null;
	}

	@Override
	public Spieler frageSpielerAnzahlAb() 
	{
		return spieler;//vermutlich doch überflüssige Methode!! ?
	}
	
	public void spielStartAlphabetErkennen()
	{
//		for(int i=gebeAlphabetVonZurueck(); i<=gebeAlphabetBisZurueck(); i++)
		for(int i=0; i<gebeAlphabetGanzZurueck(); i++)
			for(int j=0; j<spieler.gebeSpielerAnzahlZurueck(); j++)
			{
				{
					JOptionPane.showMessageDialog(null, "Hallo "+  spieler.gebeSpielerNamenZurueck() +", du bist dran!");
					
					String ausgabeIntern = Methoden.alphabetAufsagen(1, i);
					JOptionPane.showMessageDialog(null, ausgabeIntern);
				}
			}
	}
	
	public void alphabetErkennenAblauf()
	{
		AlphabetPraesentation alphabetPraesentation = new AlphabetPraesentation();
		
		alphabetPraesentation.spieler.frageSpielerAnzahlAb();
		System.out.println("so viele Spieler gibt es: "+alphabetPraesentation.spieler.gebeSpielerAnzahlZurueck());
	
		alphabetPraesentation.spieler.frageSpielerNamenAb();
		System.out.println("Spielernamen: "+alphabetPraesentation.spieler.gebeSpielerNamenZurueck());
//		alphabetPraesentation.spieler.zaehlerZurueckSetzen();
		
//		alphabetPraesentation.frageAlphabetVonAb();
//		alphabetPraesentation.frageAlphabetBisAb();
		alphabetPraesentation.spielStartAlphabetErkennen();
	}
	
	
}

Java:
import javax.swing.JOptionPane;


public class Spieler 
{
	private int spielerAnzahl;
	private String[] name;
	private int[] zaehlerRichtig;
	
	Spieler()
	{}
	
	Spieler(int spielerAnzahl)
	{
		this.spielerAnzahl = spielerAnzahl;
		name = new String[spielerAnzahl];
		zaehlerRichtig = new int[spielerAnzahl];
		
		for(int i=0; i<spielerAnzahl; i++)
		{
			name[i] = new String();
		}
	}
	
	public void frageSpielerAnzahlAb()
	{
		spielerAnzahl = Integer.parseInt(JOptionPane.showInputDialog("Wie viele wollen spielen?"));
	}
	
	public void frageSpielerNamenAb()
    {
	    for( int i=0; i < spielerAnzahl; i++)
	    {
	    	name[i] = JOptionPane.showInputDialog("Bitte gib Deinen Namen ein. Danke!");
	    }
    }
	
	public void erhoeheZaehlerRichtig()
	{
		for(int i=0; i<spielerAnzahl; i++)
	    {
			zaehlerRichtig[i]++;
	    }
	}
	
	public void zaehlerZurueckSetzen()
    {
    	for(int i=0; i<spielerAnzahl; i++)
    	{
    		zaehlerRichtig[i] = 0;
    	}
    }
	
	public int gebeSpielerAnzahlZurueck()
	{
		return spielerAnzahl;
	}
	
	public String[] gebeSpielerNamenZurueck()
	{
		return name;
	}
	
	public int[] gebeZaehlerRichtigZurueck()
	{
		return zaehlerRichtig;
	}
	
    public void ergebnissAnzeigeFuerSpielende(int aufgabenAnzahl)
    {
    	String ausgabe = "";
    	String ausgabeVariationen = ergebnissAnzeigeVariationen(aufgabenAnzahl);
    	
    	for(int i=0; i<spielerAnzahl; i++)
    	{
    		ausgabe += "Hallo "+ name[i] +", du hast von " +
    		zaehlerRichtig[i] + ausgabeVariationen; 
    	}
    	JOptionPane.showMessageDialog(null, ausgabe);
    }
    
    private String ergebnissAnzeigeVariationen(int aufgabenAnzahl)
    {
    	String ausgabe = "";
    	
    	for(int i=0; i<spielerAnzahl; i++)
    	{
	    	if(zaehlerRichtig[i] == 0)
	    	{
	    		ausgabe = " Runden, leider keins richtig gehabt!\nAber ganz bestimmt beim nächsten mal!!";
	    	}
	    	else if(zaehlerRichtig[i] > 0  &&  zaehlerRichtig[i] != aufgabenAnzahl)
	    	{
	    		ausgabe = " Runden" +aufgabenAnzahl+" richtig.\n";
	    	}
	    	else if(zaehlerRichtig[i] == aufgabenAnzahl)
	    	{
	    		ausgabe = " Runden\nalles richtig gehabt!! SUPER.\n";
	    	}
    	}
    	return ausgabe;
    }
   
}

Java:
public abstract class Spiel 
{
	public abstract void starteSpiel();
	
	public abstract void beendeSpiel();
	
	public abstract boolean frageSpielZustandAb();
	
	public abstract SpielTyp setzeSpielTyp();
	
	public abstract Spieler frageSpielerAnzahlAb();
}


Java:
public class TestKlasse 
{
	
	public static void main(String[] args) 
	{
		Spiel spieler1 = new AlphabetPraesentation();
		spieler1.starteSpiel();
	}

}

Java:
import javax.swing.JOptionPane;
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Methoden 
{
	final static String ALPHABET = "ABCDE"; //FGHIJKLMNOPQRSTUVWXYZ";
	
	public static String alphabetAufsagen(int buchstabenAnzahl, int buchstabe)
	{
		String ausgabeIntern = "";
		StringBuffer alphabetNeu = new StringBuffer(ALPHABET);
		
        for(int i=0; i<buchstabenAnzahl; i++)
        {
 			ausgabeIntern += alphabetNeu.charAt(buchstabe);
 			alphabetNeu = alphabetNeu.deleteCharAt(buchstabe);
        }
        return ausgabeIntern;
    }
}
 
Zuletzt bearbeitet von einem Moderator:

zeja

Erfahrenes Mitglied
Ich habe mal zur besseren Lesbarkeit Code-Tags hinzugefügt. Ich bitte dich dies in Zukunft selber zu tun.

So ganz habe ich noch nicht verstanden was genau bei dir nicht geht. Die Komische ausgabe die du erhälst sieht aus wie ein array auf dem tu toString aufgerufen hast, bzw. welches du in einem Array verwendet hast. Da wir nun Zeilennummern sehen kannst du ja mal sagen wo du meinst dass das Problem liegt.

Noch eine Sache: Verwende bitte kein new String() sondern besser = ""; Java cached Strings: Ein und derselbe String kommt nur einmal vor, mit einem new String() erzeugst du allerdings explizit ein neues Objekt und das ist unnötig.

Kleiner Tipp: Schau dir mal Findbugs an, das kannst du über dein Programm laufen lassen und das zeigt dir solche Unschönheiten mit Erklärung an.
 

truejojo

Grünschnabel
Hallo,

super toll, dass du dir das angeschaut hast!
Mit den Code-Tags, das würde ich gerne in Zukunft machen, weiß blos leider nicht wie das funktioniert!?
Bin zur Zeit im Internet-Cafe, da ich zur Zeit zu Hause kein Internet habe, es ist total nervig!!

In der Klasse Spieler, hatte der Compiler immer in Zeile 34 einen Fehler angezeit, sowie in der Klasse AlphabetPraesentation in Zeile 121!
Wenn man das Spiel spielen will, ist es so, dass es immer abbricht, wenn man die Namen eingeben will, hoffentlich kann dir dass weiter helfen.
Wegen toString, in Klasse Spieler Zeile 21 verwende ich new String(), weiß nicht ob es das selbe ist?

Vielen Dank für deine Hilfe,
Lg, Jojo