OOP Wie bei Spiel "17+4" eine Karte an bestimmte Position hinzufügen

Saliver

Aktives Mitglied
Hey Muchachos,

ich versuche mich gerade an der Programmierung des Spiels 17&4 und habe Schwierigkeiten eine Karte an eine bestimmte Position in die Hand eines Spieler (ArrayList) hinzuzufügen.

Hier der bisherige Code

Java:
import java.util.ArrayList;
import java.util.List;

public class Karte
{  
    
    public static void main(String[] args)
    {
	// hier wird später das Spiel gestartet
    }
    public static int 	   
    			    Ass = 1,    
    			    Bube = 2,        
                            Dame = 3,       
                            Koenig = 4;
    			       
    public static int       
    			    Pik = 0,
                            Herz = 1,
                            Karo = 2,
                            Kreuz = 3;
                            

                            
    private final int farbe;   // farbe steht für die Farbe der Karten aus dem obigen int
                              
    private final int werte;  // werte steht für die Werte der Karten aus dem obigen int
                             
    public Karte(int derWert, int dieFarbe) {

        werte = derWert;
        farbe = dieFarbe;
    }
        
    public int getFarbe() {
            // Gibt den int Wert zurück für Farbe
        return farbe;
    }
    
    public int getWerte() {
            // Gibt den int Wert zurück für Werte
        return werte;
    }
    
    public String getFarbeAsString() {
        switch ( farbe ) {
           case 0:   return "Pik";
           case 1:   return "Herz";
           case 2:   return "Karo";
           case 3:   return "Kreuz";
           default:	return "Die Farbe konnte nicht zugewiesen werden!";
        }
        
    }
    
    public String getWerteAsString() {
           switch ( werte ) {
           case 1:   return "Ass";
           case 2:   return "Bube";
           case 3:   return "Dame";
           case 4:   return "Koenig";
           case 6:   return "6";
           case 7:   return "7";
           case 8:   return "8";
           case 9:   return "9";
           case 10:  return "10";
           default:  return "Der Wert konnte nicht zugewiesen werden!";
        }
    }
    
    public String toString() {
           // Gibt einen String zurück in Form von z.B. "Bube(Kreuz)"
        return getFarbeAsString() + "(" + getWerteAsString()+")";
    }

    
   private List<String> hand;
   
   public List<String> Hand() {
           // Erstellt eine "Hand" in Form einer ArrayList ung kann sie über "hand" zurück geben
      List<String> hand = new ArrayList<String>();
      return hand;
   }
   
   public void loeschen() {
         // Löscht die Karten/Einträge in der ArrayList "Hand"
      hand.removeAll(hand);
   }
/////////////////////////////////////////////////////////////////////////////////////////////
   <b>
   public void addKarte (Karte k){
   // Wie kann ich eine Karte hinzufügen????????
      if (k != null)
         hand.add(k);
   }</b>
/////////////////////////////////////////////////////////////////////////////////////
   
   
   public void kartenLoeschen(Karte k) {
         // Wenn die Karte k in der Hand liegt, wird sie gelöscht.
      hand.remove(k);
   }
   
   public void kartenLoeschen(int position) {

      if (position >= 0 && position < hand.size())
         hand.remove(position);
   }
   
   public int getKartenAnzahl() {
         // gibt die Anzahl der Karten in der Hand zurück
      return hand.size();
   }
   
   public String getKarteAnPosition (int position) {
       
      if (position >= 0 && position < hand.size())
         return hand.get(position);
      else
         return null;
      
      
      
   }
   
}


Gruß,
Sali
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
?? Naja, eig. so wie du es schon versucht hast mit der Methode add, oder eben mit [c]hand.add(index, element)[/c] wenn es an eine bestimmte Stelle eingefügt werden soll. Allerdings ist das Problem wohl, dass der Methode ein Objekt von Karte übergeben wird, deine Liste hand hält aber Strings so wie es aussieht...Des weiteren müsste IRGENDWO ja vorher mindestens einmal Hand() aufgerufen werden..wieso du das so gemacht hast, weiß ich nicht :D

Java:
  private List<String> hand;
   
   public List<String> Hand() {
           // Erstellt eine "Hand" in Form einer ArrayList ung kann sie über "hand" zurück geben
      List<String> hand = new ArrayList<String>();
ist in dem Zusammenhang dann auch merkwürdig...sollte wohl eher nur[c]hand = new ArrayList<String>();[/c] heißen oder?
 
S

SlaterB

Gast
das klingt besser, ja


die Liste von Karten sollte auch nicht in einem Karte-Objekt stecken,
definiere ruhig mehr als eine Klasse, z.B. neu Hand

---

> hand.removeAll(hand);

->
hand.clear();
 

eRaaaa

Top Contributor
Das bedeutet ich muss die Strings in Objekte von Hand umschreiben?

Hm? Ich würde eher sagen, dass der Ansatz, der Methode eine Karte zu übergeben der richtige Weg ist. Schließlich hält eine Hand eben Karten und keine Strings :)
Bedeutet also, anstatt in der Liste Strings zu halten, sollte sie eben Objekte von Karten verwalten:
Java:
//private List<String> hand;
private List<Karte> hand;

Bei [c]getKarteAnPosition[/c] müsstest du dementsprechend dann auch eine Karte und keinen String zurückgeben
 

Saliver

Aktives Mitglied
Danke, ich habe eure Ratschläge versucht so gut wie möglich umzusetzen.

