团日活动和外院联谊,支书非要弄一个随机数程序,来决定哪个小组先上场展示,想用c写,但感觉界面不太好看,于是就硬着头皮用java写了.....
支书要求:
一共有四个主题,八个组,每个主题里有之前选定的两个组,先对主题随机抽取,得到主题顺序后,再决定主题内两个小组的出场顺序。
思路:产生四次随机数,并且若有重复,则重新产生,主题内随机数为1,2,分别对应主题内的组号,没有金刚钻,不揽瓷器活,之前刚刚弄完算术题的实训,正好有产生随机数的方法,于是就借来用了。
代码:
MainClass类:
public class MainClass {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ComputerFrame frame;
frame=new ComputerFrame();
frame.setTitle("随机数产生");
frame.setBounds(650,300,550,550);
}
}ComputerFrame类(用户界面化设计):
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ComputerFrame extends JFrame{
JTextField textOne,textTwo;
JButton getProblem,giveAnswer;
JLabel operatorLabel,message,tip;
Teacher teacher1,teacher2;
ComputerFrame(){
teacher1=new Teacher();
teacher1.setMaxInteger1(4);
teacher2=new Teacher();
//teacher2.setMaxInteger2(2);
setLayout(new FlowLayout());
operatorLabel=new JLabel("主题序列:");
operatorLabel.setFont(new Font("华文隶书",Font.BOLD,60));
textOne=new JTextField(15);
textOne.setFont(new Font("宋体",Font.BOLD,60));
getProblem=new JButton("获取上场组号");
getProblem.setFont(new Font("方正舒体",Font.BOLD,40));
message=new JLabel("组内次序:");
message.setFont(new Font("华文隶书",Font.BOLD,60));
textTwo=new JTextField(15);
textTwo.setFont(new Font("宋体",Font.BOLD,60));
// giveAnswer=new JButton("获取组内次序");
// giveAnswer.setFont(new Font("华文琥珀",Font.BOLD,35));
tip=new JLabel("请同一主题的另一小组准备");
tip.setFont(new Font("方正桃体",Font.BOLD,40));
add(operatorLabel);
add(textOne);
add(getProblem);
add(message);
add(textTwo);
add(tip);
// add(giveAnswer);
// textOne.setEditable(false);
// textTwo.setEditable(false);
getProblem.setActionCommand("getProblem");
//giveAnswer.setActionCommand("answer");
teacher1.setJTextField(textOne,textTwo);
// teacher2.setJTextField(textTwo);
getProblem.addActionListener(teacher1);
textTwo.addActionListener(teacher2);
//giveAnswer.addActionListener(teacher2);
setVisible(true);
validate();
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
}Teacher类(产生随机数):
import java.util.Random;
import java.awt.event.*;
import javax.swing.*;
public class Teacher implements ActionListener {
int zunum1 = 1, zunum2 = 2, zunum3 = 3, zunum4 = 4, zunum,zunumx;
int zuinnum1 = 1, zuinnum2 = 2,zuinnum;
Random random;
int maxInteger1,maxInteger2;
int i = 0, j = 0;
JTextField textOne, textTwo;
Teacher() {
random = new Random();
}
public void setMaxInteger1(int n) {
maxInteger1 = n;
}
// public void setMaxInteger2(int n) {
// maxInteger2 = n;
// }
public void setJTextField(JTextField ... t) {
textOne = t[0];
textTwo = t[1];
}
public void actionPerformed(ActionEvent e) {
String str = e.getActionCommand();
if (str.equals("getProblem")) {
do {
zunum = random.nextInt(maxInteger1) + 1;
if (zunum == zunum1) {
zunum1 = 0;
break;
}
if (zunum == zunum2) {
zunum2 = 0;
break;
}
if (zunum == zunum3) {
zunum3 = 0;
break;
}
if (zunum == zunum4) {
zunum4 = 0;
break;
}
} while (zunum != zunum1 && zunum != zunum2 && zunum != zunum3
&& zunum != zunum4);
textOne.setText("第" + zunum + "主题");
zunumx=zunum;
System.out.println(zunumx+"a");
if (zunumx==1) {
zuinnum = (int)(2*(Math.random()+0.5));
if(zuinnum==1)
zuinnum=3;
if(zuinnum==2)
zuinnum=7;
System.out.println(zuinnum+"b");
}
else if (zunumx==2) {
zuinnum = (int)(2*(Math.random()+0.5));
System.out.println(zuinnum+"b");
if(zuinnum==1)
zuinnum=5;
if(zuinnum==2)
zuinnum=8;
System.out.println(zuinnum);
}
else if (zunumx==3) {
zuinnum = (int)(2*(Math.random()+0.5));
if(zuinnum==1)
zuinnum=2;
if(zuinnum==2)
zuinnum=4;
System.out.println(zuinnum+"c");
}
else if (zunumx==4) {
zuinnum = (int)(2*(Math.random()+0.5));
System.out.println(zuinnum+"d");
if(zuinnum==1)
zuinnum=1;
if(zuinnum==2)
zuinnum=6;
}
textTwo.setText("第"+zuinnum+"组首先上场");
}
}
}运行结果:
小结:
产生1,2随机数时,zuinnum = random.nextInt(maxInteger1) + 1;语句不知道出了什么幺蛾子问题,询问老师后,得到了另一种方法:zuinnum = (int)(2*(Math.random()+0.5));
第一次做能派上用场的东西,虽然该学习的地方有很多,但内心中还是很激动的!
本文介绍了作者如何使用Java编写一个随机数程序,用于决定团队展示的顺序。程序需确保四个主题被随机抽取且无重复,每个主题内有两个小组通过再次随机决定顺序。通过Math.random()方法解决了产生1或2的随机数问题,尽管还有待学习,作者对此初次实践感到兴奋。
3249

被折叠的 条评论
为什么被折叠?



