iT邦幫忙

0

我想問一個程式問題

jason1418 5 年前4452 瀏覽

各位好

我今天想要做一個兩顆骰子加總合計為六的機率統計
不是直接算機率(5/36)
是想做一個模擬器,但測試次數也不要特別固定式多少次
我想用java寫介面跑出來,A(第一顆骰子)B(第二顆骰子)都用random
然後加總輸出到label上,想要每次改變,上面的值就會動態改變

請問該如何寫?謝謝

1 個回答

6
kiho46
iT邦新手 5 級 ‧ 5 年前
<pre class="c" name="code">
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;

import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;


public class disc0615 {
	public static void main(String[] args) throws IOException{
		new disc0615();
		}
	
	JFrame myframe_1 = new JFrame("骰子計算 [@hua]"); // 標題
	
	JLabel LabelName;
	JTextArea NumberTextArea = new JTextArea();
	JButton button_1 = new JButton();
	JTextArea messageTextArea = new JTextArea();
	
	JScrollPane ScrollPane = new JScrollPane();
	JPanel Panel1 = new JPanel();
	JPanel Panel2 = new JPanel();
	
	int A = 0 , B = 0; // 設A.B骰子
	int sum = 0; // 設總和
	int k = 0; // 計算總合=6
	String F1 = " "; // 設定該次=6標記
	
	public disc0615()  throws IOException {
		myframe_1.setBounds(300, 240, 350, 200);
		myframe_1.setLayout(null);
		myframe_1.setVisible(true); // 顯示框架
		myframe_1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 關閉後,結束全部處理程
		myframe_1.setResizable(false); // 使用者不可變更視窗大小(無最大化)
		myframe_1.setAlwaysOnTop(true); // 指定視窗在最上層顯示
		
		
		myframe_1.add(LabelName = new JLabel("骰子的次數:"));
		LabelName.setBounds(10, 10, 100, 20);
		myframe_1.add(NumberTextArea); // 控制次數
		NumberTextArea.setBounds(100, 10, 100, 20);
		myframe_1.add(button_1 = new JButton("start"));
		button_1.setBounds(220, 10, 70, 20);
		
		
		// 設定捲軸框
		myframe_1.getContentPane().add(ScrollPane = new JScrollPane(messageTextArea));
		ScrollPane.setBounds(10, 40, 300, 95);
		Dimension area = new Dimension(100,100);
		messageTextArea.setPreferredSize(area);
		messageTextArea.setLayout(null);
		
		Button();
	}
	 private void Button(){
		button_1.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e)
            {
            	Integer number = Integer.parseInt(NumberTextArea.getText());// 控制次數
            	
        		for(int i = 1 ; i<number+1 ; i++ ){
        			
        			A = (int)(Math.random() * 7+1); // 產生A亂數
        			B = (int)(Math.random() * 7+1); // 產生B亂數
        			
        			sum = A + B;
        			
        			if(sum==6){
        				F1 = "yes" ;
        				k++;
        			}else{F1 = " ";}
        			
        			messageTextArea.append(i +". [骰子A= " + A + "] [骰子B= " + B + "] [總和= " + sum + "] " + F1 + "\n");
        			messageTextArea.setCaretPosition(messageTextArea.getText().length());
        			
        			// 重新檢查 是否要捲軸
        			messageTextArea.revalidate(); // 重新檢查
					Dimension area = new Dimension(100,messageTextArea.getText().length());
					messageTextArea.setPreferredSize(area);
					messageTextArea.getPreferredSize().setSize(area);
					messageTextArea.getPreferredSize().getSize();
        			
        		}
        		messageTextArea.append("\n.........A + B = 6 共有  " + k + " 次");
            }

        });

	 }
	
}
看更多先前的回應...收起先前的回應...
jason1418 iT邦新手 5 級 ‧ 5 年前 檢舉

您好,謝謝你用新的回覆
但我想請問一下,可否做到連續做...我只須要給他做的時間頻率,不間斷的做,然後機率也會依據不間斷的骰骰子而動態改變?

jason1418 iT邦新手 5 級 ‧ 5 年前 檢舉

補充說明一下,我不要限定測試次數,用執行緒做的到?

海綿寶寶 iT邦超人 1 級 ‧ 5 年前 檢舉

列72改成這樣
不就會跑到當機為止衝刺

<pre class="c" name="code">for(int i = 1 ; i<number+1 ;  ){

寫這程式的目的到底是什麼?
難道你是在當好人,寫作業追女生下雨

尼克 iT邦高手 1 級 ‧ 5 年前 檢舉

真是好心人!

總裁 iT邦好手 1 級 ‧ 5 年前 檢舉

antijava提到:
寫作業追女生

沒用的,這樣只會有好人卡...嘆氣

kiho46 iT邦新手 5 級 ‧ 5 年前 檢舉

太無聊拉
看這問題還蠻easy,就try一下囉!!

jason1418 iT邦新手 5 級 ‧ 5 年前 檢舉

沒有啦~不是追女生~~~哈哈哈
只是想試試看而已

我要怎麼改才可以做到我想達成的樣子呀~~~請伺教~

jason1418 iT邦新手 5 級 ‧ 5 年前 檢舉

抱歉,我看到您的回應了~
謝謝
所以new Thread算是執行緒的效果嗎?

kiho46 iT邦新手 5 級 ‧ 5 年前 檢舉

new Thread()是執行緒

我要發表回答

立即登入回答