# Würfelstatistik



## bluebaby (23. Sep 2010)

Hallo, ich hab ein kleines Problem bei der Ausgabe meines Programmes.
Ich habe 2 Varianten geschrieben aber beide führen nicht zur gewünschten Ausgabe. Uns zwar möchte ich die gewürfelte Zahl(in Zahlen ausgeben) und dieses natürlich öfter also zb.: wenn ich eingebe 1 Würfel und 2 mal würfeln, dann soll rauskommen: Sie haben eine 6 gewürfelt ******, Sie haben eine 3 gewürfelt ***. Bei meiner ersten Variante bekomm ich die Zahlen raus also: Sie haben eine 6 gewürfelt, Sie haben eine 3 gewürfelt aber die Anzahl der Augen stimmt nicht(*). Bei der zweiten Variante funktionieren die Augen wunderbar aber ich bekomme immer die gleiche Zahl heraus also zb.: sie haben eine 6gewürfelt ******, Sie haben eine 6gewürfelt ******. Ich hoffe Ihr versteht mein Problem.
Hier der Code:


```
public class NWuerfeln
{
   private int anzahl;
   /**
    * Der Konstruktor NWuerfeln setzt die Anzahl der Würfeln.
    */
   public NWuerfeln(int anzahl){
       this.anzahl=anzahl;
    }
        /**
         * Die Methode würfeln berechnet die Augenzahl und gibt diese zurück.
         */
        public int würfeln(){
            int summe=0;
            for(int i=0; i<anzahl; i++){
            summe=summe+Wuerfel.wuerfeln();     // Augenzahl wird berechnet
        }
        return summe;
    }
}
[/Java]


[code=Java]public class Wuerfel{
   /**
    * Die Methode wuerfeln erzeugt eine zufällige Augenzahl und gibt diese zurück.
    */
   public static int wuerfeln(){
      int augen=(int)(Math.random()*6+1);       // Zufallszahl
      return augen;

   }
 }
```

Und nun hier die Problem Methode

```
public static void main(String[]args){
      int n=Integer.parseInt(showInputDialog("Wie viele Würfeln möchten Sie verwenden?"));
      int k=Integer.parseInt(showInputDialog("Wie oft möchten Sie würfeln?"));
      int[]statistik;                                                             
      NWuerfeln w= new NWuerfeln(n);
      statistik=new int[w.würfeln()];
      statistik[n-1]++;                                      // Erzeugt ein Array Statistik mit der länge der Würfelaugen.                                // Neues objekt erzeugen und die Parameterliste des Konstruktors ersetzen.                                                        // Simmuliert das Würfeln                                                                 // Die Augen werden berechnet und in die Variable augen gespeichert.                                                                                                                                                             
      for(int i=0; i<k; i++){                                                                // Schleife der gewürfelten Zahlen.
      System.out.println("Sie haben eine "+statistik.length+" gewürfelt");                                                                                    // Ausgabe der gewürfelten Augen.
        }
        for(int x=0; x<statistik.length; x++)
        System.out.print("*");
      }
    }
```

Vielen Dank im Voraus.


----------



## noobadix (23. Sep 2010)

Hallo,

wenn du ein Problem bei einem Programm hast, fände ich es hilfreich, wenn du anfangs kurz erklären würdest, was das Programm eigentlich tun soll.
Wenn ich mich nicht irre, hast du noch einen Konzeptions-Fehler. n ist die Anzahl der Würfel, also brauchst du ein Array, das n-lang ist, in dem du die Summen-ergebnisse speicherst. Du rufst aber NWuerfeln mit n auf, benutzt es dort als Anzahl für die Würfe! Welche Zahl pro Wurf erzielt wird, brauchst du denke ich gar nicht speichern, sondern gibst es direkt in der Methode Würfeln aus, inkl Schleife für die Sternchen.

Gruß n.


----------



## Michael... (23. Sep 2010)

Für was soll das int - Array sein? Und warum würfelst Du nicht innerhalb der ersten for Schleife?


----------



## VfL_Freak (24. Sep 2010)

Moin,



> for( int i=0; i<k; i++ )
> {
> // Ausgabe der gewürfelten Augen.
> System.out.println("Sie haben eine " + statistik.length + " gewürfelt");
> }



"Ausgabe der gewürfelten Augen" - nein, ist es nicht! 
Du gibst nur k-mal die Länge des Arrays aus 

Versuch' es mal so:

```
for( int i=0; i<k; i++ )
{
      // Ausgabe der gewürfelten Augen.
      System.out.println("Sie haben eine " + statistik[k] + " gewürfelt");
}
```

Gruß
Klaus


----------



## Michael... (24. Sep 2010)

Das Array wird ja nur initialisiert und nie aktiv befüllt.
Ausser *statistik[n-1]++; * und das könnte in einer ArrayOutOfBoundsException enden,
wenn der Fall (n-1) >= statistik.length auftritt.


----------



## bluebaby (24. Sep 2010)

Vielen Dank für die Antworten, es hat jetzt geklappt nur sind die Sternchen nicht schön neben der Ausgabe, wie kann ich das machen das jetzt steht Sie haben eine 6 gewürfelt ****** (also genau nebeneinander, bei mir ist das alles drunter)
Hier der Code:

```
public class Würfelaugen
{
  public static void main(String[]args){
      int n=Integer.parseInt(showInputDialog("Wie viele Würfeln möchten Sie verwenden?"));
      int k=Integer.parseInt(showInputDialog("Wie oft möchten Sie würfeln?"));
      int[]statistik;                                                             
      NWuerfeln w= new NWuerfeln(n);
      statistik=new int[n*6-n+1];
       
      for( int i=0; i<k; i++ ){
      int augen=w.würfeln();
      statistik[augen-n]++;
      System.out.println("Sie haben eine " + augen + " gewürfelt");
      
    
    char a='*';
    for(int x=0; x<augen; x++){
        System.out.print(a);
     
          } 
        }
      }
    }
```


----------



## Jay_030 (24. Sep 2010)

Mach' aus dem println(...) ein print(...).

```
System.out.print("Sie haben eine " + augen + " gewürfelt ");
```


----------



## Murray (24. Sep 2010)

Den ersten Teil der Ausgabe musst Du mit System.out.print ausgeben, nicht mit Syste,.out.println. Dafür muss dann noch ein System.out.println(); hinter die Schleife, die die Sternchen ausgibt, damit die nächste Ausgabe nicht hinter dem letzten Sternchen kommt, sodnern in der nächsten Zeile.

Warum das alles? Weil println() im Ggs. zu print() automatisch an den Anfang der nächsten Zeile springt.

//EDIT: zu spät


----------



## bluebaby (25. Sep 2010)

Vielen Dank an alle wurde jetzt komplett gelöst DANKE!!!!


----------