Java:
   private List<Karte> hand;
   
   public List<Karte> Hand() {
           // Erstellt eine "Hand" in Form einer ArrayList ung kann sie über "hand" zurück geben
       hand = new ArrayList<Karte>();
      return hand;
   }
   
   public void loeschen() {
         // Löscht die Karten/Einträge in der ArrayList "Hand"
      hand.clear();
   }
   
   public void addKarte(Karte k){
   // Wie kann ich eine Karte hinzufügen????????
      if (k != null)
         hand.add(k);
   }
   
   
   public void kartenLoeschen(Karte k) {
         // Wenn die Karte k in der Hand liegt, wird sie gelöscht.
      hand.remove(k);
   }
   
   public void kartenLoeschen(int position) {

      if (position >= 0 && position < hand.size())
         hand.remove(position);
   }
   
   public int getKartenAnzahl() {
         // gibt die Anzahl der Karten in der Hand zurück
      return hand.size();
   }
   
   public Karte getKarteAnPosition (int position) {
       
      if (position >= 0 && position < hand.size())
         return hand.get(position);
      else
         return null;


Entspricht dies den Erwartungen?
 
Zuletzt bearbeitet:
S

SlaterB

Gast
wer erwartet etwas?
List<String> war vorher schlechter, und insofern ist das Programm besser geworden, ja
 

Saliver

Aktives Mitglied
Ja, ich habe mich vielleicht etwas unglücklich ausgedrückt.

Gibt es sonst noch im gezeigten Code logische oder programmiertechnische Fehler?
Wie kann ich das Programm weiter verbessern? War die Wahl der ArrayList eine Gute, wenn nein, welche Alternativen gibt es die besser geeignet wären?
 
Zuletzt bearbeitet:
S

SlaterB

Gast
ich bin noch sehr stark dafür, die Liste der Karten aus Karte zu entfernen,
in eine zweite Klasse, z.B. Hand

die Methode Hand() ist ganz schlimm, wie ja auch schon erwähnt wurde, welchen Sinn hat die?
und Methoden nie groß schreiben,
als Konstruktor einer neuen Klasse Hand wäre sie allerdings perfekt
 

Suinos

Bekanntes Mitglied
Saliver hat gesagt.:
Wie kann ich das Programm weiter verbessern?
Grundsätzlich:

Mache immer Klammern bei Bedingungen und Schleifen.
Schlecht:
Saliver hat gesagt.:
[JAVA=16]
if (k != null)
hand.add(k);
[/code]

Besser:
Java:
if (k != null)		// Oder je nach deinem Stil die öffnende Klammer auf diese Zeile
{
	hand.add(k);
}

---
Komplexere Themen:

(Falls du von diesen Dingen noch nichts gehört hast, so will ich dich hier nicht überrennen, sondern lediglich das Spektrum an Möglichkeiten zeigen.
Für das Verständnis jedes dieser Dinge braucht man Zeit, welche man am Besten in praktische Erfahrung umwandelt.)

Enums
Diese Werte eignen sich perfekt für Enums (Aufzählungen):
Saliver hat gesagt.:
[JAVA=11]
public static int // Konstanten sind eigentlich 'static final' und schreibt man in UPPER_CASE, ...
Ass = 1,
Bube = 2,
Dame = 3,
Koenig = 4;

public static int // ... hier ebenso
Pik = 0,
Herz = 1,
Karo = 2,
Kreuz = 3;
[/code]
Beispiel:
Java:
// Datei Suit.java

/**
 * Contains all possible suits for cards.
 */
public enum Suit
{
	/**
	 * Spades
	 */
	SPADE,

	/**
	 * Hearts
	 */
	HEART,

	/**
	 * Diamonds
	 */
	DIAMOND,

	/**
	 * Clubs
	 */
	CLUB;
}
Verwendung:
Java:
Suit mySuit = Suit.SPADE;

switch (mySuit)
{
	case SPADE:
	{
		System.out.println("Pik");
		
		break;
	}
	
	case HEART:
	{
		System.out.println("Herz");
		
		break;
	}
	
	case DIAMOND:
	{
		System.out.println("Karo");
		
		break;
	}
	
	case CLUB:
	{
		System.out.println("Kreuz");
		
		break;
	}
}

---

Exceptions
Beispiel:
Falls
Code:
position
einen ungültigen Wert hat, sollte hier eine Exception geworfen werden.
[JAVA=37]
public Karte getKarteAnPosition (int position) {

if (position >= 0 && position < hand.size())
return hand.get(position);
else
return null;
[/code]
:arrow:
Java:
public Karte getKarteAnPosition (int position) throws IndexOutOfBoundsException
{
	if (position >= 0 && position < hand.size())
	{
		return hand.get(position);
	}

	throw new IndexOutOfBoundsException("Ungültiger Wert!");
}

---

JavaDocs
Deine inline-Kommentare durch JavaDoc-Kommentare ersetzen.
(Dies wird vor allem dann wichtig und nützlich, wenn du eine IDE verwendest.)
Beispiel:
Java:
/**
 * Gibt die Karte an der angegebenen Position zurück.
 * 
 * @param position die Position der Karte
 * @return die Karte an der Position
 * @throws IndexOutOfBoundsException wenn <code>position</code> einen ungültigen Wert hat (<code>position < 0 || position >= List.size()</code>)
 */
public Karte getKarteAnPosition (int position) throws IndexOutOfBoundsException

--

@edit:
Code:
ArrayIndexOutOfBoundsException
durch
Code:
IndexOutOfBoundsException
ersetzt.
 
Zuletzt bearbeitet:

Ein Keks

Bekanntes Mitglied
Suinos hat gesagt.:
Java:
public Karte getKarteAnPosition (int position) throws ArrayIndexOutOfBoundsException
{
    if (position >= 0 && position < hand.size())
    {
        return hand.get(position);
    }
 
    throw new ArrayIndexOutOfBoundsException("Ungültiger Wert!");
}
zum einen ist ArrayIndexOutOfBoundsException eine RuntimeException da benutzt man kein throws im header und zum anderen ist das so ziemlich sinnfrei da kann man die if-abfrage auch gleich sein lassen:
JavaDocs von List.get(index) hat gesagt.:
Throws:
IndexOutOfBoundsException - if the index is out of range (index < 0 || index >= size()).
 

Suinos

Bekanntes Mitglied
Ein Keks hat gesagt.:
zum einen ist ArrayIndexOutOfBoundsException eine RuntimeException da benutzt man kein throws im header
Interessant, das wusste ich nicht, danke!
Es scheint mir nur etwas merkwürdig zu sein, das
Code:
throws
bei der Methode nicht anzugeben, dafür aber in der Dokumentation.

Nach ein bisschen suchen fand ich dies:
Von der offiziellen Seite her scheint es egal zu sein, ob man die unchecked Exceptions angibt oder nicht:
Sun hat gesagt.:
[...] the compiler does not require that you catch or specify runtime exceptions (although you can).
(Hervorhebung von mir.)

Ein Keks hat gesagt.:
zum anderen ist das so ziemlich sinnfrei da kann man die if-abfrage auch gleich sein lassen
Ja, da hast du wohl Recht.
Ich wollte eigentlich nur zeigen, wie man ungültige Werte durch Exceptions behandeln kann.

---

Überhaupt, wieso will ich da eine
Code:
Array
-Exception werfen? :eek:
Edit folgt.
 

Ein Keks

Bekanntes Mitglied
Ich wollte eigentlich nur zeigen, wie man ungültige Werte durch Exceptions behandeln kann.
und ich wollte zeigen dass es allerdings nicht immer sinn macht dies zu tun ;)
Vom Prinzip her hast du Recht, es ist durchaus des öfteren sinnvoll eine Exception zu schmeißen, vor allem da null böse ist :D (aber leider notwendig)
hast dir nur ein schlechtes beispiel rausgesucht xD

Kommt mir irgendwie ünnötig vor. Schließlich wird trotzdem niemand gezwungen die Exception irgendwie zu behandeln. Es macht nur alles unleserlicher. (Dafür sind die (JavaDoc-) Komentare schließlich da)

aber um nicht alle deine Ideen schlecht zu reden: Enums sind hier wirklich angebrachter als Konstanten^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Snake-Spiel ähnliche Aufgabe Hilfe Java Basics - Anfänger-Themen 3
R Hangman-Spiel-zufälliges Wort ermitteln Java Basics - Anfänger-Themen 4
JEP1 Java Dialog Fenster schließen Spiel Java Basics - Anfänger-Themen 0
I Simples Risiko-Spiel Java Basics - Anfänger-Themen 5
Hallolu Pong-Spiel: Schläger schneller werden lassen Java Basics - Anfänger-Themen 9
M Java Spiel wie Wer wird Millionär Java Basics - Anfänger-Themen 1
T Startbildschirm für ein Spiel erstellen Java Basics - Anfänger-Themen 0
Z Kein überprüfen des gesamten Arrays möglich.(Viergewinnt Spiel) Java Basics - Anfänger-Themen 6
G Ufo Spiel programmieren Java Basics - Anfänger-Themen 13
C Java Spiel Java Basics - Anfänger-Themen 3
J Spiel programmieren Java Basics - Anfänger-Themen 16
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
B Memory Spiel Java Basics - Anfänger-Themen 29
J Memory-Spiel Aktivierung der Methode mit Timer Java Basics - Anfänger-Themen 44
Kamy Ein einfaches "Vier Gewinnt" Spiel für Anfängerin Java Basics - Anfänger-Themen 51
A Breakout-Spiel , Ball mit Platten abprallen lassen Java Basics - Anfänger-Themen 1
S Spiel programmieren mit Java Java Basics - Anfänger-Themen 11
Olis Erste Schritte Simples Memory Spiel möglich? Java Basics - Anfänger-Themen 1
J Spiel mit Button klick starten Java Basics - Anfänger-Themen 9
C Rekursives Backtracking beim Spiel Peg Java Basics - Anfänger-Themen 22
M Spiel programmieren Java Basics - Anfänger-Themen 16
Spencer Reid Feedback zu kleinem Spiel Java Basics - Anfänger-Themen 4
kokojamboo92 Spiel programmieren Java Basics - Anfänger-Themen 1
R Kleines Java Spiel funktioniert nicht. Java Basics - Anfänger-Themen 2
I Spiel Java Basics - Anfänger-Themen 34
H ein einfaches Tic Tac Toe Spiel Java Basics - Anfänger-Themen 1
I Spiel programmieren. Java Basics - Anfänger-Themen 16
B Hilfe bei Escape - Spiel Java Basics - Anfänger-Themen 6
S Java-Spiel Java Basics - Anfänger-Themen 2
M Nim-Spiel geht in den negativen Bereich Java Basics - Anfänger-Themen 1
K Klassen Registrierungsseite für ein Spiel Java Basics - Anfänger-Themen 6
J Programmierung Quiz Spiel Java Basics - Anfänger-Themen 3
J Programmierung Quiz Spiel Java Basics - Anfänger-Themen 2
M Brauche Tipps für ein Spiel Java Basics - Anfänger-Themen 4
S Probleme mit GamGrid Spiel-Erstellung => Actor reagiert nicht auf Tastatur Java Basics - Anfänger-Themen 2
Mxxxt Mosaik Spiel - Steuerpanel wird nicht angezeigt Java Basics - Anfänger-Themen 5
M Erste Schritte Zufallszahl Spiel Problem Java Basics - Anfänger-Themen 7
Z Erste Schritte Kleines 2D. Spiel Objekt Bewegung funktioniert nicht Java Basics - Anfänger-Themen 2
H Spiel Kniffel: Gesamtes Array untersuchen. Java Basics - Anfänger-Themen 15
Tacofan Hangman als fertiges Spiel Java Basics - Anfänger-Themen 7
M Array und Objektorientierung? - TicTacToe Spiel Java Basics - Anfänger-Themen 43
C Klassen Sudoku-Spiel Werte werden nicht gesetzt Java Basics - Anfänger-Themen 4
K Kleines Spiel auf Java programmieren Java Basics - Anfänger-Themen 2
W Tic Tac Toe Spiel ohne Arrays Java Basics - Anfänger-Themen 7
S Im objektorientiertem "Spiel" kämpfen Java Basics - Anfänger-Themen 3
I Klassen Umsetzungsfrage zu Spiel "Zuul" Java Basics - Anfänger-Themen 3
F Mastermind Spiel Java Basics - Anfänger-Themen 9
H Liste ausgeben (Spiel Hey Fisch (software-challenge) ändern Anzahl Fische) Java Basics - Anfänger-Themen 1
F Game-Engine für textbasierendes Spiel: Architektur? Java Basics - Anfänger-Themen 9
K Erste Schritte Frage Antwort Spiel - Fragen zur Planung Java Basics - Anfänger-Themen 2
J Java Spiel Zufallsauswahl für Zugbeginn Java Basics - Anfänger-Themen 3
J Frage Antwort Spiel - Wie Zeitcountdown realisieren? Java Basics - Anfänger-Themen 2
L Erste Schritte Spiel: Glückliches Sieben Java Basics - Anfänger-Themen 3
T Hangman spiel Java Basics - Anfänger-Themen 5
J 2 Pc's - Spiel gegeneinander ?! Java Basics - Anfänger-Themen 3
V Spiel Programmieren Java Basics - Anfänger-Themen 9
P 2D-Spiel und Bildschirmgröße Java Basics - Anfänger-Themen 2
O Methoden Fehlermeldung(Illegal start of expression) bei 4-Gewinnt-Spiel Java Basics - Anfänger-Themen 5
T Blöcke für ein Jump and Run Spiel Java Basics - Anfänger-Themen 8
S 2D-Spiel mit Threads... Java Basics - Anfänger-Themen 3
S 2D-Spiel im Vollbild an größe anpassen? Java Basics - Anfänger-Themen 3
M hangman spiel Java Basics - Anfänger-Themen 1
K JTextField in ein Spiel einfügen Java Basics - Anfänger-Themen 2
S Mosaik Spiel Java Basics - Anfänger-Themen 19
P memory spiel Java Basics - Anfänger-Themen 10
T OOP Mein erstes Java-Spiel - Schiffe versenken! Java Basics - Anfänger-Themen 2
K Erste Schritte Wie mache ich weiter? (Spiel-Menü) Java Basics - Anfänger-Themen 9
C Java Applet in html. Pong - old school Spiel Java Basics - Anfänger-Themen 10
J Variablen Invalid Character - Error -> Spiel mit Variablenergebnissen Java Basics - Anfänger-Themen 8
K Schere Stein Papier Spiel Java Basics - Anfänger-Themen 3
A Feedback zum Spiel Java Basics - Anfänger-Themen 5
F Hilfe bei meinem Spiel Java Basics - Anfänger-Themen 3
C Lotto Spiel Java Basics - Anfänger-Themen 23
Jagson Dotcom Spiel - Dots Random setzen Java Basics - Anfänger-Themen 8
Dogge Farben-Spiel Java Basics - Anfänger-Themen 20
K Diverse Bugs in einem Snake Spiel Java Basics - Anfänger-Themen 4
2 Lotto-Spiel Java Basics - Anfänger-Themen 9
X Datentypen Probleme mit Char bei meinem 1. Spiel Java Basics - Anfänger-Themen 20
D Erste Schritte Einstieg in die Java Spiel Programmierung Java Basics - Anfänger-Themen 7
H kleines Spiel [Processing] Java Basics - Anfänger-Themen 7
P NullPointerException in Memory-Spiel Java Basics - Anfänger-Themen 5
R Server/Client für Spiel Java Basics - Anfänger-Themen 2
K Hilfe, komme nicht weiter in meinem JAVA-Spiel Java Basics - Anfänger-Themen 3
J Programm(Spiel) neustarten Java Basics - Anfänger-Themen 8
M Suche Beispiel-Spiel Java Basics - Anfänger-Themen 3
C Java Nullpointer Exception in 2D-Spiel Snake Java Basics - Anfänger-Themen 8
M Apfel-Spiel KeyListener Java Basics - Anfänger-Themen 33
J Ranking für Spiel einbauen Java Basics - Anfänger-Themen 12
J Schere, Stein, Papier Spiel - Logikfrage Java Basics - Anfänger-Themen 6
N Lotto Spiel Java Basics - Anfänger-Themen 12
P Schachbrett Spiel Nr. 01 Java Basics - Anfänger-Themen 17
S Nimm Spiel Java Basics - Anfänger-Themen 2
F Spiel geht nicht mehr nach neuer Klasse Sound Java Basics - Anfänger-Themen 18
P Lotto Spiel Java Basics - Anfänger-Themen 50
J BlueJ! 2 kleine Fragen zum Spiel. Java Basics - Anfänger-Themen 3
F Text in Spiel einbinden Java Basics - Anfänger-Themen 17
S Ziel in Spiel einbauen Java Basics - Anfänger-Themen 4
M Java-Programm wird beendet, wenn ich Spiel öffne... Java Basics - Anfänger-Themen 11
G Spiel des Lebens Java Basics - Anfänger-Themen 3
U Bitte Helfen kleines Spiel Java Basics - Anfänger-Themen 9

Ähnliche Java Themen


Oben