# Hilfe für Java Programm



## Sirthegoat (5. Mai 2013)

*Hilfe für Java Programm*

Hallo erstmal,

ich muss bis heute Abend noch das letzte Java Programm für die Uni schreiben, komm aber nicht wirklich weiter.
Die Aufgabe lautet wie folgt:

Als Ausgangspunkt können Sie die Klasse P1Haeufigkeit im Projekt P12U07Arrays verwenden
Ermitteln Sie die Häufigkeiten von Noten zwischen 1 und 5 (nur ganze Noten)
Die Noten werden vom Programm zufällig ermittelt
Die Häufigkeiten sollen sowohl absolut als auch als einfache Graphik ausgegeben werden

Beispiel einer Ausgabe:
Die Häufigkeitsverteilung sieht wie folgt aus:
1               19
2               21
3               22
4               16
5               22
Die Graphik dazu:
Note  Häufigkeit
1       *******************
2       *********************
3       **********************
4       ****************
5       **********************

Als Vorlage habe ich dies:



public class P1Haeufigkeit {
  public static void main(String[] args) {
// Array initialisieren
    int[] hauef = new int[5];

//  Noten erzeugen und verarbeiten
    int note;
    for (int i = 1; i <= 100; i++) {
// Zufallsnote zwischen 1 und 5 erzeugen
      note = (int) (Math.random()*5+1);
// Verarbeitung

    }

//  Ausgabe
    System.out.println("Die Häufigkeitsverteilung sieht wie folgt aus:");

    System.out.println("Die Graphik dazu:");
    System.out.println("Note  Häufigkeit");


  }
}

Hoffe mir kann jemand weiterhelfen, vorab schon mal vielen Dank für alle Hilfeversuche und Lösungen!


----------



## -Phoenix- (5. Mai 2013)

*AW: Hilfe für Java Programm*

Moin, 
du könntest 5 Variablen erstellen ( eine für jede Note)
in einer Schleife iterierst du durch alle Elemente des Arrays. 
In der Schleife hast du ein Switch case oder If Konstrukt das dir bei der passenden Note die passende Variable um 1 inkrementiert.
Nach dieser Schleife kannst du dann die Ausgabe der einzelnen Grafiken in einzelnen Schleife oder in einer geschachtelten Schleife machen.


Ich hoffe du verstehst was ich meine, sonst frag einfach 



Lg. Elmar


----------



## Sirthegoat (5. Mai 2013)

Sowas hab ich schon versucht bin aber ziemlich dran gescheitert da ich die Folien vom Prof nachm entziffern 0 versteh, kannst du mal was beispielhaftes erstellen?


----------



## -Phoenix- (5. Mai 2013)

*AW: Hilfe für Java Programm*

Moin


```
[B]public class P1Haeufigkeit {
    public static void main(String[] args) {
        // Array initialisieren
        int[] hauef = new int[5];
        int eins = 0;
        int zwei = 0 ;
        int drei = 0;
        // .......
        
        
        
        // Noten erzeugen und verarbeiten
        int note;
        for (int i = 1; i <= 100; i++) {
            // Zufallsnote zwischen 1 und 5 erzeugen
            note = (int) (Math.random() * 5 + 1);
            // Verarbeitung

            //Note zaehlen
            switch (note){
            
            case 1: //alle 1 zaehlen
                eins ++;
                break;
        
            case 2: //alle 2 zaehlen
                zwei ++;
                break;
            }
            //..........
            
        }
        // Ausgabe
        System.out.println("Die Häufigkeitsverteilung sieht wie folgt aus:");
        
        
        System.out.println("Note Häufigkeit");
        System.out.println("1 "+eins); //anzahl von einsen ausgeben
        //...... 
        
        
        System.out.println("Die Graphik dazu:");
        
        System.out.println("1 ");
        for (int i = 0; i < eins;i++){ 
            System.out.print("*");
        }
        System.out.println("");//fuer Zeilenumbruch
        //.......
        
       
    }
}
[/B]
```
Ich bin jetzt mal davon ausgagangen das die die Zufallszahlen nicht in einem Array speicherst.


----------



## DarkMo (5. Mai 2013)

*AW: Hilfe für Java Programm*

wieso mit dem switch? einfach nen noten[5] array mit 0 initialisiert für alle elemente und feddich. noten[note]++ und fertig isses *g*

bei der ausgabe würd ichs vllt noch anders gestalten. wenn ichs richtig verstehe, macht phoenix pro note einen stern - bei 1000 noten is das ebbes viel  bei 3en könnts zu wenig sein. daher würd ich die größte anzahl an noten-vorkommen als 100% ansehen (also 10 einser, 5 2er -> 10 = 100%) und die anderen daran orientieren (5 entsprechen 50% von den 10, welche 100% repräsentieren). am ende kann man dann beliebig viele sternchen pro note malen und die relationen sind gewahrt.

hier könnte man dann auch wieder sagen, dass 20 sternchen 100% entsprechen und dann muss man eben pro note diese 20 * die prozent sternchen malen.


----------



## HanZ4000 (5. Mai 2013)

*AW: Hilfe für Java Programm*

Ich würde es folgendermaßen machen (auf die Gefahr hin, das mein Vorgänger dies schon sagte - ich hab es nicht genau gelesen):

Ein Array mit der Größe Anzahl der verschiedenen Möglichkeiten von Noten erstellen. Also bei Noten von 1 - 6 brauchst ein Array der Größe 6.



> int array[] = new int[6]


Anschließend würde ich alle Noten durchlaufen und die Note als Index-1 betrachten. Also wenn die Note 3 vorkommt, eben array[note-1]++ hochzählen.

Damit bekommst du eine Statistik.
Für die grafische Darstellung würde ich das Array durchlaufen und soviele "+" an die Konsole ausgeben, wie der Arraywert ist.


> for(int i = 0; i < 6; i++) {
> for(int j  = 0; j < array_; j++) System.out.print("+");
> }
> _


_Hoffentlich konnten wir Dir helfen. _


----------



## Moerli_me (5. Mai 2013)

*AW: Hilfe für Java Programm*

** Habe deine Vorlage genommen und einfach dazugeschrieben, leider selbst gerade keine Zeit zum testen

public class P1Haeufigkeit {
public static void main(String[] args) {
// Array initialisieren
int[] hauef = {0,0,0,0,0}; // Ich würds gleich initialisieren, weil du sonst wsl eine Exception kriegst


// Noten erzeugen und verarbeiten
int note;
for (int i = 1; i <= 100; i++) {
// Zufallsnote zwischen 1 und 5 erzeugen
note = (int) (Math.random()*5+1);
// Verarbeitung 
hauef[note-1]++;  //Die stelle im Array gibt vor welche Note drinn steht hauef[0] = note 1 - hauef[1] = note 2

}

// Ausgabe
System.out.println("Die Häufigkeitsverteilung sieht wie folgt aus:");

for(int i=0;i<hauef.length;i++){
System.out.println(i+1);
System.out.print(" "+hauef_);
}

System.out.println("Die Graphik dazu:");
System.out.println("Note Häufigkeit");

for(int i=0;i<hauef.length;i++){
System.out.println(i+1);
    for(int j=0;j<hauef.length;j++){
    System.out.print("*");
}

}
}

Ich hoffe das hilft dir weiter, hab versucht mich nahe an die Vorlage zu halten._


----------



## -Phoenix- (5. Mai 2013)

*AW: Hilfe für Java Programm*

klar kann mans auch noch mit Arrays machen und auch die Grafik dynamisch skalieren lassen.   Ich wollte nur die simpelste Lösung vorschlagen die auch ohne Programmiererfahrung verständlich ist.

  Und so wie die Fragestellung rüber kommt hat der Threadersteller noch nicht viel Erfahrung mit Java bzw. Programmieren.


----------



## Moerli_me (5. Mai 2013)

*AW: Hilfe für Java Programm*



-Phoenix- schrieb:


> klar kann mans auch noch mit Arrays machen und auch die Grafik dynamisch skalieren lassen.   Ich wollte nur die simpelste Lösung vorschlagen die auch ohne Programmiererfahrung verständlich ist.
> 
> Und so wie die Fragestellung rüber kommt hat der Threadersteller noch nicht viel Erfahrung mit Java bzw. Programmieren.


 
Ja, ich dachte er hat die Angabe vom Professor gekriegt und muss sich möglichst nahe an diese halten. 

Meine Lösung ist natürlich um einiges komplizierter, muss ich gestehen  
Wenns so funktioniert wies dasteht^^


----------



## DarkMo (5. Mai 2013)

*AW: Hilfe für Java Programm*

hans: genau das meinte ich auch ^^
phoenix: ich finde ein simples array einfacher als switch case - aber gut, die lesbarkeit ist natürlich bei switch besser.


----------



## -Phoenix- (5. Mai 2013)

*AW: Hilfe für Java Programm*

Ist ja auch Wurst solange es geht . Eure Lösung mit den Arrays ist natürlich auch ein bissel performanter wie meine mit Switch Case


----------



## Crymes (11. Mai 2013)

*AW: Hilfe für Java Programm*

Ich hatte vor Kurzem ein ähnliches Problem - ich sollte von einem eingegebenen Text die Anzahl jedes Zeichens ausgeben.
Mein Ansatz bestand im wesentlichen aus 2 Schleifen, die erste iteriert über den ganzen Text und die zweite iteriert von der aktuellen Position bis zum Ende des Textes, sie zählt die Häufigkeit des aktuellen Buchstaben und speichert sie in einer Variable.
Die Ausgabe erfolgte direkt am Ende der zweiten Schleife jeweils Buchstabe für Buchstabe. 

Die Möglichkeit ist wahrscheinlich für dich ungeeignet, da du ja eine relative Statistik brauchst, da finde ich das Beispiel von DarkMo gut. Wollte es nur mal erwähnen, da ein Array bei größerer Auswahl ziemlich aufwendig ist aber da gibts dann ja auch Listen


----------

