Sanduhr

Status
Nicht offen für weitere Antworten.

Morkar

Mitglied
So , der unten gepastete code malt inner shell ein Dreieck dessen spitze nach unten zeigt, funktioniert auch einwandfrei.
Mein Problem ist jetzt: Man soll ein 2tes Dreieck unten dranhängen , so dass es wie eine Sanduhr aussieht.
Ich hab wirklich alles mögliche probiert, for schleife invertiert , neue methoden probiert(z.b komplett neu zeichnen , habe dabei jedoch keine passable möglichkeit gefunden auf die array posi zurückzurechnen(also bei length=5 z.b dass das erste 'x' an line[2] steht)

sofern ich bei obigen dingen keine fehler gemacht habe , bin ich echt verzweifelt
hilfreiche ideen sehr willkommen
???:L


Code:
public class dreieck
{
	public static void main(String args[])
	{
		int length;
		int count = 0;
	

		System.out.println("Wie breit solls werden?");
		length = Input.getInt();

		String zeile = "";

		char line[] = new char[length]; // array stellt eine Zeile dar

		for(int i=0;i<line.length;i++)  // füllt das array mit 'x'
		{
			line[i]='x';
		}


	while(count != length)
	{
		for(int i=0;i<length;i++) // entfernt nach und nach die 'x' aus dem array 
		{
			
			if( count != 0 )
			{
				line[count-1]=' ';
				line[line.length-count]=' ';
			}
			
			zeile = zeile + line[i];
			

		}
		
		count++; // zählt mehr zeilen als ausgegeben werden (quasi komplett runter - auch die zeilen die noch fehlen)
		System.out.println(zeile);
		// if(count == (int) ((length/2)+1) ) 
		//{ System.out.println(zeile); zeile = ""; }
		zeile = "";

	}
	}
}
 

Quaxli

Top Contributor
Code:
public class Sanduhr {

	public static void main(String[] args) {
		
		int size = 13;
		int temp = size;
		
		while(temp>0){
			
			int blank = size - temp;
			blank /=2;
			
			for(int n=0;n<blank;n++){
				System.out.print(" ");
			}

			for(int n=0;n<temp;n++){
				System.out.print("X");
			}
			
			for(int n=0;n<blank;n++){
				System.out.print(" ");
			}
			
  		System.out.println("");
			temp -=2;
			
		}
		
		temp = 1;
		
		while(temp<=size){
			
			int blank = size - temp;
			blank /=2;
			
			for(int n=0;n<blank;n++){
				System.out.print(" ");
			}

			for(int n=0;n<temp;n++){
				System.out.print("X");
			}
			
			for(int n=0;n<blank;n++){
				System.out.print(" ");
			}
			
			System.out.println("");
			temp +=2;
			
		}

	}

}
 

Morkar

Mitglied
mh ja ganz anders , nagut , hab mir noch das zamgefummelt , aber das geht nur wenn die breite ungerade is , ansonsten
gehts übern array index hinaus -.-

Code:
public class dreieck3
{
	public static void main(String args[])
	{
		int length ;
		length = Input.getInt();
		char[] line = new char[length];
		
		for(int i=0;i<line.length;i++)
		{
			line[i] = ' ';
		}
		
		
		for(int a=0;a<((line.length)/2)+1;a++)
		{
			line[(int) (((line.length)-1)/2)+a] = 'x';
			line[(int) (((line.length)-1)/2)-a] = 'x';
		
		
			for(int i=0;i<line.length;i++)
			{
				System.out.print(line[i]);
			}
			
			System.out.println();
		}
		
		
	}
}

was mich aber extrem wurmt is dass ich meinen oberen code nicht einfach "umdrehen" kann , sprich er tuts selbe , nur eben umgedreht , und ich komm ernsthaft net drauf wies gehn könnte Oo''

ohnes schlecht reden zu wollen , deins geht nicht mit geraden werten ???:L
 
G

Guest

Gast
Schon mal was von Rekursion gehört? Das ist doch das klassische Beispiel dafür. Damit kannst du du praktisch das gezeichnete nochmals mit anderen Vorzeichen oder Startwerten zeichnen.
 

Morkar

Mitglied
Jap ist mir bekannt , kann den Gedankengang nur nich ganz nachvollziehn
wenn ich das ganze rekursiv mache krieg ich ca sowas ( also 1ste zeile "nur x" wird zu "nur ' ')

xxxxx
xxx
x

x x
xx xx

womit ich wieder beim problem wäre , wie ich ihm sagen kann wo er das erste x setzen soll
(siehe vorletzten post , das funkt eben nur bei ungerade werten , bei geraden müsste er ja 2 setzen , krieg ich nich hin)
 

Morkar

Mitglied
Hab mir jetzt mal was (hoffentlich) rekursives gebastelt , kommt mir sehr sinnvoll vor nachdem ich drüber nachgedacht hab , komm aber jetzt nicht weiter

Code:
public class rekursiv2
{
	public static void dreieck (char line[],String zeile,int count)
	{
	
			for(int i=0;i<line.length;i++)
			{

				if( count != 0 )
				{
					line[count-1]=' ';
					line[line.length-count]=' ';
				}

				zeile = zeile + line[i];


			}

		count++; 
		System.out.println(zeile);
		zeile = "";
		if(count != 3) {dreieck(line,zeile,count);} //abbruchbedingung unklar
		
		
		
		
	}
	
	public static void main(String args[])
	{	
		
		int length = 5;
		int count = 0;
		char line[] = new char[length];
		String zeile = "";
		
		for(int i=0;i<line.length;i++) { line[i]='x'; }
		
		dreieck(line,zeile,count);
	}
}

krieg das grade gedanklich nich wirklich hin -.- hab heut auch keinen guten tag
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben