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.
Hallo, Ich hätte eine Frage, ob mir jemand helfen kann, wie ich mit for-Schleifen ein Sanduhrbild ausgeben kann, z.B. 7
#######
#####
###
#
###
#####
#######
Tipp: Wenn Du es als Code einfügst, dann bleiben Einrückungen bestehen:
Code:
#######
#####
###
#
###
#####
#######
Dann wäre erst einmal die Frage: Was genau schreibst Du denn? Kannst Du da eine Regel erkennen?
Erste Zeile: 0 Leerzeichen, 7 #,
Zweite Zeile: ???
Wenn Du da eine Regel erkennen kannst, dann kannst Du es ggf. als eine Art Gleichung schreiben.
Und dann noch ein Tipp: ggf. hilft es, Dinge aufzuteilen. Du hast einmal etwas absteigendes und dann etwas aufsteigendes. Das evtl. separat betrachten im ersten Schritt. Wenn die Lösungen sich gleichen, dann kann man immer noch überlegen, wie man das zusammen fasst.
Also Aufgabe besteht damit aus zwei Teilen:
1. Teil:
Code:
#######
#####
###
#
2. Teil:
Code:
###
#####
#######
Hilft dir das, um hier etwas weiter zu kommen?
Edit: Copy & Paste der Codes hat paar Leerzeichen verschluckt ... verbessert
Lol, nur nebenbei eine interessante Entdeckung: Nur ein einfaches Bearbeiten / Speichern zerhaut einem etwas die Leerzeichen... Code-Zeilen mit einem Leerzeichen und dann einem # scheinen das eine Leerzeichen zu verlieren ... Wieso auch immer .... @tbone78 Nicht dass es wichtig wäre, aber evtl. ist das ein Punkt, den Du ansehen möchtest?
Danke, eine Lösung hätte ich gefunden. Ich habe schon einen Code, und der schafft es auch, aber ich darf zwischen den #### keine Leerzeichen haben... Könnte man sich den Code anschauen und mir ein paar Tipps geben?
public static void main( String[] args )
{
Scanner sc = new Scanner(System.in);
System.out.println("Geben Sie die Breite der Sanduhr ein!");
int a = Integer.parseInt(sc.nextLine());
SandClockoutput( a );
}
public static void SandClockoutput( int a )
{
for ( int i = 0; i < a - 1; i++ )
{
for ( int j = 0; j < i; j++ )
{
System.out.print( " " );
}
for ( int k = a - i; k > 0; k-- )
{
System.out.print( "#" );
}
System.out.println();
}
for ( int i = 0; i < a; i++ )
{
for ( int j = a - i; j > 1; j-- )
{
System.out.print( " " );
}
for ( int k = 0; k < i + 1; k++ )
{
System.out.print( "#" );
}
System.out.println();
}
}
Du musst bei der Ausgabe der Zeilen quasi vorn und hinten ein # durch ein Leerzeichen ersetzen, somit ergibt sich eine Zeilenzahl
von int rows = Math.round(width / 2.F); pro Kegel. Du ersetzt ja nur ein # pro Zeile, somit erhältst du zu viele Zeilen pro Kegel in der Ausgabe.
Du kannst dir außerdem die halbe Arbeit sparen, wenn du einen StringBuilder befüllst statt einfach alles herauszuschreiben. Für den unteren Kegel kannst du das Resultat des oberen Kegels einfach rückwärts ausgeben.
Java:
int a = ...
final int width = Math.abs(a);
final int rows = Math.round(width / 2.F);
final StringBuilder buffer = new StringBuilder();
// für jede Zeile x mal ...
// buffer.append(' ') oder buffer.append('#')
// buffer.append('\n');
System.out.print(buffer.toString());
buffer.setLength(buffer.length() - width - 2);
System.out.print(buffer.reverse().toString());