Logisches Problem (Blutiger Anfänger)

StupidAttack

Bekanntes Mitglied
Hallo liebe Java Community

Ich beschäftige mich nun seit 2 Wochen autodidaktisch mit Java, da ich Kenntnisse von
Programmiersprachen für die immer rascher vernetzte Gesellschaft als ein Muss betrachte.

Bis hierher habe ich keine grösseren Probleme gehabt, doch nun bin ich in einen logischen Sumpf geraten.

Die Aufgabe:

Schreiben Sie ein Programm, das einen Baum aus Sternen auf den Bildschirm ausgibt:
*
***
*****
*******
*********
***********
*************
***************
***
***
***

Unglücklich formatiert; ich weiss.

Diese Aufgabe will ich mit While-Schleifen meistern. Soweit bin ich gekommen (folgender Code ist fehlerfrei compilierbar):
Java:
import java.io.*;
class Baum		//Dieses Programm berechnet X hoch N
{	
	public static void main( String [] args) throws IOException
	{
	BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in));

	String Einlesen;
 	int N;
	int zaehler1 = 1;
	int zaehler2;
	int N2;
	

	System.out.println("Geben sie nun die Baumbreite ein! (ungerade ZAHL!)");
	Einlesen = stdin.readLine();
	N = Integer.parseInt(Einlesen);
	
	while ( N >= 1)
	{
	
	while ( N >=zaehler1)
	{
	
	
	System.out.print("*");
	zaehler1 = zaehler1 + 1;
	}
	N = N - 2;
	zaehler1 = 1;
	System.out.println();
	}
	

	
	
	
	}
}


Dieses Programm gibt eine umgekehrte Piramidenhälfte ohne Baumstamm aus. Die Baumbreitenhälfte soll kann der Benutzer eingeben. Alao vereinfacht gesagt so etwas:

***********
*********
*******
*****
***
*
usw.


Konkret habe ich nun folgendes Problem: Ich kriege es hin eine While Schleife zu coden die die korrekte Zahl Sterne ausgibt. Doch ich weiss nicht wie ich das Setzen der Leerzeichen vor und nach den Schleifen einbauen soll. Folgendes Grundgerüst habe ich mir überlegt:

...
BLUB = 1;


while ((N-3) >= zaehler1 ) // (N-3) ist die genaue Anzahl Zeilen für einen Baum mit Baumbreite N
{
While()
{
//Leerzeichen ausgeben
}


While(zaehler1> = BLUB)
{
System.out.println("*"); // Gibt die Sterne (*) aus.

BLUB = BLUB +0.5;
}

While()
{
//Leerzeichen ausgeben
}



zaehler1 = zaehler1+1;
BLUB = 1;
System.out.println();
}


Also: Die äusserste Schleife legt fest wie viele Zeilen erstellt werden. Die erste und dritte While Schleife gibt die Leerzeichen aus. Die zweite Schleife gibt die Sterne aus.

Nun die Frage: Wie kann ich die 1. und 3. Schleife mit dem inkrement zaehler1 so verknüpfen dass die
Leerzeichen nach der Bedingung (Leerzeichen = N - Sterne ) ausgegeben werden...?

Oder ist der Ansatz komplett falsch?

Ich bin dankbar für jede Hilfe und wünsche euch allen schöne Osterfeiertage...
 

thomasmk

Mitglied
Schreiben Sie ein Programm, das einen Baum aus Sternen auf den Bildschirm ausgibt:
Setze doch [ code ] - tags, dann kann man auch sehen, was denn eigentlich rauskommen soll:
Code:
       *
      ***
     *****
    *******
   *********
  ***********
 *************
***************
      ***
      ***
      ***
Java:
class Baum		//Dieses Programm berechnet X hoch N
Und ich dachte das Programm zeichnet einen Baum ;-)
Java:
	String Einlesen;
 	int N;
	int zaehler1 = 1;
	int zaehler2;
	int N2;
Nur ein kleiner Hinweis am Rande: laut Convention beginnen Klassennamen mit einem Großbuchstabe und Variablennamen mit einem Kleinbuchstabe. Den Konventionen enstprechend wäre dies dann:
Java:
	String einlesen;
 	int n;
	int zaehler1 = 1;
	int zaehler2;
	int n2;
Konkret habe ich nun folgendes Problem: Ich kriege es hin eine While Schleife zu coden die die korrekte Zahl Sterne ausgibt. Doch ich weiss nicht wie ich das Setzen der Leerzeichen vor und nach den Schleifen einbauen soll.
Vor UND nach den Schleifen? Es reicht doch nur vor. Oder willst du auch auf der rechten Seite des Baums Leerzeichen setzen? Gut, das würde nicht schaden, aber die Leerzeichen vor dem Zeilenende sieht man ja normalerweise nicht.

Folgendes Grundgerüst habe ich mir überlegt:

...
BLUB = 1;


while ((N-3) >= zaehler1 ) // (N-3) ist die genaue Anzahl Zeilen für einen Baum mit Baumbreite N
{
While()
{
//Leerzeichen ausgeben
}
Also: Die letzte Zeile vom Baum (vergessen wir den Stamm erstmal) bekommt wieviele Leerzeichen vorangestellt? Ich würde sagen 0. Und die vorletzte Zeile? ich würde sagen 1 Leerzeichen. Und davor 2 und davor 3. Die x-te Zeile bekommt also n-x Leerzeichen vorangestellt, wobei n die Anzahl der Zeilen ist. n in meiner Rechnung ist bei dir wohl N-3 und x ist bei dir zaehler 1.
Reicht das als Gedächtnisanstubs?
 

StupidAttack

Bekanntes Mitglied
Also: Die letzte Zeile vom Baum (vergessen wir den Stamm erstmal) bekommt wieviele Leerzeichen vorangestellt? Ich würde sagen 0. Und die vorletzte Zeile? ich würde sagen 1 Leerzeichen. Und davor 2 und davor 3. Die x-te Zeile bekommt also n-x Leerzeichen vorangestellt, wobei n die Anzahl der Zeilen ist. n in meiner Rechnung ist bei dir wohl N-3 und x ist bei dir zaehler 1.
Reicht das als Gedächtnisanstubs?

Danke Dir!

Und ja du hast recht, einmal eine Leerzeichen-Schleife reicht vollkommen, da hat sich bei mir wohl die Logik schon deutlich früher verabschiedet... :)

Und ja du hast mir auch sehr geholfen, das Ding schreibe ich noch heut fertig, wär ja gelacht ohne Sterne schlafen zu gehen!

Nochmals Danke...
 

StupidAttack

Bekanntes Mitglied
Ich habe mich wohl gestern übernommen. Heute morgen einen frischen Versuch gestartet und von Grund auf alles nochmals überlegt. Kannst du das so bestätigen?


Leerzeichen Sterne (*)
1.Zeile n-1 n-(n-1)
2.Zeile n-2 n-(n-3)
3.Zeile n-3 n-(n-5)
4.Zeile n-4 n-(n-7)
5.Zeile n-5 n-(n-9)
X.Zeile n-x n-(n-(2x-1)) = 2x-1

n-(n-(2x-1)) = n-(n-2x+1) = n-n+2x-1= 2x-1

Weswegen ich da das n mit reingenommen habe ist komisch...:)

Jedenfalls habe ich folgendes, fehlerfrei compilierbares Programm erstellt, welches den Baum ohne Strunk zeichnet:
Java:
import java.io.*;
class Baum		//Dieses Programm macht nen hübschen Baum
{	
	public static void main( String [] args) throws IOException
	{
	BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in));

	String Einlesen;
	int x = 1;
	int n;
	int zaehler = 1;
	int zaehler2 = 1;
	

	System.out.println("Geben sie nun die Baumbreite ein! ");
	Einlesen = stdin.readLine();
	n = Integer.parseInt(Einlesen);
	
	while ( n >= x)
	{
	
		while ( (n-x) >= zaehler )
		{
		System.out.print(" ");
		zaehler = zaehler + 1;	
		}


		while ( (2*x-1) >= zaehler2 )
		{
		System.out.print("*");
		zaehler2 = zaehler2 + 1;	
		}
		


	

	zaehler = 1;
	zaehler2 = 1;
	x = x + 1; 

	System.out.println();
	
	
	}
	
	
	}
}

Ps: Quellcode ist lizenzfrei allen zugänglich :)
 

Java.getSkill()

Aktives Mitglied
hi,

Du solltest viel aussagekräftigere Variablennamen benutzen. In 3 Tagen hast du 0 Plan was x, n, oder z war.

Die Lösungsidee hat mir aber sehr gut gefallen :).
Den ersten Stern finden und dann die restlichen in dieser Zeile dazuschreiben.



[XML]Wie hoch ist der Baum?

10
Baumstammbreite?
4
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
****
****
****[/XML]

Java:
package baum;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ZeichneBaum {

	public static void main(String[] args) throws Exception, IOException {
		
	   BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in));

		int spaltencounter=1;
		
		System.out.println("Wie hoch ist der Baum?\n");
		int baumhoehe=Integer.parseInt(stdin.readLine());
		
		System.out.println("Baumstammbreite?");
		int baumStammBreite=Integer.parseInt(stdin.readLine());
		//startpunkt ab welchem Stern der Baumstamm anfangen soll
		int startpunkt =((baumhoehe*2-1)-baumStammBreite)/2;

		
		for(int zeile=1;zeile<=baumhoehe;zeile++){
			
			for(int spalte=1;spalte<=(baumhoehe*2)-1;spalte++){
							
				if(baumhoehe>spaltencounter){
					System.out.print(" ");
					spaltencounter++;}
					}
			
			int sterne =1;
			while(sterne<=(zeile*2-1)){
				System.out.print("*");
				sterne++;
			}
						
			spaltencounter=zeile+1;
			System.out.println();
			
	
		if (zeile==baumhoehe){
			zeichneBaumStamm( baumhoehe);
			
		for(int baumStammHoehe=1;baumStammHoehe<4;baumStammHoehe++){
			for(int spalteBaumStamm=1;spalteBaumStamm<baumhoehe*2-1;spalteBaumStamm++){
			
			if(spalteBaumStamm<=startpunkt){
			System.out.print(" ");
			}else if(spalteBaumStamm<=startpunkt+baumStammBreite){
				System.out.print("*");
			}
		}
		System.out.println();
		}		
	}
	}
			
	}

	private static void zeichneBaumStamm(int baumhoehe) {
		
		
}
}
/*

import java.io.*;
public class ZeichneBaum      //Dieses Programm macht nen hübschen Baum
{   
    public static void main( String [] args) throws IOException
    {
    BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in));
 
    String Einlesen;
    int x = 1;
    int baumhoehe;
    int zaehler = 1;
    int zaehler2 = 1;
    
 
    System.out.println("Geben sie nun die Baumbhoehe ein! ");
    Einlesen = stdin.readLine();
    baumhoehe = Integer.parseInt(Einlesen);
    
    while ( baumhoehe >= x)
    {
    
        while ( (baumhoehe-x) >= zaehler )
        {
        System.out.print(" ");
        zaehler = zaehler + 1;  
        }
 
 
        while ( (2*x-1) >= zaehler2 )
        {
        System.out.print("*");
        zaehler2 = zaehler2 + 1;    
        }
        
 
    zaehler = 1;
    zaehler2 = 1;
    x = x + 1; 
 
    System.out.println();
    
    
    }
    
    
    }
}
*/
 

StupidAttack

Bekanntes Mitglied
Danke für die Mühe! Obwohl ich noch nicht alles verstehe sehe ich die Idee hinter dem Code...

Ich denke dieses Thema hat sich geklärt...

Ps: ich konnte nicht früher antworten; war bis eben verreist.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B logisches Problem Java Basics - Anfänger-Themen 18
A Logisches Denken?! Ihr seid gefragt. Java Basics - Anfänger-Themen 3
G logisches AND Java Basics - Anfänger-Themen 4
I logisches Nicht Java Basics - Anfänger-Themen 8
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
H Problem mit Verzweigungen Java Basics - Anfänger-Themen 6
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
A Code Problem Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
K jackson Mapping - Problem mit Zeitzonen Java Basics - Anfänger-Themen 10
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D Schleifen Problem Java Basics - Anfänger-Themen 2
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J JAVA-Problem blockiert MEDIATHEKVIEW Java Basics - Anfänger-Themen 13
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8
J extends Problem Java Basics - Anfänger-Themen 2
C Polymorphie-Problem Java Basics - Anfänger-Themen 3
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
amgadalghabra algorithmisches Problem Java Basics - Anfänger-Themen 19
J Traveling Salesman Problem [Arrays] Java Basics - Anfänger-Themen 9
R ArrayList Problem Java Basics - Anfänger-Themen 6
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
C RegEx Problem Java Basics - Anfänger-Themen 4
J Anfänger TicTacToe, Problem bei Gewinnoption, sowohl Unentschieden Java Basics - Anfänger-Themen 8
E Taschenrechner GUI Problem mit Fehlerhandling Java Basics - Anfänger-Themen 6
M Input/Output Fallunterscheidung Problem Java Basics - Anfänger-Themen 17
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
M Problem bei Ausgabe Java Basics - Anfänger-Themen 7
Splayfer Java Array Problem... Java Basics - Anfänger-Themen 2
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
G Subset sum problem mit Backtracking Java Basics - Anfänger-Themen 18
N Problem mit Scanner Java Basics - Anfänger-Themen 2
J Klassen Problem Java Basics - Anfänger-Themen 8
A Out.format problem. Java Basics - Anfänger-Themen 3
J Problem bei der Programmierung eines Tannenbaums Java Basics - Anfänger-Themen 9
A Array problem Java Basics - Anfänger-Themen 16
2 Taschenrechner mit GUI Problem bei der Berechnung Java Basics - Anfänger-Themen 8
W Remote Method Invocation RMI - Problem Java Basics - Anfänger-Themen 0
I Ich habe ein Problem Java Basics - Anfänger-Themen 3
A Problem bei returnen eines Wertes Java Basics - Anfänger-Themen 6
M Regex Erstellung Problem Java Basics - Anfänger-Themen 2
D Input/Output Problem bei der Benutzereingabe eines Befehls Java Basics - Anfänger-Themen 14
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
F Habe ein problem mit dem ActionListener Java Basics - Anfänger-Themen 3
C Regex-Problem Java Basics - Anfänger-Themen 4
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
M Problem in der Modellierung Java Basics - Anfänger-Themen 20
W Wo ist das URL-Problem ? Java Basics - Anfänger-Themen 1
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
D FileWriter / FileReader Problem Java Basics - Anfänger-Themen 10
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
S Collections funktionale Listen (ListNode<E>) review und problem beim clone Java Basics - Anfänger-Themen 0
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
C Problem mit If Else If und Überprüfung eines Counters Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben