Problem - Schleife

jockframe

Mitglied
hey, ich habe 2 Aufgabenstellungen und eine ist gelöst :

"Schreiben Sie ein Java-Programm, welches das folgende Dreieck ausgibt:
1
12
123
. . . .
123456789"

Nun muss ich das genau umgekehrt machen, also : "
Code:
        1
       12
      123
  . . . .
123456789

Ich bekomm es nicht hin.

Kann mir jemand weiter helfen?
 
Zuletzt bearbeitet von einem Moderator:
So z.B.:

Code:
String s ="";
for(int i=1; i<10; i++){
	s=s+i;
	System.out.println(s);
}



Edit: auch sorry des war die Lösung für den ersten Aufgabenteil...
Den 2ten kannst du z.B. so machen:

Code:
	String s ="         ";
	for(int i=1; i<10; i++){
		s = s+i; 
		System.out.println(s.substring(i, 9+i));
	}
 
Zuletzt bearbeitet:
@jockframe: Wo ist dein Ansatz? Wo gibts Probleme?
Wir machen nicht deine Hausaufgaben. Etwas mehr Eigeninitiative musst du schon zeigen.
 
Schleifen helfen wirklich auch bei der zweiten Aufgabe, man kann auch von 10 bis 1 runter zählen und in einer zweiten Schleife inherhalb der ersten entsprechend viele Leerzeichen ausgeben
 
Ich hab es mal so versucht:
Java:
for (int zeile2=1; zeile2<=9;++zeile2){
	for(int spalte1=1,y1=0;spalte1<=9;++spalte1)
	 if(spalte1<=9)
	 System.out.print(" ");
	 else 
	   y1= spalte1+zeile2-9;
	   System.out.print(y1);}
er zeigt mir immer bei der variabel "y1" im out.print an das was falsch wäre, aber ich habe die Variabel ja deklaiert
 
Ich hab es mal so versucht:
Java:
for (int zeile2=1; zeile2<=9;++zeile2){
	for(int spalte1=1,y1=0;spalte1<=9;++spalte1)
	 if(spalte1<=9)
	 System.out.print(" ");
	 else 
	   y1= spalte1+zeile2-9;
	   System.out.print(y1);}
er zeigt mir immer bei der variabel "y1" im out.print an das was falsch wäre, aber ich habe die Variabel ja deklaiert

mach mal bei allen if und for die runden klammern dran, dann wirds lesbarer und weniger fehler anfällig ;-)

nach einem if, else, for ohne { zählt nur die erste zeile zu dem block den es betreffen soll
 
Ich habe ne klammer vergessen.

Aber mit dem Text gibt er mir trotzdem nicht das aus was ich sehen will.

Java:
public class neu{

public static void main(String[] args){
  
  for (int zeile2=1; zeile2<=9;++zeile2){
    for(int spalte1=1,y1;spalte1<=9;++spalte1)
      if(spalte1<=9)
	    System.out.print(" ");
	  else{ 
	  
	 y1= spalte1+zeile2-9;
	   System.out.print(y1);}}
 
> gibt er mir trotzdem nicht das aus was ich sehen will.

ja immer langsam, weil er eben noch falsch ist,
überlege genau was passieren soll und setze das um

erste Zeile, wieviele Leerzeichen, welcher Text soll erscheinen?
klappt das auch im einzelnen? prüfen, und Code korrigieren usw.

wobei hier recht deutlich ein Fehler erkennbar ist, die spalte1-Schleife geht immer bis 9,
das if prüft ob <= 9 und malt ein Leerzeichen,
es werden immer nur Leerzeichen gemalt, nie der else-Fall durchlaufen
 
mach mal bei allen if und for die runden klammern dran, dann wirds lesbarer und weniger fehler anfällig ;-)

nach einem if, else, for ohne { zählt nur die erste zeile zu dem block den es betreffen soll

mach das!!!!

Java:
for(int spalte1=1,y1;spalte1<=9;++spalte1)
      if(spalte1<=9)
        System.out.print(" ");
      else{
bei so einem Müll, b ich mir nach weit mehr als 100.000 Zeilen Java Code nicht mal sicher was passiert
 
Als "Exil-C'ler" würde ich es evtl. so lösen:

linksbündig:
Java:
public class Test 
{
	public static void main(String[] args)
	{
		StringBuilder sb = new StringBuilder();
		
		for (int i = 1; i < 10; i++)
		{
			sb.append(i);
			System.out.printf("%-9s\n", sb);
		}
	}
}

Ausgabe:
Code:
1        
12       
123      
1234     
12345    
123456   
1234567  
12345678 
123456789

rechtsbündig:
Java:
public class Test 
{
	public static void main(String[] args)
	{
		StringBuilder sb = new StringBuilder();
		
		for (int i = 1; i < 10; i++)
		{
			sb.append(i);
			System.out.printf("%9s\n", sb);
		}
	}
}

Ausgabe:
Code:
        1
       12
      123
     1234
    12345
   123456
  1234567
 12345678
123456789

Wie auch immer, für diese Aufgabenstellung gibt es sicherlich mindestens 10-20 unterschiedliche Ansätze und Lösungen ;-)
 
Deine Lösung funktioniert gut spad. Ich versteh nur nicht was du da genau gemacht hast und wieso.


Hmm... ist hier anscheinend nicht so gern gesehen, wenn man Lösungen angibt.
Aber jetzt ist es eh schon zu spät 😉

Also:
mit der Zeile:
Code:
String s ="         ";
wird ein String mit 9 Leerzeichen initialisiert, des muss gemacht werden, da des ja alles rechtsbündig sein soll.

In der for-Schleife wird dann an an s immer des akutelle i angehangen.
Da des ganze aber rechtsbündig bleiben soll musst du in jedem Schritt eines der führenden Leerzeichen wegnehmen.
Des hab ich mit
Code:
s.substring(i, 9+i)
gemacht.

Hier wird also immer der Teilstring rausgezogen der die letzten 9 Zeichen beinhaltet.
z.B. sieht der String in Schritt 2 so aus (#=Leerzeichen)
#########12

und der substring(2, 9+2) wäre dann #######12


Aber schau besser, dass du deine eigene Version zum laufen bringst - man lernt schließlich fürs Leben 😉
 

Zurück
Oben