数据结构与算法分析-第一章Java类(04)
生活随笔
收集整理的這篇文章主要介紹了
数据结构与算法分析-第一章Java类(04)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
定義一個名為GenericCoin的類表示一枚沒有面值也沒有名字的硬幣。這枚硬幣應該有一個頂面與一個底面,并且可以標明哪一面朝上。應該能夠拋擲這枚硬幣使之隨機掉落,或者頂面朝上,或者底面朝上。
a.編寫一個程序將兩枚硬幣各拋擲50次。記錄并報告每枚硬幣各有多少次頂面朝上,報告那一枚硬幣頂面朝上的次數多
b.編寫一個程序來玩一個簡單的拋硬幣游戲。要求用戶猜測隱蔽會是頂面還是底面朝上,然后跑硬幣,并將結果告訴用戶,宣告用戶的猜測是否正確,并將結果裂成表格。用戶可以持續的玩這個游戲,想玩多久就玩多久。當用戶退出時,顯示一個游戲總結,包括:拋硬幣的次數,頂面朝上的次數,底面朝上的次數,猜測正確的次數,和猜測正確的百分比。并可以應用戶要求以圖形演示每次拋硬幣的結果。
GenericCoin類,非常簡單,里面有個方法cast表示拋一次硬幣動作,用了java里的隨機數和取絕對值操作(防止出現負數),這里用了枚舉類表示硬幣的正面和反面
package com.crazycoder2010.datastructure.ch01;import java.util.Random;public class GenericCoin {//表示硬幣的正面和反面public static enum FACE{FONT,BACK;}private FACE face;public FACE getFace() {return face;}public void cast(){int index = 1;Random random = new Random();index = random.nextInt()%2;this.face = FACE.values()[Math.abs(index)];} }測試稱許a-模擬兩個硬幣一起拋做數據對比 package com.crazycoder2010.datastructure.ch01;import com.crazycoder2010.datastructure.ch01.GenericCoin.FACE;public class GenericCoinTest {public static void main(String[] args) {GenericCoin coin1 = new GenericCoin();int index1 = countFace(coin1,50);GenericCoin coin2 = new GenericCoin();int index2 = countFace(coin2,50);System.out.println("Coin 1:"+index1);System.out.println("Coin 2:"+index2);}private static int countFace(GenericCoin coin,int times){int total = 0;for(int i = 0;i < times;i++){coin.cast();if(coin.getFace() == FACE.FONT){total++;}}return total;} } 這個稱許的輸出結果為:Coin 1:23
Coin 2:21
測試程序b-提供ui界面給用戶,這里用的是jframe
package com.crazycoder2010.datastructure.ch01;import java.awt.FlowLayout; import java.awt.HeadlessException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.AbstractTableModel;import com.crazycoder2010.datastructure.ch01.GenericCoin.FACE;public class GenericCoinTestUI extends JFrame {private static int index = 0;private List<Guess> results = new ArrayList<Guess>();// 保存所有猜測結果private Map<FACE, Integer> actual = new HashMap<FACE, Integer>();//實際硬幣展示的數量,key:正面/反面,value:對應的硬幣正面或反面出現的次數private static final long serialVersionUID = 2948063316297165651L;public GenericCoinTestUI() throws HeadlessException {super();setTitle("拋硬幣游戲");setSize(500, 550);setResizable(false);this.getContentPane().setLayout(new FlowLayout());//游戲開始之前反面/正面出現的實際次數都為0actual.put(FACE.FONT, 0);actual.put(FACE.BACK, 0);this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {StringBuffer message = new StringBuffer("----游戲總結----\n");message.append("猜測總次數:").append(results.size()).append("\n");message.append("正面次數:").append(actual.get(FACE.FONT)).append("\n");message.append("反面次數:").append(actual.get(FACE.BACK)).append("\n");int success = doSummarySuccess(results);message.append("猜中次數:").append(success).append("\n");message.append("猜中百分比:").append(Float.valueOf(success)*100/results.size()).append("%\n");JOptionPane.showMessageDialog(null, message);System.exit(0);}});final AbstractTableModel tableModel = new MyTable(this.results);JTable table = new JTable(tableModel);JScrollPane scrollPane = new JScrollPane(table);final JComboBox<String> faces = new JComboBox<String>();faces.addItem("正面");faces.addItem("反面");this.getContentPane().add(faces);JButton throwButton = new JButton("猜猜");this.getContentPane().add(throwButton);final JLabel label = new JLabel();this.getContentPane().add(label);throwButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {GenericCoin coin = new GenericCoin();coin.cast();actual.put(coin.getFace(), actual.get(coin.getFace())+1);Guess guess = new Guess(++index, FACE.values()[faces.getSelectedIndex()],coin.getFace() == FACE.values()[faces.getSelectedIndex()]);results.add(guess);label.setText(guess.isRight()?"猜中了!":"沒猜中!");tableModel.fireTableDataChanged();}});this.getContentPane().add(scrollPane);}public static void main(String[] args) {new GenericCoinTestUI().setVisible(true);}private int doSummarySuccess(List<Guess> guesses){int total = 0;for(Guess guess : guesses){if(guess.isRight()){total++;}}return total;}private static class MyTable extends AbstractTableModel {private String[] header = { "索引", "猜測", "猜中" };private List<Guess> guesses;private MyTable(List<Guess> guesses){this.guesses = guesses;}@Overridepublic int getRowCount() {return guesses.size();}@Overridepublic String getColumnName(int column) {return header[column];}@Overridepublic int getColumnCount() {return header.length;}@Overridepublic Object getValueAt(int rowIndex, int columnIndex) {Guess guess = guesses.get(rowIndex);if(columnIndex == 0){return guess.getIndex();}else if(columnIndex == 1){return guess.getFace();}else if(columnIndex == 2){return guess.isRight();}return null;}}private static class Guess {//這個類表示用戶的一次猜測行為private int index;//猜測的索引,第一次猜猜,第二次猜測。。。private FACE face;//用戶猜測的硬幣面-正面或反面private boolean right;//這次猜測活動用戶是否猜中public Guess(int index, FACE face, boolean right) {this.index = index;this.face = face;this.right = right;}public int getIndex() {return index;}public FACE getFace() {return face;}public boolean isRight() {return right;}} } 看一下運行結果界面:轉載于:https://www.cnblogs.com/javaexam2/archive/2012/08/09/2632483.html
總結
以上是生活随笔為你收集整理的数据结构与算法分析-第一章Java类(04)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】Linux上安装使用SSH(ubu
- 下一篇: Windows平台Android开发环境