Methoden Gleichseitiges Dreieck erstellen

Nachteule

Mitglied
Hi Leute 🙂
Ich bin ebenfalls Java-Neuling und probiere gerade folgende Aufgabe:
Ich soll ein Programm schreiben, das eine Zahl n >= 0 einliest und dann ein gleichseitiges Dreieck aus
Sternchen erstellt.
z.B. für n = 3

___*
_*__*
*__*__*
zwischen zwei sternen soll immer ein leerzeichen sein.
Ich soll nun zwei Methoden verwenden:
In der main-Methode soll die Eingabe und eine Fehlermeldung stehen,
in der private-methode, wie man auf das Ergebnis kommt.
Das ist bisher mein Ansatz:

Java:
import java.util.Scanner;

public class Test {
	private static void dreieck(int anzahlLeerzeichen, int anzahlSternchen) {
		
		for(int i = 0; i < anzahlSternchen; i++) {
			System.out.println("* ");
		}
		for(int i = 0; i < anzahlLeerzeichen; i++) {
			System.out.println(" ");
		}
		System.out.println();
	}
	
	public static void main(String[] args) {
		
		Scanner scan;
		scan = new Scanner(System.in);
		
		try {
			System.out.println("Please insert a number: ");
			int anzahlSternchen = scan.nextInt();
			
		} catch (Exception e) {
			System.out.println("Only insert numbers!");
		}
	}
}


Mein Programm zeigt mir nur kein Dreieck an. Ich komm auch mit Hilfe des Debuggers nicht auf die Lösung ;(
Könnt ihr mir evtl. einen Lösungsansatz geben und mir helfen? :idea:

Vielen Dank im Voraus
 
Ich verstehe zwarnicht, warum du die anzahl der Leerzeichen brauchst, aber egal.
Ich glaube das Problem ist, dass du die beiden forSchleifen nacheinander durchgehst.
Er geht die nicht abwechselnd durch, sondern malt erst alle Sterne und dann alle Leerzeichen, und ich glaube, das wolltest du nicht.
Wofür brauchst du denn die Leerzeichen, wenn du hinter dem Stern schon welche hast "* "?

Ich werde gleich mal meine Version versuchen Und dann mitteilen 😉
Gruß Bk

//Edit:
Also habe eine Schleife hinzugefügt, die nach jeder Zeile, jeweils ein Leerzeichen mehr hinzufügt.
Außerdem habe ich eine Schleife in eine andere gepackt und -1 gerechnet, damit er pro Durchgang, immer einen Stern weniger malt.
Guck es dir einfach mal an. Bei fragen, bitte fragen 😉
Java:
import java.util.Scanner;
 
public class Test {
    private static void dreieck(int anzahlSternchen) {

        int weniger = 0;
    	for(int i = 0; i < anzahlSternchen; i++) {
            for (int z = 0; z < (anzahlSternchen - weniger); z++) {
            	System.out.print("* ");
            }
    		weniger ++;
            System.out.println("");
            for (int y = 0; y < weniger; y++){
            	System.out.print(" ");
            }
        }
    }
    
    public static void main(String[] args) {
        
        Scanner scan;
        scan = new Scanner(System.in);
        int anzahlSternchen;
        
        try {
            System.out.println("Please insert a number: ");
            anzahlSternchen = scan.nextInt();
            scan.close();
            
        } catch (Exception e) {
            System.out.println("Only insert numbers!");
            return;
        }
        dreieck(anzahlSternchen);
    }
}
Wenn du mit BlueJ programmierst und jede Methode einzeln aufrufen möchtest, dann kannst du die 34. Zeile auch rausnehmen (wie bei dir, wenn du willst). Wenn du es so lässt, dann geht das in einem durch 😉
Und ich habe da drüber ein "return;" hinzugefügt, damit er nach der Exception nicht weitermacht, sonder aufhört 😀
Und ich habe "scan.close(); gemacht, damit der scanner nicht ganze Zeit aktiv bleibt ^^

Aber der Ansatz war ja schonmal ok, mit der Eingabe und dem try / catch.
Ich hoffe du verstehst das Programm jetzt, sonst wie gesagt. Frag. Du sollst ja auch was lernen 😉
Du kannst ja auch mal versuchen die Pyramide umzudrehen (zum verstehen, was der Code macht 🙂)
Gruß Nico
 
Zuletzt bearbeitet:
Suuper vielen Dank, habs jetzt verstanden! 🙂

ich probier dann mal das Dreieck umzudrehen,
falls es nicht klappt meld ich mich nochmal 🙂

[EDIT]Danke 🙂[/EDIT]
 
Zuletzt bearbeitet:
Huhu 🙂
Hab mich heute nochmal mit dem Dreieck befasst, umdrehen müsste dann so aussehen oder? 🙂

Java:
import java.util.Scanner;

public class AsciiGraphiken {
	private static void dreieck(int anzahlSternchen) {

		for(int i = 0; i < anzahlSternchen; i++) {
			for(int z = 0; z <= anzahlSternchen - i; z++) 
				System.out.print(" ");
			
			for(int z = 0; z <= i; z++) 
				System.out.print("* ");
			
			System.out.println("");
			}
		}
	

	public static void main(String[] args) {

		Scanner scan;
		scan = new Scanner(System.in);
		int anzahlSternchen;

		try {
			System.out.println("Please insert a number: ");
			anzahlSternchen = scan.nextInt();
			scan.close();

		} catch (Exception e) {
			System.out.println("Only insert numbers!");
			return;
		}
		dreieck(anzahlSternchen);
	}
}


Gruß Alex
 
Ich habs zwar jetzt noch nicht ausprobiert, aber sieht an sich gut aus. Könnte klappen 😉
Ich weiß zwar nicht ob es umbedingt <= sein muss, oder ob nur < in der 1.for Anweisung reicht, müsste man mal durchrechnen, weiß ich gerade nicht.
In der 2.for Schleife mit <= muss das auf jeden Fall hin. Das ist richtig überlegt.
Werd ich morgen einfach mal versuchen. Sieht aber schon vom Ansatz sehr richtig aus.
Zeigt, dass du das Programm an sich verstanden hast, gut 😉

Gruß BK

Edit:
Du hast die geschwungenen Klammern hinter den for Blöcken vergessen 😉
 
Zuletzt bearbeitet:
Lol, ich kann iwie meine Beiträge nicht mehr editieren.
Habe mich verguckt. Die Klammern mussten an dieser Stelle natürlich nicht sein. Sorry. War halt gestern schon zu spät für mich.

Hab nochmal überlegt. Ja. So funktioniert das Programm und die Pyramide wird auch richtig herum sein 😉

Ich habs jetzt mal ausprobiert. Wie ich gedacht habe - bei der 2.for-Schleife in der for-Schleife muss das <= hin. Bei der 1.for-Schleife in der übergeordneten for-Schleife ist das egal. Dann hast du halt ein Leerzeichen mehr 😉
Also anstatt dem:
Java:
for(int z = 0; z <= anzahlSternchen - i; z++) 
    System.out.print(" ");
geht auch
Java:
for(int z = 0; z < anzahlSternchen - i; z++) 
    System.out.print(" ");

Aber der Unterschied ist wirklich nur ein Leerzeichen mehr vor dem ersten Stern der jeweiligen Reihe.

Gruß BK
 
Hi 🙂

Alles klar, das Programm hab ich dann mal verstanden,
dann kanns jetzt mit dem nächsten weiter gehen 🙂

Ich sag nochmal Danke,
weil das mit dem "abgegebenen Danke" find ich irgendwie nicht, ... wie das gehen soll 😀

Gruß
 
Ich sag nochmal Danke,
weil das mit dem "abgegebenen Danke" find ich irgendwie nicht, ... wie das gehen soll
Ich auch nicht 😀
Ich glaube das soll eigentlich neben dem Zitieren Button sein, aber den finde ich bei mir nicht. Den gibt es nicht bei mir ^^

Danke fürs Bitte 😛

Gruß Nico
 

Neue Themen


Zurück
Oben