Histogram mittels Schleifen und Arrays

lucksn

Mitglied
Hallo liebe Forumgemeinde,

ich studiere seit ein paar Wochen Informatik und bin im Programmieren bisher sehr gut mitgekommen, jedoch habe ich aktuell einfach eine kleine Denkblockade.
Folgende Aufgabe wurde gestellt:

Schreiben Sie eine Klasse mit einer Methode, die Histogramme auf dem Bildschirm darstellt. Die Methode bekommt
ein eindimensionales int-Array (mit nicht-negativen Werten) als Parameter übergeben und soll entsprechend hohe
*-Säulen auf den Bildschirm zeichnen. Nutzen Sie zunächst nur geeignete for-Schleifen.
Beispiel: f([3, 1, 2, 2, 4, 1, 0, 2, 3]) produziert
*
* * *
* *** **
****** **

Ich stehe aktuell total auf dem Schlauch und komme aktuell nur zu Endlosschleifen & anderen Fehlern, mein Ansatz:

Java:
public class Histogramm {
	private int checkZahl = 0;
	
	public void printHisto (int[] printArray) {
		int[] array = printArray;
		
		for (int i=0; i < array.length; i++) {
			int x = array[i];
				if (checkZahl < x) {
					checkZahl++;
				}
				else if (checkZahl > x) {
					checkZahl--;
				}
				else {
					System.out.println("baZingA");
				}
			}
	}
}

Ich weiß, dass ich irgendwie mit verschachtelten FOR Schleifen arbeiten muss, jedoch bin ich aktuell einfach zu doof die richtige Stelle für eine weitere FOR Schleife zu finden.
Mir ist ebenfalls klar, dass ich es irgendwie programmieren muss, dass die Schleifen solange & so oft durchlaufen werden, bis alle Zahlen aus dem Arrays mit meiner checkZahl überingestimmt haben.

Es gibt noch eine dazugehörige Main Klasse in der der Parameter vorerst mit 9 Zahlen meiner Wahl gefüllt wird, in einem weiteren Schritt, wenn ich es hinbekommen habe, das mein Programm die * richtig anzeigt, möchte ich das Array mit 9 zufälligen Zahlen befüllen lassen, die jedoch kleiner als 13 sind.

Dies ist aber erstmal nicht die Frage ;), sondern einfach die Suche nach einem kleinen Denkanstoß, wie die weiteren Schleifen aufgebaut sein müssen.

LG
 
Zuletzt bearbeitet:

VfL_Freak

Top Contributor
Moin,

erstens verstehe das Beispiel nicht wirklich ...
f([3, 1, 2, 2, 4, 1, 0, 2, 3])
da hätte ich jetzt der Beschreibung nach sowas erwartet:
***
*
**
**
****
*

**
***
???:L

Zweitens sehe ich bei Dir überhaupt keine Ausgabe von Sternen :(

Drittens (nur als Tipp): die innere Variable kannst Du Dir hier auch sparen und direkt mit dem Übergabeparameter arbeiten:
Java:
public void printHisto (int[] printArray) 
{
        for (int i=0; i < printArray.length; i++) {
            int x = printArray[i];
                if (checkZahl < x) {
                    checkZahl++;
                }
                else if (checkZahl > x) {
                    checkZahl--;
                }
                else {
                    System.out.println("baZingA");
                }
            }
    }

Gruß
Klaus
 

lucksn

Mitglied
Hallo Klaus,

vielen Dank für deine Antwort erstmal.
Also wegen der Aufgabenstellung, da wurde wohl mit
Java:
System.out.print("*");
gearbeitet, statt mit println...
Bei mir fehlt diese Ausgabe (stattdessen das aktuelle Bazinga), weil ich ja selbst schon gemerkt habe, dass mir eine weitere for-Schleife fehlt.
Ich habe mal bei meinen Komolitonen reinschnuppern können und mittlerweile weiß ich eben auch, dass es selbstverständlich mehrere Lösungsansätze gibt.

Mir fehlt nur leider der "Grundgedanke".
Ich stehe einfach total auf dem Schlauch.

Mein bisheriger Ansatz ist eben, dass die checkZahl aufaddiert wird, bis sie mit x übereinstimmt, ist dies der Fall soll ein * ausgegeben werden.
Ich weiß also auch, dass ich, um das Bild dort zu erzeigen mit einem eindimensionalen Array, sowas wie eine Matrix erstellen muss.
Mein Gedankengang sieht also aktuell so aus:

- eine for-Schleife für die Waagerechte
- eine for-Schleife für die Senkrechte
- eine if Bedingung, die beide durchläuft und bei Übereinstimmung ein * ausgibt. :bahnhof:
 

lucksn

Mitglied
Hallo nochmal,

ich habe nun meinen Code mal überarbeitet und bin nun wenigstens soweit, dass mir "+" Zeichen in einer bestimmten Anzahl angezeigt werden mit folgendem Code.

Java:
public class Histogramm {
	
	public void printHisto (int[] printArray) {
		for (int i = 0; i < printArray.length; i++) {
			int x = printArray[i];
			for (int y = 0; y < x; y++) {
				if (y == x) {
					System.out.print("*");
				}
				else {
					System.out.print("+");
				}
				for (y = printArray.length; y > x; y--) {
					if (y == x) {
						System.out.print("*");
					}
					else {
						System.out.print("+");
					}
				}
			}
			System.out.println("");
		}
	}
}
Ich bin zwar immernoch nicht weiter mit dem eigentlichen Problem, jedoch habe ich irgendwie das Gefühl, dass ich auf dem richtigen Weg bin.
Falls dies nicht der Fall ist würde ich mich wie gesagt über eine Hilfestellung sehr freuen.
Ich möchte keineswegs, dass mir jemand die Aufgabe löst, aber ein Schubs in die richtige Richtung wäre wirklich toll.
 

lucksn

Mitglied
Hallo BuddaKaeks,

das ist ja die Krux ;-)
Ich habe die komplette Aufgabenstellung kopiert von meinem Aufgabenblatt.
Ich kann es also gar nicht genauer erklären.
 

BuddaKaeks

Bekanntes Mitglied
Ein Histogramm ist eine graphische Darstellung der Häufigkeitsverteilung metrisch skalierter Merkmale. Es erfordert die Einteilung der Daten in Klassen (engl. bins), die eine konstante oder variable Breite haben können. Es werden direkt nebeneinanderliegende Rechtecke von der Breite der jeweiligen Klasse gezeichnet, deren Flächeninhalte die (relativen oder absoluten) Klassenhäufigkeiten darstellen. Die Höhe jedes Rechtecks stellt dann die (relative oder absolute) Häufigkeitsdichte dar, also die (relative oder absolute) Häufigkeit dividiert durch die Breite der entsprechenden Klasse.

Das sagt Wikipedia zu Histogrammen.
 

BuddaKaeks

Bekanntes Mitglied
Ok, verstanden.

Dein Programm bekommt eingabe parameter, z.B. 1, 4, 5

und anstelle von

*
****
*****

soll es das ganze vertikal, also

--*
-**
-**
-**
***

ausgeben (- ist ein Leerzeichen)
 
Zuletzt bearbeitet:

BuddaKaeks

Bekanntes Mitglied
Das heißt, du hast dein array und musst daraus quasi ein 2D boolean array machen, mir true für ein *, false für eine leerzeichen.

Also in etwa so:
Java:
int biggestNumber = dieGrößteNummerAusDemEingangsArrayHerusfinden(inputArray);
boolean[][] stars = new boolean[inputArray.length][biggestNumber];

for(int i = 0; i< inputArray.length; i++){
     for(int j = biggestNumber-1; j > biggestNumber - inputArray[i]){
        stars[i][j] = true;
    }
}

//jetzt einfach ausgeben
//für den input [1][2][3]
//müsste das folgendes Ergeben:
//[f,f,t]
//[f,t,t]
//[t,t,t]
//t = true, f = false
//wenn es nicht das ergibt ist noch irgendwo ein fehler :)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Programm Histogram Java Basics - Anfänger-Themen 2
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
M Anzahl Kommandozeilenparamter mittels Methode Java Basics - Anfänger-Themen 11
B Race Condition mittels Semaphore verhindern Java Basics - Anfänger-Themen 13
B Dom Manipulationen mittels Java Java Basics - Anfänger-Themen 8
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
D Gerade oder ungerade Zahl mittels Methoden Java Basics - Anfänger-Themen 13
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
P9cman Vokale in einem String überprüfen mittels Rekursion Java Basics - Anfänger-Themen 8
Poppigescorn Arrayliste Mittels Scanner erweitern Java Basics - Anfänger-Themen 6
TimoN11 Quadratwurzel mittels Funktionswert der Quadratfunktion Java Basics - Anfänger-Themen 9
Khaled-Abo Ziffern unterscheiden mittels einer For-Schleife Java Basics - Anfänger-Themen 6
L Quadratwurzelrechnung mittels Heron-Verfahren Java Basics - Anfänger-Themen 6
P Klassenübergreifende Ausgabe mittels "getter" nicht möglich Java Basics - Anfänger-Themen 21
M Objekte mittels equals vergleichen Java Basics - Anfänger-Themen 14
I csv auslesen, mittels List Java Basics - Anfänger-Themen 18
V Erste Schritte Potenzen b^n mittels Schleife ermitteln Java Basics - Anfänger-Themen 7
S XML mittels HTTP Get Anfrage Java Basics - Anfänger-Themen 4
W Teilstring durch Teilstring mittels StringBuilder ersetzen Java Basics - Anfänger-Themen 7
P Liste mit Lücken mittels Filter aggregieren Java Basics - Anfänger-Themen 7
M Methoden Mittelwert rationaler Zahlen mittels Methode Java Basics - Anfänger-Themen 4
P Klassen In einer Autoklasse das Objekt Auto mittels Collection Speichern Java Basics - Anfänger-Themen 4
M Fibonacci rekursiv mittels Cache Java Basics - Anfänger-Themen 17
K Methoden Zahlensysteme umwandeln mittels Rekursion Java Basics - Anfänger-Themen 5
S int-Array mittels Arrays.sort() in einer Schleife sortieren. Java Basics - Anfänger-Themen 2
A JavaScript Object Notation einbinden mittels Maven Java Basics - Anfänger-Themen 7
L Liste mittels Stack implementieren Java Basics - Anfänger-Themen 0
J OOP GUI-Einstellungen mittels Preferences Java Basics - Anfänger-Themen 0
J ComboBox mittels neuer Methode befüllen Java Basics - Anfänger-Themen 3
A Android-Lib: Sourcecode Generator mittels Annotation Processing Java Basics - Anfänger-Themen 0
W Erste Schritte Exceltabelle in Datenbank übertragen mittels XDEV Java Basics - Anfänger-Themen 7
S Klassen Tiefe Kopie mittels Kopierkonstruktor Java Basics - Anfänger-Themen 6
S Columnindex mittels Columnname herrausfinden Java Basics - Anfänger-Themen 6
M Explorer oeffnen mittels java.awt.Desktop Java Basics - Anfänger-Themen 18
Dogge URL-Ausgabe/Verarbeitungsproblem mittels einer Applikation Java Basics - Anfänger-Themen 2
H Methoden Array aus Punkten erzeugen, mittels Punkt-Klasse Java Basics - Anfänger-Themen 5
S Dateien mittels Path(s) kopieren und umbenennen. Java Basics - Anfänger-Themen 4
C Dynamische (AJAX) Inhalte einer Webseite mittels Java auslesen Java Basics - Anfänger-Themen 2
N Mittels For Schleife Klasse erzeugen Java Basics - Anfänger-Themen 32
B Abfrage mittels Variable vereinfachen Java Basics - Anfänger-Themen 6
D Klassen Zeichnen von Figuren mittels vorgegebener Klasse Java Basics - Anfänger-Themen 3
P Collatz-Folge mittels indirekter Rekursion Java Basics - Anfänger-Themen 8
J Wurzelberechnung (mittels Newton) Java Basics - Anfänger-Themen 14
B Lotto mittels TreeSet Java Basics - Anfänger-Themen 3
C Vererbung "extends" umgehen mittels Objekterzeugung?! Java Basics - Anfänger-Themen 29
A String mittels RegEx filtern Java Basics - Anfänger-Themen 13
U E-Mails mittels Java senden. Java Basics - Anfänger-Themen 2
J Aufruf von Funktionen in *.jar mittels Eclipse Java Basics - Anfänger-Themen 4
E PHP Datei mittels Java aufrufen? Java Basics - Anfänger-Themen 3
P Collections Queue mittels ArrayList Java Basics - Anfänger-Themen 2
F Substring mittels RegEx ermitteln/ersetzen? Java Basics - Anfänger-Themen 2
R 3 Datumsangaben sortieren mittels Switch Java Basics - Anfänger-Themen 9
J Arraylänge mittels "Array.getLength" bestimmen!? Java Basics - Anfänger-Themen 3
I Ascii Bild mittels Scanner einlesen Java Basics - Anfänger-Themen 9
K OOP Datenkapselung mittels private - length Attribut bei Array Java Basics - Anfänger-Themen 3
M Delphi-DLL mittels JNI aufrufen Java Basics - Anfänger-Themen 11
H .jar Consolenprogramm mittels Doppelklick starten Java Basics - Anfänger-Themen 2
S SQL Anweisung mittels PreparedStatement Java Basics - Anfänger-Themen 15
M Additions mittels Rekursion Java Basics - Anfänger-Themen 15
E Array mittels Methode umgekehrt ausgeben Java Basics - Anfänger-Themen 6
Binary.Coder Skalarprodukt mittels long und binärzahlen Java Basics - Anfänger-Themen 5
M Auf Java (Desktop) Applikation mittels Webseite zugreifen Java Basics - Anfänger-Themen 6
W Suche nach strings zwischen eckigen Klammern mittels regulärer Ausdrücke Java Basics - Anfänger-Themen 3
Gonzalez Eingabe des Benutzers mittels readLine()-Methode. Klappt in meinem Beispiel nicht! Java Basics - Anfänger-Themen 7
R JTextField mittels JButton in Konsole ausgeben Java Basics - Anfänger-Themen 2
Z Terminkalender mittels Klassen und Feldern Java Basics - Anfänger-Themen 2
M Benutzer löschen mittels Netbeans Java Basics - Anfänger-Themen 4
I (fremde) IP mittels Applet auslesen Java Basics - Anfänger-Themen 6
G Mittels Runtime prüfen ob ein Programm läuft? Java Basics - Anfänger-Themen 18
M MenuShortcut nur mittels Shift+Taste Java Basics - Anfänger-Themen 3
N einbinden von anderen klassen mittels import Java Basics - Anfänger-Themen 2
M Datei speichern mittels InputStream Java Basics - Anfänger-Themen 13
G Navigations mittels Applet Java Basics - Anfänger-Themen 3
M ArrayList sortieren mittels Comparator Java Basics - Anfänger-Themen 10
C Lösung einer Aufgabe mittels Iteration und Rekursion Java Basics - Anfänger-Themen 12
T Zugriff auf umgebendes Objekt mittels Objekt innerer Klasse Java Basics - Anfänger-Themen 2
K Java-Programm mittels Shell-Skript aufrufen Java Basics - Anfänger-Themen 3
L Vorhandene SVG mittels Batik anzeigen Java Basics - Anfänger-Themen 8
K Datum mittels Thread aktualisieren Java Basics - Anfänger-Themen 6
G mittels Parameter Variable identifizieren Java Basics - Anfänger-Themen 6
T Zeitmesser mittels Threads implementieren Java Basics - Anfänger-Themen 16
V Mittels Java Pfeile erstellen Java Basics - Anfänger-Themen 3
J mehrere JCheckBoxen mittels Schleife abfragen Java Basics - Anfänger-Themen 13
T Erstellen eines Steuerprogramms mittels if-anweisungen Java Basics - Anfänger-Themen 10
R Vector nach Teilzeichenkette durchsuchen (mittels regex) Java Basics - Anfänger-Themen 5
G Mittels RegExp "Variablen" extrahieren Java Basics - Anfänger-Themen 4
T Fernsteuerung mittels Sockets (Architektur okay?) Java Basics - Anfänger-Themen 4
H Subtraktion mittels Negierung auf Addition zurückführen Java Basics - Anfänger-Themen 4
G Objekte mittels Schleife anlegen und ansprechen Java Basics - Anfänger-Themen 8
A Programm mittels Konsole öffnen Java Basics - Anfänger-Themen 12
B Querverweise auf eine Hilfedatei mittels ?Button? Java Basics - Anfänger-Themen 4
E Methodenaufruf mittels variable? kA Java Basics - Anfänger-Themen 5
P Collection Vector speichern mittels Serialisierung? Java Basics - Anfänger-Themen 2
T schleifen Java Basics - Anfänger-Themen 3
Kingdako Wie löse ich eine Mathematische Formel mit Arrays und Schleifen? Java Basics - Anfänger-Themen 32
S Erste Schritte While Schleifen Java Basics - Anfänger-Themen 11
M geschachtelte for-Schleifen - Einmaleins ausgeben Java Basics - Anfänger-Themen 3
Mikejr Schleifen Java Basics - Anfänger-Themen 4
java-starter Erste Schritte Mit While Schleifen Programme schreiben Java Basics - Anfänger-Themen 4
K geschachtelte "for-Schleifen" Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben