Ausgabe von Sternen

elias12

Mitglied
Hallo zusammen

mein Programm soll Folgenden Output erzeugen

Beispiel mit 5 Zeilen
Anzahl der Zeilen:5


*
**
***
****
*****

Java:
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

Danke für Eure Hilfe
 

Eldorado

Bekanntes Mitglied
So würde ich es lösen:

Java:
for(int i=0;i <= zeilenAnzahl;i++){
    System.out.println();
    for(int j=0;j < i;j++){
        System.out.print("*");
    }
}

mfg
Eldorado
 
Zuletzt bearbeitet:

Wortraum

Bekanntes Mitglied
So würde ich es lösen:

[…]

mfg
Eldorado
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! :oops: )

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);
    }
}
So, das reicht nun aber. :)
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
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*

/edit: Okay, klingt durch aus plausibel !
 
Zuletzt bearbeitet:

Wortraum

Bekanntes Mitglied
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! :D
 
Zuletzt bearbeitet:

aumaster

Mitglied
Hi,

ja kompliziert geht's immer... :autsch:

Hier mal zwei simple Lösungen für Dein Problem:

Java:
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());
}

Beides ergibt dann halt:

*
**
***
****
*****

Gruß, aumaster
 
Zuletzt bearbeitet:

Landei

Top Contributor
Eine Lösung mit einer Schleife:
Java:
public static void sterne(int zeilen) {
    for(int i = 1; i <= zeilen*(zeilen+1)/2; i++) {
        int r = (int) Math.sqrt(1+8*i);
        System.out.print(r*r == 1+8*i ? "*\n" : "*");
    }
}

Wer erklären kann warum das funktioniert, bekommt eine Luftgitarre!
 
Zuletzt bearbeitet:

Shulyn

Bekanntes Mitglied
Eine Lösung mit einer Schleife:
Java:
public static void sterne(int zeilen) {
    for(int i = 1; i <= zeilen*(zeilen+1)/2; i++) {
        int r = (int) Math.sqrt(1+8*i);
        System.out.print(r*r == 1+8*i ? "*\n" : "*");
    }
}

Wer erklären kann warum das funktioniert, bekommt eine Luftgitarre!

Geschickter einsatz von Primzahlen...
 

Shulyn

Bekanntes Mitglied
hmm doch,
immer wenn (1+8*i) eine primzahl² ist, ist es das letzte zeichen in der aktuellen zeile...

gibt aber bestimmt einen namen dafür ;)
 

Daniel_L

Bekanntes Mitglied
Java:
String starString = "";
for (int i = 1; i < 6; ++i) {
     while (starString.length() < i) {
         starString += "*";
     }
     System.out.println(starString);
}

Gruß, aumaster

Da starString und i gleichmäßig anwachsen, kann man sich hier die while-schleife auch sparen, oder nicht?


Java:
String starString = "";
for (int i = 1; i < 6; ++i) {
     starString += "*";
     System.out.println(starString);
}
 

Wortraum

Bekanntes Mitglied
Hier mal zwei simple Lösungen für Dein Problem:
Ich hätte sie „unnötig verwirrend“ genannt. ;)

Da starString und i gleichmäßig anwachsen, kann man sich hier die while-schleife auch sparen, oder nicht?
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.
 

Landei

Top Contributor
Und weil das so ein interessantes Thema ist, einmal ganz ohne Schleife:

Java:
    public static String sterne(int n) {
        String result = n == 0 ? "" : sterne(n-1) + "*";
        System.out.println(result);
        return result;
    }
 

Landei

Top Contributor
Aber natürlich ist so ein String mit Sternen äußerst nützlich, da sollten wir diese Funktionalität in eine extra Methode auslagern...
Java:
   public static void stars(int n) {
       if (n > 1) stars(n-1);
       System.out.println(line(n));
   }

   public static String line(int n) {
       String s = n == 0 ? "" : line(n/2);
       return s + s + ((n % 2 == 1) ? "*" : "");
   }
 

Landei

Top Contributor
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.
 

El Kabong

Aktives Mitglied
Hallo!

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?


Gruß,
El Kabong
 
Zuletzt bearbeitet:
S

SlaterB

Gast
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
 
G

Gast2

Gast
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("*");
        }
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Methode zur Ausgabe eines Dreiecks aus Sternen schreiben? Java Basics - Anfänger-Themen 2
C Methoden Ausgabe aller Attribute einer Instanz ohne einzelne Methode Java Basics - Anfänger-Themen 3
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
M Ausgabe beim Overloading Java Basics - Anfänger-Themen 3
H Frage zur Ausgabe Java Basics - Anfänger-Themen 4
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
S Einfach-Verkettete-Listen Ausgabe zeigt nur 1. und letzte instanz Java Basics - Anfänger-Themen 2
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
B Binärzahlen auflisten, falsche Ausgabe? Java Basics - Anfänger-Themen 1
M Java Ausgabe der höchsten Zahl Java Basics - Anfänger-Themen 14
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
W Streams in Java und was bedeutet meine Konsolen-Ausgabe? Java Basics - Anfänger-Themen 4
B Automatisierte Ausgabe (Schleife, If-Abfrage?) Java Basics - Anfänger-Themen 24
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
B Deadlock verstehen der Ausgabe! Java Basics - Anfänger-Themen 12
Lion.King Ausgabe mit Eigenschaften Java Basics - Anfänger-Themen 4
D Java Pattern mit X Ausgabe Stern Java Basics - Anfänger-Themen 4
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
Xaver code Tastatur ausgabe Java Basics - Anfänger-Themen 4
R Anfänger: Ausgabe kommt minus raus? Java Basics - Anfänger-Themen 6
K Leerzeile in Konsolen-Ausgabe Java Basics - Anfänger-Themen 4
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
Q return Ausgabe Java Basics - Anfänger-Themen 4
C Java Arrays - Ausgabe in Methode Java Basics - Anfänger-Themen 12
D Best Practice Ausgabe über direkte Ausgabe oder try-catch? Java Basics - Anfänger-Themen 13
S Ausgabe des Variablenwerts Java Basics - Anfänger-Themen 10
I Ausgabe nicht nur senkrecht sondern auch waagerecht. Java Basics - Anfänger-Themen 2
paulen1 Methoden Unerwünschte Ausgabe bei System.out.print in For-Schleife Java Basics - Anfänger-Themen 8
C Ausgabe boolean return ((n==9)||(n==0)); Java Basics - Anfänger-Themen 13
F Double Ausgabe nicht wissenschaftlich Java Basics - Anfänger-Themen 16
danieldemetry Java - Graph Komponenten - Ausgabe Java Basics - Anfänger-Themen 0
S Fragen zu Ausgabe double und float Java Basics - Anfänger-Themen 3
B Ausgabe in TextArea funktioniert nicht Java Basics - Anfänger-Themen 2
D BigDecimal Ausgabe sehr lang. Java Basics - Anfänger-Themen 2
J String Ausgabe Java Basics - Anfänger-Themen 2
TimoN11 IntelliJ , Ausgabe von einem Quellcode in Eingabe eines Quellcodes Java Basics - Anfänger-Themen 1
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
KogoroMori21 Array-Ausgabe Java Basics - Anfänger-Themen 6
JaVaN0oB Wörterraten - Falsche Ausgabe, String/Chars vergleichen Java Basics - Anfänger-Themen 2
E Ausgabe überschreiben Java Basics - Anfänger-Themen 15
D Ausgabe von Array Java Basics - Anfänger-Themen 2
U Ausgabe Java Basics - Anfänger-Themen 4
J Buchstabenhäufigkeit mit Array und Ausgabe des häufigsten Buchstaben Java Basics - Anfänger-Themen 25
V Multiplikationstafel - Ausgabe Java Basics - Anfänger-Themen 4
L Warum ist die Ausgabe anders als das was im Bezeichner steht? Java Basics - Anfänger-Themen 4
M In gleicher zeile hinter ausgabe noch etwas ausgeben Java Basics - Anfänger-Themen 1
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
H Falsche Ausgabe Java Basics - Anfänger-Themen 2
P Klassenübergreifende Ausgabe mittels "getter" nicht möglich Java Basics - Anfänger-Themen 21
R Call-by-Value, Call-by-Reference, Call-by-Name Ausgabe Java Basics - Anfänger-Themen 1
JavaClap "Bruchrechner" liefert Fehler/keine Ausgabe bei Addition und Subtraktion Java Basics - Anfänger-Themen 0
D Warum erfolgt folgende Ausgabe und warum? Java Basics - Anfänger-Themen 4
C Ausgabe in der Konsole Java Basics - Anfänger-Themen 11
M Problem bei Ausgabe Java Basics - Anfänger-Themen 7
C Konvertierung des int typs in den double typ für die Ausgabe mit Nachkommastellen Java Basics - Anfänger-Themen 4
A Ausgabe mit boolean Java Basics - Anfänger-Themen 3
K Probleme bei der Ausgabe - komme nicht weiter :/ Java Basics - Anfänger-Themen 15
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7
Y Methode + Parameters + Ein und Ausgabe Java Basics - Anfänger-Themen 1
K Methodenaufruf /-ausgabe Java Basics - Anfänger-Themen 5
A Wiederholte Ausgabe vermeiden Java Basics - Anfänger-Themen 16
B Collections Objektreferenz-ID in der Ausgabe (Comparator Interface) Java Basics - Anfänger-Themen 2
M Wie analysiert JSON eine toString-Ausgabe ? Java Basics - Anfänger-Themen 1
T Vererbung Verschiedene Fahrzeugtypen mit unterschiedlicher Ausgabe Java Basics - Anfänger-Themen 17
T Ausgabe einer for Schleife Java Basics - Anfänger-Themen 2
S Elemente eines Arrays bei Ausgabe auslassen Java Basics - Anfänger-Themen 2
M Ausgabe einer Liste welche mehrere Stacks enthält Java Basics - Anfänger-Themen 3
T Text-Ausgabe für Textadventure - Organisation Java Basics - Anfänger-Themen 5
G Unterklassen (Klasse für Ausgabe) Java Basics - Anfänger-Themen 4
N Eingabe des Users direkt hinter die Ausgabe Java Basics - Anfänger-Themen 3
ZH1896ZH Wieso diese Ausgabe?? Java Basics - Anfänger-Themen 10
J Fragen zum Code aus dem Buch "Schrödinger programmiert Java 2.te Ausgabe" Java Basics - Anfänger-Themen 6
B Keine Ausgabe .. Woran liegt das? Ich komme nicht weiter Java Basics - Anfänger-Themen 14
K Rechtsbündige Ausgabe von Zahlen Java Basics - Anfänger-Themen 6
V Erste Schritte for-Schleife; Ausgabe soll alle 5 Sekunden erfolgen. Java Basics - Anfänger-Themen 4
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
J Ausgabe Gesamtpreis Java Basics - Anfänger-Themen 39
E Variablen in formatierter Ausgabe Java Basics - Anfänger-Themen 15
B HQL / Hibernate, GroupBy und Ausgabe als Double Java Basics - Anfänger-Themen 1
J StrinBuffer in der Ausgabe Java Basics - Anfänger-Themen 4
H ausgabe? Java Basics - Anfänger-Themen 32
B Ausgabe Zahlenreihe Horizontal Java Basics - Anfänger-Themen 3
V Neue Ausgabe von toString nach Methodenaufruf Java Basics - Anfänger-Themen 9
N Wochentagberechner Ausgabe funktioniert nicht Java Basics - Anfänger-Themen 7
K Array Ausgabe Java Basics - Anfänger-Themen 2
L Datentypen Ausgabe von eigenem Datentypen Java Basics - Anfänger-Themen 2
C 1x1 Ausgabe auf dem Bildschirm Java Basics - Anfänger-Themen 3
L Fehler im Programm bei Ausgabe Java Basics - Anfänger-Themen 21
J Doppelte Ausgabe erzeugen Iterator Java Basics - Anfänger-Themen 6
F Warum ist die Ausgabe hier 1? Java Basics - Anfänger-Themen 4
Bun17 Keine Ausgabe in der Konsole Java Basics - Anfänger-Themen 2
H Ausgabe Java Basics - Anfänger-Themen 6
U Ausgabe von Dateiinhalt während Programmnutzung fehlerhaft Java Basics - Anfänger-Themen 3
Jackii ArrayList ausgabe ohne Dopplung Java Basics - Anfänger-Themen 11
F Erste Schritte Subnet Calculator - Ausgabe der NetID und der Broadcast Java Basics - Anfänger-Themen 4
D Wiederholende Ausgabe Java Basics - Anfänger-Themen 3
G Exception und Ausgabe der Duplikate Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben