Würfelstatistik

bluebaby

Aktives Mitglied
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:

Java:
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 intrfeln(){
            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
Java:
 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.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.
 
G

Gelöschtes Mitglied 20545

Gast
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.
 
Zuletzt bearbeitet von einem Moderator:

VfL_Freak

Top Contributor
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! :eek:
Du gibst nur k-mal die Länge des Arrays aus :D

Versuch' es mal so:
Java:
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...

Top Contributor
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

Aktives Mitglied
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:
Java:
 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.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

Aktives Mitglied
Mach' aus dem println(...) ein print(...).
Java:
System.out.print("Sie haben eine " + augen + " gewürfelt ");
 

Murray

Top Contributor
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
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...

Neue Themen


Oben