Viereck mit Sterne - Anfänger bittet um Kritik und Anregung

Phoebus1974

Neues Mitglied
Hallo,
ich habe soeben mein erstes Programm in Java geschrieben und würde jetzt gerne eure Meinung zu diesem Programm wissen. Was kann ich noch besser machen bzw. wie würdet ihr dieses Programm schreiben.

Die Problemstellung: In der Konsole soll ein Viereck mit Sternen gezeichnet werden.
Code:
********
*      *
*      *
*      *
*      *
*      *
*      *
********


Java:
public static void main(String[] args) {

        //Seitengröße

        int seiteAsterne = 10;
        int seiteBzeilen = 20;
        int aSterne = seiteAsterne - 1;
        //Viereckdarstellung

        // Zählschleife für die Zeilen beginnt
        for (int sBz = 1; sBz <= seiteBzeilen; sBz++) {

            // Schleife für die Sterne beginnt
            if (sBz == 1 | sBz == seiteBzeilen) {
                for (int sAs = 1; sAs <= seiteAsterne; sAs++) {
                    System.out.print("*"); //Hier wirde die erste und letzte Zeile geschrieben
                }
                System.out.print("\n");
            } else if (sBz > 1 | sBz <= seiteBzeilen) {

                //Hier wird die 2te bis vorletzte Zeile geschrieben
                for (int sAs = 1; sAs <= seiteAsterne; sAs++) {
                    if (sAs == 1) {
                        System.out.print("*");
                    } else if (sAs == 2 | sAs <= aSterne) {
                        System.out.print(" ");
                    } else if (sAs == seiteAsterne) {
                        System.out.print("*");
                    }

                }
                System.out.print("\n");
            }
        }
    }
Danke!
 
Du hast ziemlich viele überflüssige Abfragen. Dein Programm könnte auch so aussehen:
Java:
public static void main(String[] args) {
	char zeichen = '*';
	int seiteAsterne = 10;
	int seiteBzeilen = 10;
	for (int i = 0; i < seiteAsterne; i++) {
		System.out.print(zeichen);
	}
	System.out.println();
	for (int i = 0; i < seiteBzeilen - 2; i++) {
		System.out.print(zeichen);
		for (int j = 0; j < seiteAsterne - 2; j++) {
			System.out.print(" ");
		}
		System.out.println(zeichen);
	}

	for (int i = 0; i < seiteAsterne; i++) {
		System.out.print(zeichen);
	}
	System.out.println();
}

Meiner Meinung nach könntest du dir direkt angewöhnen Schleifen nicht von
Code:
1..<=
, sondern
Code:
0..<
schreiben. Natürlich macht es nicht pauschal immer Sinn, es ist eher Geschmackssache, aber dennoch wirkt die "0..<" Variante vertrauter.
 
Zuletzt bearbeitet:
Warum habt ihr soviele Schleifen? Man braucht doch nur zwei

Java:
	public static void main(String[] args) {
		int breite = 10;
		int höhe = 10;
		for(int zeile = 1; zeile <= höhe; zeile++) {
			for (int spalte = 1; spalte <= breite; spalte++) {
				if (spalte == 1 || spalte == breite || zeile == 1 || zeile == höhe) {
					System.out.print("*");
				} else {
					System.out.print(" ");
				}
			}
			System.out.println();
		}
	}
 
Sorry XHelp und gasssst,

klar habt ihr Recht damit, dass man gewisse Sachen kompakter, evtl. auch besser proggen könnte...ABER für das erste Programm ist das sauber und gut programmiert.

Der Quellcode ist kommentiert, korrekt eingerückt, die Benamung der Variablen ist evtl. eigenwillig, aber nachvollziehbar. Für das erste Programm ist das eine reife Leistung.
 
...
ich habe soeben mein erstes Programm in Java geschrieben und würde jetzt gerne eure Meinung zu diesem Programm wissen. ...

na ja, er fragt schon auch nach einem Feedback für sein Programm.
Eure Antworten sind natürlich absolut korrekt und sicherlich auch sinnig (wobei ich mir das nicht weiter angeschaut habe), nur vermisse ich dabei das Lob für den TO.

Denn im Gegensatz zu vielen anderen Noobs hier, macht er hundert Sachen richtig. Bspw. Java-Tags^^, eine vernünftige Themenüberschrift und der Code ist grundsätzlich sauber und korrekt.

Egal, ich finde das es grundsätzlich sehr gut ist...Verbesserungsmöglichkeiten haben gasssst und XHelp aufgezeigt, das Lob wollte ich noch bringen und dann soll es das gewesen sein. 🙂
 
Wenn man sich eine Hilfsmethode [c]createString(char c, int len)[/c] schreibt, dann kann man sogar so etwas kurzes schreiben:
Java:
int width = ...;
int height = ...;

System.out.println(createString('*', width));
for (int i = 2; i < height; i++) {
    System.out.println('*' + createString(' ', width) + '*');
}
System.out.println(createString('*', width));
 
Denn im Gegensatz zu vielen anderen Noobs hier, macht er hundert Sachen richtig. Bspw. Java-Tags^^, eine vernünftige Themenüberschrift und der Code ist grundsätzlich sauber und korrekt.
Da hast du Recht, einen so guten Anfänger-Beitrag sieht man selten...:toll::toll:

Wie dem auch sei, eine Kleinigkeit hab ich noch. Die Varaiblennamen
Code:
ersteASterne
und
Code:
ersteBZeile
finde ich irgendwie suboptimal, wie wär´s mit anz_zeilen, anz_spalten?
 
Hallo,
ich habe soeben mein erstes Programm in Java geschrieben und würde jetzt gerne eure Meinung zu diesem Programm wissen. Was kann ich noch besser machen bzw. wie würdet ihr dieses Programm schreiben.

Also wenn das tatsächlich dein erstes selbstgeschriebenes Programm war - dann ist das exzellente Arbeit. Hut ab! 🙂
Für den Murray-Bozinsky-Orden reicht es aber dennoch nicht, denn ich sehe da noch einen winzigen Schönheitsfehler: In der Zeile
Java:
else if (sAs == 2 | sAs <= aSterne)
ist die erste Bedingung unnötig (die ist ja implizit in der zweiten Bedingung mit enthalten). Folglich kann man den [c]sAs == 2[/c]-Teil auch weglassen. Noch schöner wäre allerdings diese Lösung:
Java:
else if (sAs > 1  &  sAs < aSterne)
Das würde den Sinn der if-Abfrage denke ich noch am ehesten wiedergeben, nämlich das in diesen else-Teil nur dann verzweigt werden soll wenn sAs zwischen 1 und aSterne liegt. Außerdem wird das Programm dadurch etwas robuster (wenn du dein Programm irgendwann mal abänderst/ausbaust, und dadurch z.B. auch negative Werte für sAs möglich werden, dann kann eine unpräsize formulierte if-Bedingung irgendwo im Programm durchaus eine lange Fehlersuche erfordern. Daher sollte man besser gleich von Anfang an exakt formulieren was man erreichen möchte. Je genauer man seine Werte unter Kontrolle hat desto leichter wird eine Fehlersuche 😉).
 
Hallo Communites,

danke für eure Meinung und Verbesserungsvorschläge, werde bei Gelegenheit das Programm noch ein bisschen modifizieren.

Gruß Phoebus1974
 

Zurück
Oben