问题一:求一个检测重复号的方法`
问题二:我建了七个类`感觉代码太重复`本想用接口``但是Lottery.jTextField1.setText(String.valueOf(num)); 这句话放到RUN里面才有效果`每个线程里的jTextField名称又不是一样的```
有什么办法能解决这个问题`那样就可以用Runnable接口了``
package less13;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;
import java.util.*;/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class Lottery extends javax.swing.JFrame {
static JButton jButton2;
static JTextField jTextField6;
static JTextField jTextField7;
static JTextField jTextField5;
static JTextField jTextField4;
static JTextField jTextField3;
static JTextField jTextField2;
static JTextField jTextField1;
private JButton jButton1; /**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Lottery inst = new Lottery();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
public Lottery() {
super("双色球摇号系统");
initGUI();
}
private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
getContentPane().setLayout(null);
{
jButton1 = new JButton();
getContentPane().add(jButton1);
jButton1.setText("\u5f00\u59cb\u6447\u53f7");
jButton1.setBounds(36, 170, 86, 36);
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
}
{
jButton2 = new JButton();
getContentPane().add(jButton2);
jButton2.setText("\u590d\u4f4d");
jButton2.setBounds(228, 171, 103, 35);
jButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
}
{
jTextField1 = new JTextField();
getContentPane().add(jTextField1);
jTextField1.setBounds(12, 93, 34, 28);
}
{
jTextField2 = new JTextField();
getContentPane().add(jTextField2);
jTextField2.setBounds(65, 93, 34, 28);
}
{
jTextField3 = new JTextField();
getContentPane().add(jTextField3);
jTextField3.setBounds(116, 93, 34, 28);
}
{
jTextField4 = new JTextField();
getContentPane().add(jTextField4);
jTextField4.setBounds(168, 93, 34, 28);
}
{
jTextField5 = new JTextField();
getContentPane().add(jTextField5);
jTextField5.setBounds(218, 93, 34, 28);
}
{
jTextField6 = new JTextField();
getContentPane().add(jTextField6);
jTextField6.setBounds(275, 93, 34, 28);
}
{
jTextField7 = new JTextField();
getContentPane().add(jTextField7);
jTextField7.setBounds(337, 93, 34, 28);
}
pack();
setSize(400, 300);
} catch (Exception e) {
e.printStackTrace();
}
}
//检查是否有相等号码的方法
public void idEqual()
{
}
//摇号事件
private void jButton1ActionPerformed(ActionEvent evt) {
Number1 n1=new Number1();
Number2 n2=new Number2();
Number3 n3=new Number3();
Number4 n4=new Number4();
Number5 n5=new Number5();
Number6 n6=new Number6();
Number7 n7=new Number7();
n1.start();
n2.start();
n3.start();
n4.start();
n5.start();
n6.start();
n7.start();
}
//复位事件
private void jButton2ActionPerformed(ActionEvent evt) {
jTextField1.setText(String.valueOf(0));
jTextField2.setText(String.valueOf(0));
jTextField3.setText(String.valueOf(0));
jTextField4.setText(String.valueOf(0));
jTextField5.setText(String.valueOf(0));
jTextField6.setText(String.valueOf(0));
jTextField7.setText(String.valueOf(0)); }
}class Number1 extends Thread
{
Random r= new Random();
int num=0;
public void run()
{
for(int i=0;i<100;i++)
{
num=r.nextInt(33)+1;
try {
sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
} Lottery.jTextField1.setText(String.valueOf(num));
}
}
}
class Number2 extends Thread
{
Random r= new Random();
int num=0;
public void run()
{
for(int i=0;i<100;i++)
{
num=r.nextInt(33)+1;
try {
sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Lottery.jTextField2.setText(String.valueOf(num));
}
}
}
class Number3 extends Thread
{
Random r= new Random();
int num=0;
public void run()
{
for(int i=0;i<100;i++)
{
num=r.nextInt(33)+1;
try {
sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Lottery.jTextField3.setText(String.valueOf(num));
}
}
}
class Number4 extends Thread
{
Random r= new Random();
int num=0;
public void run()
{
for(int i=0;i<100;i++)
{
num=r.nextInt(33)+1;
try {
sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Lottery.jTextField4.setText(String.valueOf(num));
}
}
}
class Number5 extends Thread
{
Random r= new Random();
int num=0;
public void run()
{
for(int i=0;i<100;i++)
{
num=r.nextInt(33)+1;
try {
sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Lottery.jTextField5.setText(String.valueOf(num));
}
}
}
class Number6 extends Thread
{
Random r= new Random();
int num=0;
public void run()
{
for(int i=0;i<100;i++)
{
num=r.nextInt(33)+1;
try {
sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Lottery.jTextField6.setText(String.valueOf(num));
}
}
}
class Number7 extends Thread
{
Random r= new Random();
int num=0;
public void run()
{
for(int i=0;i<100;i++)
{
num=r.nextInt(16)+1;
try {
sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Lottery.jTextField7.setText(String.valueOf(num));
}
}
}
问题二:我建了七个类`感觉代码太重复`本想用接口``但是Lottery.jTextField1.setText(String.valueOf(num)); 这句话放到RUN里面才有效果`每个线程里的jTextField名称又不是一样的```
有什么办法能解决这个问题`那样就可以用Runnable接口了``
package less13;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;
import java.util.*;/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class Lottery extends javax.swing.JFrame {
static JButton jButton2;
static JTextField jTextField6;
static JTextField jTextField7;
static JTextField jTextField5;
static JTextField jTextField4;
static JTextField jTextField3;
static JTextField jTextField2;
static JTextField jTextField1;
private JButton jButton1; /**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Lottery inst = new Lottery();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
public Lottery() {
super("双色球摇号系统");
initGUI();
}
private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
getContentPane().setLayout(null);
{
jButton1 = new JButton();
getContentPane().add(jButton1);
jButton1.setText("\u5f00\u59cb\u6447\u53f7");
jButton1.setBounds(36, 170, 86, 36);
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
}
{
jButton2 = new JButton();
getContentPane().add(jButton2);
jButton2.setText("\u590d\u4f4d");
jButton2.setBounds(228, 171, 103, 35);
jButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
}
{
jTextField1 = new JTextField();
getContentPane().add(jTextField1);
jTextField1.setBounds(12, 93, 34, 28);
}
{
jTextField2 = new JTextField();
getContentPane().add(jTextField2);
jTextField2.setBounds(65, 93, 34, 28);
}
{
jTextField3 = new JTextField();
getContentPane().add(jTextField3);
jTextField3.setBounds(116, 93, 34, 28);
}
{
jTextField4 = new JTextField();
getContentPane().add(jTextField4);
jTextField4.setBounds(168, 93, 34, 28);
}
{
jTextField5 = new JTextField();
getContentPane().add(jTextField5);
jTextField5.setBounds(218, 93, 34, 28);
}
{
jTextField6 = new JTextField();
getContentPane().add(jTextField6);
jTextField6.setBounds(275, 93, 34, 28);
}
{
jTextField7 = new JTextField();
getContentPane().add(jTextField7);
jTextField7.setBounds(337, 93, 34, 28);
}
pack();
setSize(400, 300);
} catch (Exception e) {
e.printStackTrace();
}
}
//检查是否有相等号码的方法
public void idEqual()
{
}
//摇号事件
private void jButton1ActionPerformed(ActionEvent evt) {
Number1 n1=new Number1();
Number2 n2=new Number2();
Number3 n3=new Number3();
Number4 n4=new Number4();
Number5 n5=new Number5();
Number6 n6=new Number6();
Number7 n7=new Number7();
n1.start();
n2.start();
n3.start();
n4.start();
n5.start();
n6.start();
n7.start();
}
//复位事件
private void jButton2ActionPerformed(ActionEvent evt) {
jTextField1.setText(String.valueOf(0));
jTextField2.setText(String.valueOf(0));
jTextField3.setText(String.valueOf(0));
jTextField4.setText(String.valueOf(0));
jTextField5.setText(String.valueOf(0));
jTextField6.setText(String.valueOf(0));
jTextField7.setText(String.valueOf(0)); }
}class Number1 extends Thread
{
Random r= new Random();
int num=0;
public void run()
{
for(int i=0;i<100;i++)
{
num=r.nextInt(33)+1;
try {
sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
} Lottery.jTextField1.setText(String.valueOf(num));
}
}
}
class Number2 extends Thread
{
Random r= new Random();
int num=0;
public void run()
{
for(int i=0;i<100;i++)
{
num=r.nextInt(33)+1;
try {
sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Lottery.jTextField2.setText(String.valueOf(num));
}
}
}
class Number3 extends Thread
{
Random r= new Random();
int num=0;
public void run()
{
for(int i=0;i<100;i++)
{
num=r.nextInt(33)+1;
try {
sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Lottery.jTextField3.setText(String.valueOf(num));
}
}
}
class Number4 extends Thread
{
Random r= new Random();
int num=0;
public void run()
{
for(int i=0;i<100;i++)
{
num=r.nextInt(33)+1;
try {
sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Lottery.jTextField4.setText(String.valueOf(num));
}
}
}
class Number5 extends Thread
{
Random r= new Random();
int num=0;
public void run()
{
for(int i=0;i<100;i++)
{
num=r.nextInt(33)+1;
try {
sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Lottery.jTextField5.setText(String.valueOf(num));
}
}
}
class Number6 extends Thread
{
Random r= new Random();
int num=0;
public void run()
{
for(int i=0;i<100;i++)
{
num=r.nextInt(33)+1;
try {
sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Lottery.jTextField6.setText(String.valueOf(num));
}
}
}
class Number7 extends Thread
{
Random r= new Random();
int num=0;
public void run()
{
for(int i=0;i<100;i++)
{
num=r.nextInt(16)+1;
try {
sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Lottery.jTextField7.setText(String.valueOf(num));
}
}
}
假设36个号码
建个数组长36,分别初始化值为1-36
用一个int型变量num来标识当前数组可用的最后一位下标35
从0-num随机取值,取到后,将此下标的数组与下标为num的值交换位置
num--;再0-num随机取一个值,取后,再和下标为num的值交换位置
num--;
……
循环直到取满,所要的个数
for(int i = 0; i < num.length; i++)
{
num[i] = (int)(Math.random()*100);
}
int[] newNum = new int[20];
int length = num.length;
for(int j = 0; j < newNum.length; j++)
{
int index = (int)(Math.random()*length);//随机产生下标
newNum[j] = num[index];
num[index] = num[length-1];
length--;
}
//newNum就是不重复的随机抽取数,纯手写,没测试过,可能有误- -!
这样吧,加入你要做个模拟双色球的例子,从33个球里面选6个出来,保证不重复. private static Random random = new Random();
public static int[] red = new int[33];
private static int temp; static {
for (int i = 0; i < 33; i++) {
red[i] = i + 1;
}
}
//随机取一个已有的数字,将它和第一个元素交换,你重复个若干次,然后直接取前6个元素就可以了
//这个你可以做随机发牌程序也可以
public static String getRedNumbers() {
for (int i = 200; i > 0; i--) {
int n = random.nextInt(33);
temp = red[0];
red[0] = red[n];
red[n] = temp;
}
return red[0] + " " + red[1] + " " + red[2] + " " + red[3] + " "
+ red[4] + " " + red[5] + " ";
}
import java.util.HashSet;
import java.util.Set;public class Lottery { private Set<Integer> set = new HashSet<Integer>();
public int generateNum(int range) {
int num = (int)(Math.random() * (range)) + 1;
if(set.contains(num)) {
System.out.println("\n---duplication " + num + "!!! re-generate---\n");
return generateNum(range);
} else {
set.add(num);
}
return num;
}
public void getAllNumbers() {
for(int i = 0; i < 7; i ++) {
System.out.print("\nLottery Num: " + generateNum(33));
}
}
/*** test ***/
public static void main(String args[]) {
Lottery l = new Lottery();
l.getAllNumbers();
}
}
do{
for(int i=0;i<6;i++){
a[i]=(int) (Math.random()*35+1);
}
c=0;
Arrays.sort(a);
for(int i=1;i<6;i++){
if(a[i]==a[i-1]){
c=1;
}
}
}while(c==1);
do
{
for (int i = 0; i < 6; i++)
{
a[i] = seed.Next(1, 36);
b += a[i] + c;
} d = 0; for (int j = 0; j < 5; j++)
{
for (int k = j+1; k < 6; k++)
{
if (a[j] == a[k])
{
d = 1;
b = "";
break;
}
}
}
} while (d == 1);