編寫程序,事先將所有觀眾姓名輸入數組,然後獲得數組元素的總數量,最後在數組元素中隨機抽取元素的下標,根據抽取的下標獲得幸運觀眾的姓名。
思路如下:
定義輸入框的按鍵事件,使用KeyEvent類別的getKeyChar()函數判斷其是否為回車字符,若不是則不處理;
使用isEmpty()函數判斷文字方塊中是否有字串,如果沒有字串則不做處理;
若為合法輸入則透過JTextArea類別的append()方法把輸入人名與回車符加入人員清單;
使用selectAll()方法選擇文字方塊所有字元;
定義點選「抽取」按鈕時執行的函數,透過JTextArea類別的getText()方法取得人員清單文本,存入字串;
建立一個字串型一維數組,將先前的字串按回車符分割後存入該數組;
透過Math.random()產生隨機數組索引,作為中獎者的數組下標;
定義包含格式參數的中獎資訊;
透過String類別的format()方法為中獎資訊加入人員參數;
使用JTextArea類別的setText()方法在文字域顯示中獎資訊;
定義點選「退出」按鈕時執行的函數,使用System.exit(0)方法退出程式。
程式碼如下:
複製代碼代碼如下:
package cn.edu.xidian.crytoll;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
public class ArrayExample {
private JFrame frame;
private JTextField textField;
private JScrollPane scrollPane;
private JLabel label_1;
JTextArea textArea = new JTextArea();
private JTextArea textArea_1;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ArrayExample window = new ArrayExample();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public ArrayExample() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame("利用陣列隨機抽出幸運觀眾");
frame.setBounds(100, 100, 500, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JLabel label = new JLabel("/u8F93/u5165/u5728/u573A/u89C2/u4F17/u59D3/u540D/u6309/u56DE/u8F66");
label.setBounds(10, 10, 132, 15);
frame.getContentPane().add(label);
textField = new JTextField();
textField.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
do_textField_keyPressed(e);
}
});
textField.setBounds(10, 35, 132, 21);
frame.getContentPane().add(textField);
textField.setColumns(10);
scrollPane = new JScrollPane();
scrollPane.setBounds(10, 66, 132, 185);
frame.getContentPane().add(scrollPane);
textArea_1 = new JTextArea();
scrollPane.setViewportView(textArea_1);
label_1 = new JLabel("/u9009/u53D6/u89C2/u4F17/u4EBA/u5458/uFF1A");
label_1.setBounds(180, 10, 132, 15);
frame.getContentPane().add(label_1);
textArea.setBounds(180, 34, 214, 217);
frame.getContentPane().add(textArea);
JButton button = new JButton("/u62BD/u53D6");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_button_actionPerformed(e);
}
});
button.setBounds(404, 187, 70, 23);
frame.getContentPane().add(button);
JButton button_1 = new JButton("/u9000/u51FA");
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_button_1_actionPerformed(e);
}
});
button_1.setBounds(404, 228, 70, 23);
frame.getContentPane().add(button_1);
}
protected void do_textField_keyPressed(KeyEvent e) {
if (e.getKeyChar() != '/n')// 不是回車字元不做處理
return;
String name = textField.getText();
if (name.isEmpty())// 如果文字方塊沒有字串不做處理
return;
textArea_1.append(name + "/n");// 把輸入人名與回車符號加到人員列表
textField.selectAll();// 選擇文字方塊所有字符
}
protected void do_button_actionPerformed(ActionEvent e) {
String perstring = textArea_1.getText();// 取得人員清單文本
String[] personnelArray = perstring.split("/n{1,}");// 取得人員數組
int index = (int) (Math.random() * personnelArray.length);// 產生隨機陣列索引
// 定義包含格式參數的中獎訊息
String formatArg = "本次抽出觀眾人員:/n/t%1$s/n恭喜%1$5s成為本次觀眾抽獎的大獎得主。"
+ "/n/n我們會頒發%1$5s:/n/t過期的優格二十箱。";
// 為中獎資訊新增人員參數
String info = String.format(formatArg, personnelArray[index]);
textArea.setText(info);// 在文字域顯示中獎信息
}
protected void do_button_1_actionPerformed(ActionEvent e) {
System.exit(0);
}
}
效果如圖所示: