Portal > Foren > Java > Allgemeine Java-Programmierung > Wie geht das eleganter?
Antwort
 
Themen-Optionen Thema durchsuchen
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
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.11.2005, 18:34 Nach oben    #2
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  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen 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.
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen 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
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen 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 Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

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

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:08 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

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