Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
package aufgabe425;
/**
*
* @author Elvis Altherr
* Aufgabe aus Java Buch geschachtelte Schleifen mit * Ausgabe
* Abfrage durch IOTools wieviel Zeilen ausgegeben werden sollen
*/
import static Prog1Tools.IOTools.*;
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int a;
char b ='*';
a = readInteger("AnzahlZeilen = ");
System.out.println("Anzahl Zeilen"+ a);
System.out.println();
for (b = 2 ; a>=b; b='*')
System.out.println('*'+b);
}
}
Wie muss ich den obigen Code anpassen, dass aufgrund des Inputs durch den User, der dann die Anzahl Zeilen ergibt eben die Anzahl Sterne wie in einer Art Dreieck angeordnet werden
Ich so, weil ich es für besser lesbar halte, ich keine verschachtelten Schleifen mag und es um so schneller ist, je mehr Sterne angezeigt werden müssen.
(Natürlich kommt es bei diesem Programm auf Effizienz an! )
Java:
public static void main(String[] args) { public static void main(String[] args) {
int numLines = …
for (int i = 1; i <= numLines; ++i) {
System.out.println(getStars(i));
}
}
public static char[] getStars(int numStars) {
char result[] = new char[numStars];
Arrays.fill(result, '*');
return result;
}
Möglichkeiten gibt es aber viele. Man könnte sich auch erst einen String mit numLines Sternchen erstellen und dann hübsch in jeder Zeile mit substring den benötigen Teil herausschnippeln. Oder man nimmt sich gleich immer nur einen Teil aus einem char-Feld, so zum Beispiel:
Java:
public static void main(String[] args) {
int numLines = 10;
char stars[] = new char[numLines];
Arrays.fill(stars, '*');
for (int i = 1; i <= numLines; ++i) {
System.out.println(new String(stars, 0, i));
}
}
Oder man nimmt einen StringBuilder, kloppt bei jedem Schleifendurchlauf einen Stern dran und gibt den Inhalt aus. So ähnlich hatte es der Themenersteller wohl auch vor. Eigentlich eine gute Idee.
Java:
public static void main(String[] args) {
int numLines = 10;
StringBuilder sb = new StringBuilder(numLines);
for (int i = 1; i <= numLines; ++i) {
sb.append('*');
System.out.println(sb);
}
}
Mhm moment, übersehe ich jetzt was? Dein Code ist doch fast gleich zu dem von Eldorado, nur dass du eben die zweite Schleife versteckst(fill macht doch auch nichts anderes) ?
Mag aber auch sein dass ich da jetzt was übersehe, immerhin sehe ich auch schon main-Methoden doppelt *g*
Mhm moment, übersehe ich jetzt was? Dein Code ist doch fast gleich zu dem von Eldorado, nur dass du eben die zweite Schleife versteckst(fill macht doch auch nichts anderes) ?
Arrays.fill ist eben sehr viel schneller als die Ausgabe eines einzelnes Sternchens auf einer langsamen Konsole, selbst wenn ein Puffer dazwischen ist. Aber ich habe meinen Beitrag editiert und noch zwei andere Lösung hinzugefügt, die sich stärker unterscheiden. Ich möchte hier ja nicht des Plagiates beschuldigt werden!
String starString = "";
for (int i = 1; i < 6; ++i) {
while (starString.length() < i) {
starString += "*";
}
System.out.println(starString);
}
Oder eine Variante, die mehr auf Geschwindigkeit getrimmt ist:
Java:
StringBuilder sb;
for (int i = 1; i < 6; ++i) {
sb = new StringBuilder();
while (sb.length() < i) {
sb.append("*");
}
System.out.println(sb.toString());
}
Ja, und im zweiten Beispiel ebenfalls, ebenso bei jedem Schleifendurchlauf die Erzeugung eines neuen StringBuilders. Aber wozu die vielen Worte: vor etwa 24 Stunden schrieb ich die Lösung bereits hier hinein.
Bitte nicht! Jede "normale" Lösung geht zeilenweise vor, und so eine Lösung wird auch normalerweise erwartet. Mein Code druckt alle nötigen Sterne aus und streut nach einer mysteriösen Formel an den richtigen Stellen Zeilenumbrüche ein. Es ist immer bedenklich, wenn man versucht, "zu clever" zu programmieren, der obige Code ist nur als Scherz und kleines Rätsel gedacht.
Ich wollte jetzt extra wegen meinem kleinen Problem kein neues Thema aufmachen. Mein Problem ist das ich eine Ausgabe in folgender Form haben möchte:
Code:
*
*
*
*
Bei mir sieht das aber eher so aus als ob die Sterne besoffen wären.
Java:
public class Sterne {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String s = "*";
for (int i = 1; i <= n; i++) {
System.out.println(s);
s = " " + s;
System.out.println(s);
}
}
}
Meine Ausgabe sieht allerdings so aus:
Java:
*
*
*
*
Liegt der Fehler jetzt in der for-Schleife oder muss ich irgendwo noch ein Leerzeichen einfügen?
du hast doch nur 3-4 Code-Zeilen, probiere bisschen aus,
zweimal System.out.println(), also zwei Ausgaben pro Schleifendurchlauf scheinen in jedem Fall eine zuviel
du fügst ja auch immer ein Leerzeichen vorne dran.
Eine Ausgabe wie du in deinem Post geschildert hast bekommst du doch ganz einfach so:
Java:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
System.out.println("*");
}
}
du hast doch nur 3-4 Code-Zeilen, probiere bisschen aus,
zweimal System.out.println(), also zwei Ausgaben pro Schleifendurchlauf scheinen in jedem Fall eine zuviel