Zum Inhalt springen

wuerfelprogramm


Empfohlene Beiträge

Geschrieben

Hallo.

Ich hab mal wieder ein Problem.

Ich muss ein Programm schreiben, dass mit zufallszahlen wuerfelt.

dann soll es die Häufigkeit der gewuerfelten Zahlen ausgeben und die kleinste, bzw. größte Häufigkeit ausgeben.

Schlließlich soll ich noch die Differenz der Häufigkeiten berechnen.

mein Problem ist nun:

Das Maximum krieg ich nicht berechnet.

Mein Programm.


import javax.swing.*;


public class wuerfeln

{

   int wuerfe;

   int flaeche;


 public wuerfeln()

 {

   AnzahlderFlaecheneingeben();

   AnzahlderWuerfeeingeben();

  // wuerfelnundHaeufigkeitbestimmen();

   maximaleHaeufigkeit();

   minimaleHaeufigkeit ();

   //Haeufigkeitausgeben();

 }


 public void  AnzahlderFlaecheneingeben()

 {

   String s = JOptionPane.showInputDialog("Anzahl der Flächen eingeben:");

   flaeche =Integer.parseInt (s);

 }


 public void   AnzahlderWuerfeeingeben()

 {

   String p = JOptionPane.showInputDialog("Anzahl der Würfe eingeben:");

   wuerfe  =Integer.parseInt (p);

 }

  int[] verteilung = new int[flaeche];

  int zufallsZahl = (int)(Math.random()*flaeche);



   public void maximaleHaeufigkeit()

   {

     int[] verteilung = new int[flaeche];               //Initialisierung

     int zufallsZahl;

     int min = 0, anzahlMin = 0;


            for (int i = 0; i < flaeche; i++)

            {

                    verteilung[i]=0;

            }


            for (int i = 1; i <= wuerfe; i++)

            {

                 zufallsZahl = (int)(Math.random()*flaeche);

                 verteilung[zufallsZahl]++;

            }


            for (int i = 0; i <flaeche; i++)

            {


                 System.out.print("Haeufigkeit von "+i+": ");

                 System.out.println(verteilung[i]);


                    if(verteilung[i] <= min)

                    {

                        if(verteilung[i] < min)

                         {

                             min = verteilung[i];

                             anzahlMin = 1;

                         }


                    else

                    {                               //hier ist verteilung[i]=max

                         anzahlMin++;

                    }

    }

    }

    System.out.println("Min: "+min +" Anzahl: "+anzahlMin);

   }




     public void   minimaleHaeufigkeit ()

    {

    int[] verteilung = new int[flaeche];               //Initialisierung

     int zufallsZahl;

     zufallsZahl = (int)(Math.random()*flaeche);

     int max = 0, anzahlMax = 0;





       max=verteilung[zufallsZahl];

        for (int i=1; i<wuerfe; i++)

            if (verteilung[i]>max) max=verteilung[i];

        System.out.println("Das Maximum ist :"+max  );

        System.out.println( );

       }







  }

Ich hoffe jemand kann mir helfen.

Bis jetzt ist mir in diesem Forum super geholfen worden.

Danke viel mals.

PS: blondienen sollten lieber kein Informatik wählen. ;)

Geschrieben

Guten Morgen,

so, dann werde ich mal anfangen zu meckern! :)

Du solltest bei Deinem Code darauf achten, ihn vernünftig auszurichten. Achte auf Einrückungen und einheitliche Abstände, dann wird er leichter lesbar. Eine IDE unterstützt Dich dabei (bei Eclipse mit Strg+Shif+F).

Dann verwende die Benamung, die bei Eclipse vorgesehen ist. Klassen haben einen großen Anfangsbuchstaben, Methoden und Variablen einen kleinen. Neue Wörter innerhalb des Namens bekommen einen großen Anfangsbuchstaben spendiert.

Jetzt zum Code. Deine Methoden heißen minimaleHaeufigkeit und maximaleHaeufigkeit, am Ende der Methode wird jedoch genau das Gegenteil ausgegeben (z.B. "Das Maximum ist..." in minimaleHaeufigkeit). Ich spreche jetzt nur über die Methode minimaleHaeufigkeit, weil die interessanter ist und die maximaleHaeufigkeit genauso funktioniert nur mit einem anderen Vergleich. Du startest Deine for-Schleife bei 1, lässt also das erste Element im Array aus (der Index startet bei 0). Ansonsten machst Du den Vergleich richtig (wenn Du das Maximum haben willst, wonach es bis auf den Namen der Methode aussieht).

Zieh die Sachen mal gerade, dann sollte es passen. Und die minimaleHaeufigkeit sollte dann einen Kleinigkeit für Dich sein.

Übrigens - die Haarfarbe hat nichts damit zu tun. :) Ich habe blonde Kommiliton(inn)en, die sehr gut sind.

Peter

Geschrieben

Servus nochmal,

meine 15 Minuten Zeit zum editieren sind vorbei, deshalb antworte ich mir selbst. Ich habe mit mal Deine Methoden noch ein wenig genauer angesehen, die funktionieren ja abgesehen von den o.a. Sachen überhaupt noch nicht.

Ich habe Dir mal die Methode zur Ermittlung des Minimums vorbereitet. Die ist nicht schön, aber sie funktioniert. Schön machen kannst Du sie selbst. :)


    public void minimaleHaeufigkeit() {

        // Initialisierung der Verteilung, mehr brauchst du für die Ausgaben nicht

        int[] verteilung = new int[flaeche]; // Initialisierung

        int zufallsZahl;

        int min = 0, anzahlMin = 0;

        // Ich arbeite lieber mit Random, weil ich dort schöner angeben kann, was ich will

        Random random = new Random();


        // hier wird gewürfelt

        for (int i = 0; i < wuerfe; i++) {

            // ich will nämlich eine Zahl zwischen 0 und 5, an die ich 1 addieren kann

            zufallsZahl = random.nextInt(6) + 1;

            System.out.println("gewürfelt: " + zufallsZahl);

            // ich erhöhe im Verteilungsarray den Zähler für die gewürfelte Zahl

            verteilung[zufallsZahl - 1]++;

        }


        // jetzt wird ausgewertet

        for (int i = 0; i < flaeche; i++) {

            System.out.println("Haeufigkeit von " + (i + 1) + ": "

                + verteilung[i]);


            // ich durchlaufe ja nur das Verteilungsarray und nicht die gewürfelten Werte, deshalb fällt hier die "Standard" Minimumberechnung weg. Ich will wissen, ob ich schon ein Minimum habe. Wenn nicht, dann prüfe ich, ob die aktuelle Zahl gewürfelt wurde und trage diese bei Bedarf als Minimum ein. In dieses if wird also nur einmal gegangen

            if (min == 0 && verteilung[i] != 0) {

                min = i + 1;

            }

        }


        System.out.println("Min: " + min + " Anzahl: " + anzahlMin);

    }

So, den Rest kannst Du ja jetzt alleine.

Peter

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...