Probleme mit Programm zur Pi-Berechnung

  • Themenstarter Alfred Tetzlaff
  • Beginndatum
Status
Nicht offen für weitere Antworten.
A

Alfred Tetzlaff

Gast
Hallo, ich bin Schüler der Stufe 12 eines Gymnasiums in Nordrheinwestfalen und bin zur Zeit damit beschäftigt, meine Facharbeit zum Thema "Zufallsmethoden zur Berechnung von Pi und deren Umsetzung in der Informatik" zu schreiben. Dazu habe ich jetzt damit angefangen, ein Programm zum sogenannten Dartboardalgorithmus zu schreiben. Das ganze will aber nicht so wirklich wie ich will ;)

Hier der Quelltext:

Code:
import sum.ereignis.*;
import sum.komponenten.*;
import sum.multimedia.*;
import sum.werkzeuge.*;

public class SuMAnwendung extends EBAnwendung
{
    // Objekte
    Stift meinStift;
    Rechner meinRechner;
    Etikett hatEtikett1;
    Etikett hatEtikett2;
    Etikett hatEtikett3;
    Etikett hatEtikett4;
    Etikett hatEtikett5;
    Knopf hatKnopf1;
    Textfeld hatTextfeld1;
    
    int x, y, kreistreffer, quadrattreffer, wuerfe, pi;

    public SuMAnwendung()
    {
        // Initialisierung der Oberklasse
        super(1000, 500);
        meinStift = new Buntstift();
        meinRechner = new Rechner();
        hatEtikett1 = new Etikett(450, 150, 100, 25, "Anzahl der Würfe");
        hatEtikett2 = new Etikett(450, 200, 100, 25, "Pi");
        hatEtikett3 = new Etikett(550, 200, 100, 25, "");
        hatEtikett4 = new Etikett(450, 250, 100, 25, "Genauigkeit");
        hatEtikett5 = new Etikett(550, 250, 100, 25, "");
        hatKnopf1 = new Knopf(100, 450, 300, 25, "Los geht's!");
        hatKnopf1.setzeBearbeiterGeklickt("hatKnopf1Geklickt");
        hatTextfeld1 = new Textfeld(550, 150, 100, 25, "");
        hatTextfeld1.setzeBearbeiterInhaltGeaendert("hatTextfeld1InhaltGeaendert");
        hatTextfeld1.setzeBearbeiterEingabeBestaetigt("hatTextfeld1EingabeBestaetigt");
    }
    
    public void zeichne()
    {   
        meinStift.hoch();
        meinStift.bewegeBis(100, 100);
        meinStift.runter();
        meinStift.zeichneRechteck(300, 300);
        meinStift.hoch();
        meinStift.bewegeBis(250, 250);
        meinStift.runter();
        meinStift.zeichneKreis(150);
    }
    
    public void zufall()
    {
        while (wuerfe != 0)
        {
            x = meinRechner.ganzeZufallsZahl(100, 400);
            y = meinRechner.ganzeZufallsZahl(100, 400);
            meinStift.hoch();
            meinStift.bewegeBis(x, y);
            meinStift.runter();
            meinStift.zeichneKreis(0);
            if (((x-250)*(x-250)+(y-250)*(y-250)) <= 22500)
                {
                    kreistreffer = kreistreffer + 1;
                    wuerfe = wuerfe - 1;
                }
                else
                {
                    wuerfe = wuerfe - 1;
                }
        }
    }

    public void hatKnopf1Geklickt()
    {
        this.zeichne();
        wuerfe = hatTextfeld1.inhaltAlsGanzeZahl();
        quadrattreffer = wuerfe;
        if (wuerfe != 0)
        {
            this.zufall();
            [b]pi = kreistreffer/quadrattreffer;
            hatEtikett3.setzeInhalt(pi);[/b]
            hatEtikett5.setzeInhalt(1 - pi/Math.PI);
        }
        else
        {
            return;
        }
    }

    public void hatTextfeld1InhaltGeaendert()
    {
        //   Hier wird der Methodeninhalt eingefügt
    }

