Main warten lassen bis Variable durch Button übergeben wird

Affenfaust

Mitglied
Hey Leute,
ich habe als Übung ein kleines Programm geschrieben, das x mal eine Zufallszahl würfelt, dessen generierten Zahlen zwischen 0 und w liegen.

Java:
import java.util.Random;
import java.util.Scanner;

public class Würfelexperiment{
  public static void main (String args[]){
        Random dice = new Random();
        Scanner scan = new Scanner(System.in);
        int number;



        
        while (true)
        {
        

        
        System.out.println("Wie oft soll gewürfelt werden?");
        int y = scan.nextInt();
        System.out.println("Wie viele Zahlen sollen möglich sein?");
        int w = scan.nextInt();
        System.out.println("");

        double[] array = new double[w+1];

         for (int z=1; z<=y; ++z){
          ++array[1+dice.nextInt(w)];
          
          // System.out.println(number);  //Nur bei unter 1 000 000 würfen!
          
         }
          
          int print=0;

          System.out.println("Häufigkeit                            Wahrscheinlichkeit (experimentell)");

          for (int counter=0; counter<w; ++counter){
          ++print;
           double f = array[print]/y*100;
           int g = (int)f;
            System.out.println(print+" = "+array[print]+"                         "+g+"%");
          }

         System.out.println("");
         System.out.println("");
         System.out.println("");

        }
  }
}

Das Programm funktioniert super, aber ich möchte es durch ein GUI steuern können. Mein Problem ist nun, dass ich nicht weiß wie ich den Input den ich von dem GUI bekomme an meine "Würfelexperiment"(-main) class weiter geben kann und diese auch warten zu lassen bis der button gedrückt wurde.

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class frame extends JFrame{

       private JTextField textfield1;
       private JTextField textfield2;
       private JLabel label1;
       private JLabel label2;
       private JButton button;
       
       public frame(){
       
         super("Würfelexperiment");
         setLayout(new FlowLayout());
         
         label1 = new JLabel("Wie oft soll gewürfelt werden?");
         add(label1);
         
         textfield1 = new JTextField("",12);
         add(textfield1);
         
         label2 = new JLabel("Wie viele Zahlen sollen möglich sein?");
         add(label2);
         
         textfield2 = new JTextField("",12);
         add(textfield2);
         
         button = new JButton("      Ausführen      ");
         add(button);
         
         HandlerClass handler = new HandlerClass();
         button.addActionListener(handler);
         
       }
       
       private class HandlerClass implements ActionListener{
           public void actionPerformed(ActionEvent event){
                  String s = textfield1.getText();
                  int y = Integer.parseInt(s);
                
// was muss hier hingeschrieben werden, um die Werte zu übergeben?

                  JOptionPane.showMessageDialog(null, "Platzhalter\nPlatzhalter");
           }
       }
       
}


Java:
import javax.swing.JFrame;
import java.util.Random;
import java.util.Scanner;


public class würfelexperiment{
  public static void main(String args[]){

         frame window = new frame();
         window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         window.setSize(275,180);
         window.setVisible(true);
         window.setResizable(false);
         


          int y = 10000;
          int w = 1;
         
         
         Random dice = new Random();
         Scanner scan = new Scanner(System.in);
         int number;


        while (true)
        {

        double[] array = new double[w+1];

         for (int z=1; z<=y; ++z){
          ++array[1+dice.nextInt(w)];


         }

          int print=0;

   //       System.out.println("Häufigkeit                            Wahrscheinlichkeit (experimentell)");

          for (int counter=0; counter<w; ++counter){
          ++print;
           double f = array[print]/y*100;
           int g = (int)f;
            System.out.println(print+" = "+array[print]+"                         "+g+"%");
          }

        }
         

  }
}

(y und w sind nur deklariert damit das Programm ausführbar ist, der Code ist noch ziemlich provisorisch...)

Ich hoffe ich habe mich verständlich ausgedrückt!
Cheers, Affenfaust 🙂
 
Zuletzt bearbeitet:
Mein Problem ist nun, dass ich nicht weiß wie ich den Input den ich von dem GUI bekomme an meine "Würfelexperiment"(-main) class weiter geben kann
Am besten gar nicht. ;-) Definiere eine saubere Methode in der Klasse Würfelexperiment. In der erzeugst Du ein Object von Würfelexperiment und rufst im ActionListener des Buttons diese Methode auf. Wenn Du es Dir einfacher machen willst implementierst diese Methode direkt in der GUI Klasse und sparst Dir damit die Erstellung des Objekts (vom Typ Würfelexperiment).
Das while(true) muss naturlich raus und durch eine sinnvolle Abbruchbedingung ersetzt werden.
 
hey Michael,
danke für den Denkanstoß! Der Code sieht nun so aus:

Java:
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import java.util.Random;
import java.util.Scanner;


public class würfelexperiment{
  public static void main(String args[]){

         frame window = new frame();
         window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         window.setSize(275,180);
         window.setVisible(true);
         window.setResizable(false);
  }
  
  
   public void würfeln(int y, int w){

            Random dice = new Random();
            Scanner scan = new Scanner(System.in);
            int number;


             for (int p=1; p<=1; ++p)
              {

               double[] array = new double[w+1];

                  for (int z=1; z<=y; ++z){
                      ++array[1+dice.nextInt(w)];

                  }

                                int print=0;


                                      for (int counter=0; counter<w; ++counter){
                                          ++print;
                                             double f = array[print]/y*100;
                                             int g = (int)f;
                                             JOptionPane.showMessageDialog(null, print+" = "+array[print]+"                         "+g+"%");
                                       }


             }
         }
  
  
  
}


Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class frame extends JFrame{

       private JTextField textfield1;
       private JTextField textfield2;
       private JLabel label1;
       private JLabel label2;
       private JButton button;
       
       public frame(){
       
         super("Würfelexperiment");
         setLayout(new FlowLayout());
         
         label1 = new JLabel("Wie oft soll gewürfelt werden?");
         add(label1);
         
         textfield1 = new JTextField("",12);
         add(textfield1);
         
         label2 = new JLabel("Wie viele Zahlen sollen möglich sein?");
         add(label2);
         
         textfield2 = new JTextField("",12);
         add(textfield2);
         
         button = new JButton("      Ausführen      ");
         add(button);
         
         HandlerClass handler = new HandlerClass();
         button.addActionListener(handler);
         
       }
       
       private class HandlerClass implements ActionListener{
           public void actionPerformed(ActionEvent event){
                  String s = textfield1.getText();
                  int ay = Integer.parseInt(s);
                  
                  String d = textfield2.getText();
                  int aw = Integer.parseInt(d);
                  
                  würfelexperiment object = new würfelexperiment();
                  
                  object.würfeln(ay, aw);

           }
       }
       
}

Läuft ohne Probleme. Vielen Dank! 😀
cheers, Affenfaust
 

Zurück
Oben