Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Java > Allgemeine Java-Programmierung > Wie geht das eleganter?
Antwort
 
Themen-Optionen
Alt 22.11.2005, 18:06   Nach oben    #1
Oliver
Gast
 
Beiträge: n/a
Standard Wie geht das eleganter?

Hallo Leute,

ich bin zwar kein absoluter Javaanfänger aber dies ist mein erster Post in einem Programmiererforum.

Ich komm also gleich zum Punkt: Im Rahmen einer Programmieraufgabe an der Uni, sollen wir ein Spiel schreiben. 4Gewinnt als Konsolenanwendung. Das Programm läuft einwandfrei. Unser Professor legt aber großen Wert auf Eleganz des Quellcodes, daher meine Frage.

Wie kann ich dieses Snippet eleganter schreiben?

Code:
// Prüfen ob es eine Reihe von 4 gleichen Scheiben gibt, nach links unten
    if (pn + 3 < dasFeld[pn].length - 1 && pm + 3 <= dasFeld.length) {
  if (dasFeld[pn][pm].equals(pfarbe) && dasFeld[pn+1][pm+1].equals(pfarbe)&& dasFeld[pn+2][pm+2].equals(pfarbe)&& dasFeld[pn+3][pm+3].equals(pfarbe)) {
        return 1;
      }
    }
Vielen Dank im Vorraus.
Olli
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.11.2005, 18:34   Nach oben    #2
Murray
Benutzer
 
Registriert seit: 15.11.2005
Beiträge: 75
Standard

Eleganz ist immer Geschmackssache. Ich würde auf jeden Fall versuchen, die Konstante "4" (und das gesamte Wissen darum, dass es um 4 in einer Reihe geht), in eine Konstante auszulagern, um später mit geringem Aufwand auch ein "5 gewinnt" oder gar ein "Benutzer gibt ein, wieviel gewinnt" realisieren zu können.

Mir persönlich würde es auch besser gefallen, wenn die Verkettung von gleichartigen Anweisungen, die sich nur ein den Array-Indices unterscheiden, durch eine Schleife ersetzt würde.

Außerdem könnte man für eine ja/nein-Prüfung als Returnwert boolean statt in verwenden.

Code:
final int num = 4; //--- vier in einer Reihe
for ( int i=0; i<num; i++) {
	if ( (pm+i) >= dasFeld.length) {
		//--- Grenze überschritten -> kein Treffer
		return false;
	}
	if ( (pn+i) >= dasFeld[pm+i].length) {
		//--- Grenze überschritten -> kein Treffer
		return false;
	}
	if ( !(dasFeld[pn+i][pm+i].equals( pfarbe)) {
		//--- Felder verschieden -> kein Treffer
		return false;
	}
}
//--- alle Felder gleich -> Treffer
return true;
(Ohne Gewähr; ich habe das weder kompiliert noch ausprobiert)
Murray ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.11.2005, 18:47   Nach oben    #3
Oliver
Gast
 
Beiträge: n/a
Standard

Alles klar,

vielen Dank Murray.

Ich werde das mal ausprobieren und dann bescheid sagen.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.11.2005, 19:11   Nach oben    #4
Oliver
Gast
 
Beiträge: n/a
Standard Fertig

Hey,

es funktioniert auch so. Vielen Dank nochmal.

Gruß Olli
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht 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 An
Pingbacks are An
Refbacks are Aus


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:14 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

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