    public void hatTextfeld1EingabeBestaetigt()
    {
        //   Hier wird der Methodeninhalt eingefügt
    }

}

Die fettgedruckte Stelle ist die, die mir noch Schwierigkeiten bereitet, weil hier jedes mal 0 ausgegeben wird anstatt des berechneten Wertes für Pi. Ich habe mir schon mal überlegt, ob es eventuell am Variablentyp für pi liegen könnte, aber da habe ich auch schon einiges durchprobiert. Und es sei noch gesagt, dass die Variablen kreistreffer und quadrattreffer vernünftige Werte ergeben. Ich muss gestehen wirklich nicht gerade gut im Umgang mit Java zu sein und das hier ist auch mehr oder weniger nur das an Kentnissen, die man sich so im Schulunterricht aneignen kann. Für Verbesserungsvorschläge bin ich deshalb generell dankbar ;) Schon einmal danke im Vorraus und ich hoffe, dass mein Hilfegesuch nicht gegen irgendwelche Forenregeln hier verstößt oder so.
 
G

Guest

Gast
Ich sehe gerade, dass ich Mist gebaut habe. Mit fettgedruckter Stelle sind die Zeilen 81 und 82 gemeint, in denen ich Trottel versucht habe den Codetext fett schreiben zu lassen. Als Gast kann ich hier leider nicht editieren, sry.
 
S

SlaterB

Gast
was ist der Kreis, was ist das Quadrat?
was kommen an Einzelwerten raus?
das kann man doch sagen..

Code:
System.out.println("kt: "+kreistreffer);
System.out.println("qt: "+quadrattreffer);
pi = kreistreffer/quadrattreffer; 
System.out.println("pi: "+pi);
pi ist vom typ int, also kommen eh nur Werte wie 0, 1, 2 in Frage

int/int gibt auch immer int abgerundet,

also 448948/ 448949 = 0

teste doch erstmal in einem klitzekleinen Hello World-Programm
was z.B. bei 5/6 usw rauskommt,
statt riesige Programme zu schreiben und deren Ergebnisse nicht zu verstehen..
 
G

Guest

Gast
Die einzelnen Teile des Programmes habe ich auch schon mal für sich laufen lassen und da hat alles wunderbar funktioniert, bis auf diesen einen Teil mit der eigentlichen Pi Berechnung.

Zur Erklärung:

Beim Dartboardalgorithmus stellt man sich ein Quadrat vor, dass einen Kreis umschließt. Dann lässt man einzelne Punkte auf die Oberfläche regnen und wertet aus, wieviele davon im Kreis liegen. Zufälligerweise entspricht das Verhältnis von Kreistreffern zur gesamten Wurfzahl dem Wert von Pi, wenn ich das richtig verstanden habe.

Die Variablen kreistreffer, quadrattreffer und wuerfe sind also alles ganzzahlige Werte.

Die Tatsache, dass sich bei int/int gerundete ganze Zahlen ergeben, scheint mir dann wirklich der Haken an der Sache zu sein. Welche Variablentypen kann ich denn am besten benutzen wenn ich das Ergebnis für Divisionen wie 70/100 oder so haben möchte?
 
G

Guest

Gast
Okay, tausend Dank letzten Endes hat es funktioniert! Eigentlich mehr als trivial das Problem aber es hat mich echt an den Rand der Verzweiflung getrieben ;)
 

Lim_Dul

Top Contributor
Eine Anmerkung noch, hierfür reicht zwar double, aber prinzipiell ist rechnen mit double (und noch mehr mit float) ungenau.

