java-forum.org
JBoss Seam
Alter Preis: 39,95 €
Jetzt: 0,00 €

zzgl. Versandkosten

Zurück   java-forum.org > Java - Programmierung > Java Basics - Anfänger-Themen

Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern

Antwort    
Themen-Optionen Thema durchsuchen Ansicht
Alt 18.03.2010, 10:55   #1 (permalink)
Benutzer
Byte
 
Registriert seit: 04.05.2009
Beiträge: 65
Abgegebene Danke: 14
Erhielt 0 Danke für 0 Beiträge
Standard Wie bei Spiel "17+4" eine Karte an bestimmte Position hinzufügen

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 Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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

Geändert von Saliver (18.03.2010 um 11:00 Uhr)
Saliver ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 18.03.2010, 11:03   #2 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von SlaterB
 
Registriert seit: 13.11.2005
Beiträge: 20.026
Abgegebene Danke: 0
Erhielt 426 Danke für 423 Beiträge
und du hast dir alle angebotenen Methoden des Interfaces List auch genau angeschaut, besonders die die add, set oder insert oder ähnlich heißen?
List (Java 2 Platform SE v1.4.2)
__________________
Hansa wird Meister.
SlaterB ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 18.03.2010, 11:04   #3 (permalink)
Java-Forum Team
IRC-Operator (Java-Chat)
 
Registriert seit: 02.07.2009
Beiträge: 2.924
Blog-Einträge: 1
Abgegebene Danke: 7
Erhielt 480 Danke für 477 Beiträge
?? Naja, eig. so wie du es schon versucht hast mit der Methode add, oder eben mit hand.add(index, element) 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

Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
  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 nurhand = new ArrayList<String>(); heißen oder?
__________________
Gruß Basti
eRaaaa ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Danke sagt:
Saliver (18.03.2010)
Alt 18.03.2010, 11:10   #4 (permalink)
Benutzer
Byte
Themenstarter
 
Registriert seit: 04.05.2009
Beiträge: 65
Abgegebene Danke: 14
Erhielt 0 Danke für 0 Beiträge
Das bedeutet ich muss die Strings in Objekte von Hand umschreiben?
Saliver ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 18.03.2010, 11:14   #5 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von SlaterB
 
Registriert seit: 13.11.2005
Beiträge: 20.026
Abgegebene Danke: 0
Erhielt 426 Danke für 423 Beiträge
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();
__________________
Hansa wird Meister.
SlaterB ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 18.03.2010, 11:14   #6 (permalink)
Java-Forum Team
IRC-Operator (Java-Chat)
 
Registriert seit: 02.07.2009
Beiträge: 2.924
Blog-Einträge: 1
Abgegebene Danke: 7
Erhielt 480 Danke für 477 Beiträge
Zitat: Saliver
Beitrag anzeigen
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 Code: Quelltext in neuem Fenster öffnen
1
2
//private List<String> hand;
private List<Karte> hand;

Bei getKarteAnPosition müsstest du dementsprechend dann auch eine Karte und keinen String zurückgeben
__________________
Gruß Basti
eRaaaa ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 18.03.2010, 11:17   #7 (permalink)
Benutzer
Byte
Themenstarter
 
Registriert seit: 04.05.2009
Beiträge: 65
Abgegebene Danke: 14
Erhielt 0 Danke für 0 Beiträge
Danke, ich habe eure Ratschläge versucht so gut wie möglich umzusetzen.

Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
   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?

Geändert von Saliver (18.03.2010 um 11:20 Uhr)
Saliver ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 18.03.2010, 11:31   #8 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von SlaterB
 
Registriert seit: 13.11.2005
Beiträge: 20.026
Abgegebene Danke: 0
Erhielt 426 Danke für 423 Beiträge
wer erwartet etwas?
List<String> war vorher schlechter, und insofern ist das Programm besser geworden, ja
__________________
Hansa wird Meister.
SlaterB ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Danke sagt:
Saliver (18.03.2010)
Alt 18.03.2010, 11:53   #9 (permalink)
Benutzer
Byte
Themenstarter
 
Registriert seit: 04.05.2009
Beiträge: 65
Abgegebene Danke: 14
Erhielt 0 Danke für 0 Beiträge
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?

Geändert von Saliver (18.03.2010 um 11:56 Uhr)
Saliver ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 18.03.2010, 11:58   #10 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von SlaterB
 
Registriert seit: 13.11.2005
Beiträge: 20.026
Abgegebene Danke: 0
Erhielt 426 Danke für 423 Beiträge
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
__________________
Hansa wird Meister.
SlaterB ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 18.03.2010, 13:18   #11 (permalink)
Benutzer
Byte
 
Registriert seit: 06.12.2009
Beiträge: 75
Abgegebene Danke: 1
Erhielt 13 Danke für 13 Beiträge
Zitat: Saliver
Wie kann ich das Programm weiter verbessern?
Grundsätzlich:

Mache immer Klammern bei Bedingungen und Schleifen.
Schlecht:
Zitat: Saliver
Java Code: Quelltext in neuem Fenster öffnen
16
17
if (k != null)
    hand.add(k);
Besser:
Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
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):
Zitat: Saliver
Java Code: Quelltext in neuem Fenster öffnen
11
12
13
14
15
16
17
18
19
20
21
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;
Beispiel:
Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// Datei Suit.java
 
/**
 * Contains all possible suits for cards.
 */
public enum Suit
{
    /**
     * Spades
     */
    SPADE,
 
    /**
     * Hearts
     */
    HEART,
 
    /**
     * Diamonds
     */
    DIAMOND,
 
    /**
     * Clubs
     */
    CLUB;
}
Verwendung:
Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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 position einen ungültigen Wert hat, sollte hier eine Exception geworfen werden.
Zitat:
Java Code: Quelltext in neuem Fenster öffnen
37
38
39
40
41
42
public Karte getKarteAnPosition (int position) {
       
      if (position >= 0 && position < hand.size())
         return hand.get(position);
      else
         return null;

Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
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 Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
/**
 * 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: ArrayIndexOutOfBoundsException durch IndexOutOfBoundsException ersetzt.

Geändert von Suinos (19.03.2010 um 08:24 Uhr)
Suinos ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2010, 01:15   #12 (permalink)
Stammbenutzer
Team Plugin-System
Kilobyte
 
Benutzerbild von Ein Keks
 
Registriert seit: 15.04.2009
Beiträge: 181
Abgegebene Danke: 0
Erhielt 25 Danke für 25 Beiträge
Zitat: Suinos
Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
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:
Zitat: JavaDocs von List.get(index)
Throws:
IndexOutOfBoundsException - if the index is out of range (index < 0 || index >= size()).
__________________
Ich habe keine Lösung, aber ich bewundere das Problem
Ein Keks ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2010, 08:20   #13 (permalink)
Benutzer
Byte
 
Registriert seit: 06.12.2009
Beiträge: 75
Abgegebene Danke: 1
Erhielt 13 Danke für 13 Beiträge
Zitat: Ein Keks
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 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:
Zitat: Sun
[...] the compiler does not require that you catch or specify runtime exceptions (although you can).
(Hervorhebung von mir.)

Zitat: Ein Keks
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 Array -Exception werfen? :o
Edit folgt.
Suinos ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 21.03.2010, 23:22   #14 (permalink)
Stammbenutzer
Team Plugin-System
Kilobyte
 
Benutzerbild von Ein Keks
 
Registriert seit: 15.04.2009
Beiträge: 181
Abgegebene Danke: 0
Erhielt 25 Danke für 25 Beiträge
Zitat:
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 (aber leider notwendig)
hast dir nur ein schlechtes beispiel rausgesucht xD

Zitat:
although you can
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^^
__________________
Ich habe keine Lösung, aber ich bewundere das Problem
Ein Keks ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort    

Lesezeichen

Latex Maths & Physics Editor ...

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Hintergrundfarbe einer anderen Klasse ändern PeterVomMond Java Basics - Anfänger-Themen 7 14.04.2009 17:29
MenuBar wird bei Spiel nicht angezeigt jzine Spiele- und Multimedia-Programmierung 5 25.07.2008 01:00
Spiel Fsommer Java Basics - Anfänger-Themen 3 16.09.2007 14:53
Java2D Spiel, beim Hinzufügen eines Bildes ruckelt das ganze thomas.g Spiele- und Multimedia-Programmierung 3 30.09.2005 20:56


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:02 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de