Methoden PI-Berechnung

Arthos

Mitglied
Ich habe auf Wikipedia (hier: Kreiszahl: Statistische Bestimmung) diesen Algorhythmus gefunden:

Java:
public static double approximiere_pi(int tropfenzahl) {
  double pi = 0;
  int innerhalb = 0;
  int gesamt = tropfenzahl;
 
  while (tropfenzahl > 0) { // generiere Tropfen und addiere je nach Zugehörigkeit
    double dotx = Math.random();
    double doty = Math.random();
 
    if (dotx*dotx + doty*doty <= 1) {
      // Punkt liegt innerhalb des Kreises
      innerhalb++;
    } else {
      // Punkt liegt außerhalb des Kreises
    }
 
    tropfenzahl--;
  }
 
  pi = 4*(double)innerhalb/gesamt;
  return pi;
}

Ich habe dann in diesem Programm versucht in der Kommandozeile eine Ausgabe mit dem Ergebnis zu machen, doch ich schaffe es nicht die Methode richtig aufzurufen. 🙁

Java:
class pi {
public static double approximiere_pi(int tropfenzahl) {
  double pi = 0;
  int innerhalb = 0;
  int gesamt = tropfenzahl;

  while (tropfenzahl > 0) {
    double dotx = Math.random();
    double doty = Math.random();

    if (dotx*dotx + doty*doty <= 1) {
      innerhalb++;
    } else {
    }

      tropfenzahl--;
  }

  pi = 4*(double)innerhalb/gesamt;
  return pi;
}
  public static void main(String[] arguments) {
    //Hier möchte ich die Methode aufrufen!!!
    System.out.println("Pi = " + pi + "");   //Hier soll die Ausgabe erfolgen!!!
  }
}

Kann mir bitte jemand helfen ich habe zwar ein Buch über Java, doch das hilft mir hier nicht weiter. Ich bin Anfänger mit Java und benutze den Java-Editor vom G. Röhner wenn das jemanden hilft.
Grüße
Felix
 
Java:
double pi = approximiere_pi(1000);
System.out.println("PI = " + pi);
 
Hi,

bitte schau dir mal die Java Namens konventionen an.

Die Ausgabe sollte wie folgt aussehen:

Java:
System.out.println("PI = " + approximiere_pi(tropfenzahl));

Da du aber in deinem main keine tropfenzahl hast, musst du da natürlich einint (vielen Dank) wert eigeben.

MfG Franz
 
Zuletzt bearbeitet:
Beides funktioniert super!! Man habt ihr schnell reagiert!
🙂
Ich werde es vielleicht versuchen bei Wikipedia anzumerken...
Ich werde dieses Thema als "erledigt" markieren.
 
Es gibt nichts anzumerken, der Artikel geht davon aus, dass der Leser grundliegende Java-Kenntnisse hat.
 
Ich habe noch eine (zugegebenermaßen mikrige) GUI hinzugefügt. Doch brauche ich noch den Unicode für ≈ (U+2248)...
[c]System.out.println("PI #HIER: ≈# " + approximiere_pi(tropfenzahl_input_long));[/c]
Den muss man doch als \u... angeben oder?
Im Internet finde ich nur U+2248 aber das geht nicht. Auch aus den anderen Tabellen werde ich nicht schlau. :bahnhof:
Sorry ich eben noch ein ziemlicher Anfänger.
 
Ich habe noch eine (zugegebenermaßen mikrige) GUI hinzugefügt. Doch brauche ich noch den Unicode für ≈ (U+2248)...
[c]System.out.println("PI #HIER: ≈# " + approximiere_pi(tropfenzahl_input_long));[/c]
Den muss man doch als \u... angeben oder?
Im Internet finde ich nur U+2248 aber das geht nicht. Auch aus den anderen Tabellen werde ich nicht schlau. :bahnhof:
Sorry ich eben noch ein ziemlicher Anfänger.

Was geht nicht?
[c]\u2248[/c] sollte imho richtig sein.
 
Ich habe noch eine (zugegebenermaßen mikrige) GUI hinzugefügt. Doch brauche ich noch den Unicode für ≈ (U+2248)...
[c]System.out.println("PI #HIER: ≈# " + approximiere_pi(tropfenzahl_input_long));[/c]
Den muss man doch als \u... angeben oder?
Im Internet finde ich nur U+2248 aber das geht nicht. Auch aus den anderen Tabellen werde ich nicht schlau. :bahnhof:
Sorry ich eben noch ein ziemlicher Anfänger.


Java:
System.out.println("\u2248");
 
Was geht nicht?
\u2248 sollte imho richtig sein.
Das funktioniert bei mir nicht!!!
Java:
System.out.println("Pi \u2248 " + approximiere_pi(tropfenzahl_input_als_long));
Die Ausgabe lautet dann: Pi ? 3,141... und nicht Pi ≈ 3,141...
 
Sofern du das Programm über die Windows Eingabeaufforderung startest wirst du auch nur ein '?' erhalten, diese arbeitet standardmäßig mit der Codepage 850.
 
Sofern du das Programm über die Windows Eingabeaufforderung startest wirst du auch nur ein '?' erhalten, diese arbeitet standardmäßig mit der Codepage 850.

Ich habe in meinem ersten Post gesagt, dass ich den Java Editor von G. Röhner benutze. Dieser startet das Programm dann in der Eingabeaufforderung (cmd.exe). Somit hast du natürlich recht. Aber wie kann ich das umgehen? Muss ich eine GUI schreiben in dem es ein Ausgabe-Feld gibt?
 
Wenn du willst, dass wirklich überall ein ≈ erscheint, wäre eine eigene GUI tatsächlich die sauberste Lösung. Ob das den Aufwand rechtfertigt, musst du selbst entscheiden.
Wenn du willst, dass ein ≈ nur bei dir erscheint, reicht es, den Zeichensatz der Eingabeaufforderung auf UTF-8 umzustellen.
 
Ob das den Aufwand rechtfertigt, musst du selbst entscheiden.

Das gesamte Programm ist nur dazu da Java zu lernen: Also ja, es ist der Aufwand wert! Die Frage ist nur wie das geht...aber ich schaffe das schon... 🙂

Das Programm so wie es jetzt ist:
Java:
class pi_gui {                                                        //klassendeklaration
  public static double approximiere_pi(long tropfenzahl) {           //algorhythmus von Wikipedia:kreiszahl:statistische ermittlung
    double pi = 0;
    long innerhalb = 0;
    long gesamt = tropfenzahl;
    
    while (tropfenzahl > 0) {
      double dotx = Math.random();
      double doty = Math.random();
      
      if (dotx*dotx + doty*doty <= 1) {
        innerhalb++;
      } else {
      }
      
      tropfenzahl--;
    }
    
    pi = 4*(double)innerhalb/gesamt;
    return pi;
  }                                                                //algorhythmus ende
  public static void main(String[] arguments) {                    //hauptmethode
    String tropfenzahl_input_string = javax.swing.JOptionPane.showInputDialog( "Wie viele Tropfen sollen regnen? (Nur Ziffern sind zulässig! Darf nicht leer Sein! Maximal: 1000000000)" );   //input durch benutzer
    long tropfenzahl_input_long = Long.valueOf(tropfenzahl_input_string).longValue();       //variablenumwandlung zeichen zu ziffern (string zu long)
    System.out.println("Pi \u2248 " + approximiere_pi(tropfenzahl_input_long));             //ausgabe und nutzung der methode
  }
}                                                                   //hauptmethode ende

Parallel dazu habe ich gerade noch das hier geschrieben, falls das jemanden interresiert...

Java:
public class pascalsche_dreieck_gui {
  public static void printPascal (int lines) {                 //methode von: [url=http://lufgi9.informatik.rwth-aachen.de/projekte/loop/aufgaben/markusb/schule/pascal_dreieck/lsg/Pascal.java.html]Pascalsches Dreieck, Lösung: Pascal.java[/url]
    int[][] array = new int [lines][lines];
    for (int i=0; i< lines; i++) {                            // Berechnung des Pascalschen Dreiecks
      for (int j=0; j <=i; j++) {
        if (j == 0 || j == i) {
          array[i][j] = 1;
        }
        else {
          array[i][j] = array[i-1][j-1] + array[i-1][j];
        }
      }
    }
    for (int i=0; i<lines; i++) {             //ausgabe-"methode"
      for (int j=0; j<=i; j++) {
        System.out.print (array[i][j] + " ");
      }
      System.out.println();
    }                                                             //methode ende
  }
  public static void main (String[] args){                //hauptprogramm
    String lines_als_string = javax.swing.JOptionPane.showInputDialog("Wie viele Zeilen des Pascalschen Dreiecks willst du ausrechnen?");   // Input Dialog
    int lines_als_int = Integer.parseInt(lines_als_string);                              //Variablenumwandlung
    printPascal (lines_als_int);                                                          //Ausgabe
  }
}

Es ist ein kleines Programm zur Berechnung einer Variablen länge des Pascalschen Dreiecks. Jedoch Wäre es auch hier gut das Ergebnis auf einer GUI anzuzeigen, da man es zentrieren müsste um es als wirkliches Hilfsmittel nutzen zu können.

[EDIT]Was haltet ihr davon?[/EDIT]
 
Zuletzt bearbeitet:
Du solltest dir direkt angewöhnen, dich an geltende Namenskonventionen zu halten. Siehe dazu z.B. hier: Code Conventions for the Java Programming Language: 9. Naming Conventions

Inhaltlich ist zu deinem neuen Programm ja nicht viel zu sagen. Jedoch finde ich die Mischung aus Eingabe über die grafische Oberfläche und Ausgabe über die Konsole etwas ungünstig. Entweder-oder sollte es da heißen.
Mit einer entsprechend Anzahl von Leerzeichen oder Tabs kannst du aber auch in der Konsole die Ausgabe "schön formatieren". Wenn du z.B. 5 Zeilen des Dreeicks zeichnen willst, dann setzt du z.B. vor die erste Zeile 4 Leerzeichen, vor die zweite 3 usw...

Gruß Fant
 
Hey, schau mal in der "Projekte" Sektion nach Monte Carlo Methode. Hab mal genau so etwas programmiert und hochgeladen

Edit: http://www.java-forum.org/showthread.php?t=135970 Monte-Carlo-Methode Simulator
 
Zuletzt bearbeitet:
Hey, schau mal in der "Projekte" Sektion nach Monte Carlo Methode. Hab mal genau so etwas programmiert und hochgeladen

Edit: Monte-Carlo-Methode Simulator - java-forum.org

:shock::toll::applaus:

Ich würde für so etwas 10 Jahre brauchen...Wie lange saßt du denn da dran? Das Tool ist natürlich cool...dagegen ist meins etwas...naja...mikrig 😀 😛ueh:
 
Ich hab das über zwei Tage verteilt gemacht und immer wieder ein paar Funktionen ergänzt 🙂aber effektive Arbeitszeit...kp
Vielleicht kann ich dich damit beruhigen, dass ich erst im Winter mit Java angefangen hab und noch garnicht so arg weit bin. Den Großteil hab ich durch Quaxis Tut gelernt (z.b. Wie man sinnvoll mehrere Objekte animiert/zeichnet)
 

Zurück
Oben