Inbesondere summieren sich da Fehler auf. Solltest also Algorithmen implementieren, die eventuell viele Rechnungen hintereiander ausführen, solltest du dir mal die Klasse BigDecimal anschauen, die eine genaue Fließkommarechnung implementiert.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Probleme beim Programm schreiben - Lesen von Dateiinhalten -zaehlen von Wörtern/ Buchstaben Java Basics - Anfänger-Themen 4
P Probleme Java Programm Java Basics - Anfänger-Themen 6
S Erste Schritte Probleme mit erstem Programm Java Basics - Anfänger-Themen 7
B Methoden Mein erstes Programm - und gleich Probleme Java Basics - Anfänger-Themen 6
R einfaches Programm, viele Probleme Java Basics - Anfänger-Themen 29
R Probleme mit Programm Java Basics - Anfänger-Themen 10
R Probleme mit einem Java-Programm Java Basics - Anfänger-Themen 3
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
I Projekte in IDE untereinander sharen / Probleme beim Build Java Basics - Anfänger-Themen 8
MiMa Probleme mit Datentyp long ?? Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
Jxhnny.lpz TicTacToe Spiel vs Computer. (Probleme) Java Basics - Anfänger-Themen 7
B Quiz mit RMI Probleme mit RMI start Java Basics - Anfänger-Themen 4
httprt Probleme bei dem erstellen von leveln in meinem Spiel Java Basics - Anfänger-Themen 2
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
V Probleme Guessing Game Java Basics - Anfänger-Themen 8
hebein PDF Ausdruck auf Drucker - Probleme mit Format Java Basics - Anfänger-Themen 17
R JMenu/JMenuItem Probleme Java Basics - Anfänger-Themen 2
B Static vs non static und Probleme daraus Java Basics - Anfänger-Themen 13
J Probleme mit dem Debugger Java Basics - Anfänger-Themen 4
I Probleme mit OutputStream - Datei lässt sich nicht öffnen Java Basics - Anfänger-Themen 4
J Probleme mit Kompilierung Java Basics - Anfänger-Themen 11
B Probleme mit Zugriff auf Dateisystem Windows 10 ( jFileChooser) Java Basics - Anfänger-Themen 17
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
C Probleme mit paintComponent Java Basics - Anfänger-Themen 13
P Probleme mit JUnit-Tests, es kommt was anderes raus als bei manuellen Tests Java Basics - Anfänger-Themen 5
E JavaFX Editor Probleme mit der Zwischenablage Java Basics - Anfänger-Themen 12
C Probleme mit dem Erstellen und Importieren von Packages Java Basics - Anfänger-Themen 6
3 OOP erste Versuche, OOP zu verstehen. Probleme mit gettern und settern Java Basics - Anfänger-Themen 4
R Erste Schritte Probleme bei 2D Spielfeld, mit einzufügender "Person" Java Basics - Anfänger-Themen 5
P Probleme bei der Installation von JavaFX Java Basics - Anfänger-Themen 3
S Mehrere Probleme im Code Java Basics - Anfänger-Themen 7
D Probleme mit JFrame und der Größe Java Basics - Anfänger-Themen 8
Dimax String Probleme Java Basics - Anfänger-Themen 12
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
Splayfer Java Array Probleme Java Basics - Anfänger-Themen 3
J Probleme bei IllegalArgumentException "werfen". Java Basics - Anfänger-Themen 1
K Probleme bei der Ausgabe - komme nicht weiter :/ Java Basics - Anfänger-Themen 15
X Probleme im Umgang mit PriorityQueue Java Basics - Anfänger-Themen 75
D Probleme mit dem Windowbuilder und JComboBox Java Basics - Anfänger-Themen 2
M Regex Probleme (mal wieder) Java Basics - Anfänger-Themen 3
tom.j85 TicTacToe - probleme beim Casten Java Basics - Anfänger-Themen 6
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
X Probleme mit Übungsaufgaben zu Zahlentypen Java Basics - Anfänger-Themen 4
G Probleme bei Aufgabe Java Basics - Anfänger-Themen 12
P Erste Schritte Probleme mit dem Programmieren Java Basics - Anfänger-Themen 12
B Probleme bei einer Aufgabe Java Basics - Anfänger-Themen 19
Franzi1001 Probleme mit Eclipse Java Basics - Anfänger-Themen 7
T Probleme bei Installation von JDK Java Basics - Anfänger-Themen 2
C Probleme mit String-Vergleich Java Basics - Anfänger-Themen 4
C Probleme bei Regex Java Basics - Anfänger-Themen 9
V Probleme mit Arrays Java Basics - Anfänger-Themen 8
D Kleine Probleme mit Split-Befehlen Java Basics - Anfänger-Themen 5
T Probleme mit Strings Java Basics - Anfänger-Themen 6
G Probleme bei Frame aufgaben Java Basics - Anfänger-Themen 6
N Probleme mit dem ActionListener Java Basics - Anfänger-Themen 4
D Probleme beim Kompelieren mache ich etwas falsch ? Java Basics - Anfänger-Themen 3
L Probleme mit Java Java Basics - Anfänger-Themen 3
S Probleme mit abspielen einer .wav Datei Java Basics - Anfänger-Themen 2
J Probleme bei der Umwandlung einer Farbe von Hex zu RGB Java Basics - Anfänger-Themen 8
M Probleme beim aktualisieren eines JPanels Java Basics - Anfänger-Themen 7
J Probleme beim Array ausgeben Java Basics - Anfänger-Themen 4
M Probleme bei rekursiver Zuordnung Java Basics - Anfänger-Themen 1
I Probleme mit 2 dimensionale Arrays Java Basics - Anfänger-Themen 3
H Best Practice View probleme Java Basics - Anfänger-Themen 2
B Probleme mit Kreisberechnung Java Basics - Anfänger-Themen 15
E Probleme mit Scanner Java Basics - Anfänger-Themen 4
J Eclipse Export Probleme Java Basics - Anfänger-Themen 25
M Probleme beim verwenden von Packages Java Basics - Anfänger-Themen 6
D Probleme mit der Übergabe einer BorderPane Java Basics - Anfänger-Themen 2
J Interface Probleme bei der Implementierung Java Basics - Anfänger-Themen 1
BlueFox Tabelle in der Konsole ausgeben - Probleme Java Basics - Anfänger-Themen 1
G Methoden Probleme beim Methodenaufruf Java Basics - Anfänger-Themen 2
V Klassen ObjectInputStream ->ReadObject Probleme Java Basics - Anfänger-Themen 5
P Probleme mit der Do-Schleife Java Basics - Anfänger-Themen 2
F Erste Schritte Compiling Probleme Java Basics - Anfänger-Themen 13
S Neuling und Probleme bei Schulaufgabe Java Basics - Anfänger-Themen 5
J Anfänger: ActionListener und ProcessBuilder machen Probleme Java Basics - Anfänger-Themen 6
S Erste Schritte 2D Grafik Probleme mit KeyListener. Java Basics - Anfänger-Themen 18
M Array mit eigenem Datentyp probleme beim übergeben Java Basics - Anfänger-Themen 6
M Probleme mit Eclipse Java Basics - Anfänger-Themen 20
G Probleme beim casten von double zu int Java Basics - Anfänger-Themen 3
E 2 Probleme - Datum & private finale Variablen Java Basics - Anfänger-Themen 5
S Compiler-Fehler javac hat Probleme mit Paketen unter OSX Java Basics - Anfänger-Themen 2
J Probleme beim schreiben von Dateien Java Basics - Anfänger-Themen 5
B Variablen Probleme mit Eclipse Java Basics - Anfänger-Themen 6
H Mouse- und KeyListener Probleme? Java Basics - Anfänger-Themen 5
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
I Probleme bei Verzeichnissanalyse Java Basics - Anfänger-Themen 12
F Probleme mit privaten Klassen (abstrakten Klassen) Java Basics - Anfänger-Themen 1
H Probleme mit Klassen...oder: Eine Uhr Java Basics - Anfänger-Themen 9
G Probleme mit Konsole Java Basics - Anfänger-Themen 4
S Probleme mit GamGrid Spiel-Erstellung => Actor reagiert nicht auf Tastatur Java Basics - Anfänger-Themen 2
G Probleme mit Eclipse oder der URL Klasse Java Basics - Anfänger-Themen 5
W Verständnis Probleme bei der while-Schleife und continue Java Basics - Anfänger-Themen 21
M Probleme mit Anzeigen von String in GUI und if-Anweisung Java Basics - Anfänger-Themen 9
T Konstruktor Probleme Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben