
java 算法 双色球
目的:我想用java做一个辅助双色球选号的系统。从1到33中选出6个号码。问题:怎样让选出的6个号码的和在某个范围内,比如80-100?最好用java语言描述,本人菜鸟,...
目的:我想用java做一个辅助双色球选号的系统。
从 1 到 33 中选出6 个号码。
问题:怎样让选出的6个号码的 和 在某个范围内,比如80-100?
最好用java语言描述,本人菜鸟,最好多些注释。
如果有现成的系统(包括java 源代码),注意一定要是java语言的源代码
加500分
不胜感激
一楼的符合我的意思,但每次都是随机生成一组,如果我要 和 在99到101之间,那么不是要运行很久才能找到?有没有更好的办法?
三楼的写了这么多,提令人感动!但我想知道的是 和个数字之和在 某个区间怎么做? 展开
从 1 到 33 中选出6 个号码。
问题:怎样让选出的6个号码的 和 在某个范围内,比如80-100?
最好用java语言描述,本人菜鸟,最好多些注释。
如果有现成的系统(包括java 源代码),注意一定要是java语言的源代码
加500分
不胜感激
一楼的符合我的意思,但每次都是随机生成一组,如果我要 和 在99到101之间,那么不是要运行很久才能找到?有没有更好的办法?
三楼的写了这么多,提令人感动!但我想知道的是 和个数字之和在 某个区间怎么做? 展开
5个回答
展开全部
每一步都做成了一个单独的方法来做,
所以稍显复杂,不过注释都写了。
完成
1.产生7个随机数
2.验证是否存在相同随机数
3.确定号码选择区域
4.排序
//package com.color.util;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class DoubleBall {
//用来保存产生的每注双色球号码
private List<int[]> ballList;
//保存一注号码的数组
private int[] ball;
//红色球号码总和的开始区域
private int START;
//红色球号码总和的结束区域
private int END;
/**
* 构造方法
* @param number,产生号码的数量
*/
public DoubleBall(){
Scanner s = new Scanner(System.in);
System.out.println("===请输入产生随机号码数量===");
int number = s.nextInt();
this.init();
//完成ballList的初始化
ballList = new ArrayList<int[]>();
for(int i=0;i<number;i++){
//初始化ball
ball = new int[7];
//产生一注号码
ball = this.createBall(ball);
while(true){
int count = 0;
//将所有的号码去掉最后一个号码后相加,用来验证是否在指定的区域内
for(int j=0;j<ball.length-1;j++){
count += ball[j];
}
//如果产生的号码不在指定的区域内,重新产生号码
if(!(count>START && count <END)){
ball = this.createBall(ball);
//否则,退出while,将ball添加到list之中
}else{
break;
}
}
ball = this.sort(ball);
//将这注产生的号码添加到list之中
ballList.add(ball);
}
}
/**
* 产生双色球的七个号码
* @param ball
* @return
*/
public int[] createBall(int[] ball){
for(int i=0;i<ball.length;i++){
//默认最后一个号码保留给蓝色球
if(i<ball.length-1){
//如果是红色球,则验证每个产生的号码是否已经存在。
ball = this.validateBall(ball,i);
}else{
//如果是蓝色球,直接产生1--16之间的随机数
ball[i] = (int) Math.round(Math.random()*15+1);
}
}
//产生号码完毕,返回这注产生的号码。
return ball;
}
/**
* 每次只产生一个红色号码,并验证此号码是否已经存在,
* 如果存在,重新产生号码,只到没有重复号码。
* @param ball
* @param index 产生红色球数组的下标,即第几个号码。
* @return
*/
public int[] validateBall(int[] ball,int index){
//产生一个1--33的随机数
int random = (int) Math.round(Math.random()*32+1);
while(true){
int i=0;
for(;i<index;i++){
//如果存在重复数字
if(random==ball[i]){
//重新产生号码
random = (int) Math.round(Math.random()*32+1);
//并且跳出for循环,进入while循环
i =index+1;
}
}
//如果验证完了所有号码,那把这个号码插入数组,并返回
if(i==index){
ball[index] = random;
return ball;
}
}
}
/**
* 显示产生的双色球号码
*
*/
public void displayBall(){
System.out.println("====产生号码的详细信息如下===");
for(int[] ball:ballList){
for(int i=0;i<ball.length;i++){
//如果号码不足两位数,在前面添加"0"显示。
System.out.print(((ball[i]<10)?("0"+ball[i]):ball[i])+"\t");
}
System.out.println();
}
}
/**
* 完成初始化,制定双色球号码的
* 开始和结束区域
*
*/
public void init(){
Scanner s = new Scanner(System.in);
System.out.println("===请输入开始数字===");
this.START = s.nextInt();
System.out.println("===请输入结束数字===");
this.END = s.nextInt();
if(this.START<=25 || this.END>=150){
System.out.println("输入数字不合法,退出程序!");
System.exit(0);
}
}
/**
* 对号码进行排序,只对最后一个号码以前的
* 号码进行排序
* @param ball
* @return
*/
private int[] sort(int[] ball){
for(int i=0;i<ball.length-1;i++){
for(int j=0;j<ball.length-i-2;j++){
if(ball[j]>ball[j+1]){
int t = ball[j];
ball[j] = ball[j+1];
ball[j+1] = t;
}
}
}
return ball;
}
public static void main(String[] args){
DoubleBall ball = new DoubleBall();
ball.displayBall();
}
}
所以稍显复杂,不过注释都写了。
完成
1.产生7个随机数
2.验证是否存在相同随机数
3.确定号码选择区域
4.排序
//package com.color.util;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class DoubleBall {
//用来保存产生的每注双色球号码
private List<int[]> ballList;
//保存一注号码的数组
private int[] ball;
//红色球号码总和的开始区域
private int START;
//红色球号码总和的结束区域
private int END;
/**
* 构造方法
* @param number,产生号码的数量
*/
public DoubleBall(){
Scanner s = new Scanner(System.in);
System.out.println("===请输入产生随机号码数量===");
int number = s.nextInt();
this.init();
//完成ballList的初始化
ballList = new ArrayList<int[]>();
for(int i=0;i<number;i++){
//初始化ball
ball = new int[7];
//产生一注号码
ball = this.createBall(ball);
while(true){
int count = 0;
//将所有的号码去掉最后一个号码后相加,用来验证是否在指定的区域内
for(int j=0;j<ball.length-1;j++){
count += ball[j];
}
//如果产生的号码不在指定的区域内,重新产生号码
if(!(count>START && count <END)){
ball = this.createBall(ball);
//否则,退出while,将ball添加到list之中
}else{
break;
}
}
ball = this.sort(ball);
//将这注产生的号码添加到list之中
ballList.add(ball);
}
}
/**
* 产生双色球的七个号码
* @param ball
* @return
*/
public int[] createBall(int[] ball){
for(int i=0;i<ball.length;i++){
//默认最后一个号码保留给蓝色球
if(i<ball.length-1){
//如果是红色球,则验证每个产生的号码是否已经存在。
ball = this.validateBall(ball,i);
}else{
//如果是蓝色球,直接产生1--16之间的随机数
ball[i] = (int) Math.round(Math.random()*15+1);
}
}
//产生号码完毕,返回这注产生的号码。
return ball;
}
/**
* 每次只产生一个红色号码,并验证此号码是否已经存在,
* 如果存在,重新产生号码,只到没有重复号码。
* @param ball
* @param index 产生红色球数组的下标,即第几个号码。
* @return
*/
public int[] validateBall(int[] ball,int index){
//产生一个1--33的随机数
int random = (int) Math.round(Math.random()*32+1);
while(true){
int i=0;
for(;i<index;i++){
//如果存在重复数字
if(random==ball[i]){
//重新产生号码
random = (int) Math.round(Math.random()*32+1);
//并且跳出for循环,进入while循环
i =index+1;
}
}
//如果验证完了所有号码,那把这个号码插入数组,并返回
if(i==index){
ball[index] = random;
return ball;
}
}
}
/**
* 显示产生的双色球号码
*
*/
public void displayBall(){
System.out.println("====产生号码的详细信息如下===");
for(int[] ball:ballList){
for(int i=0;i<ball.length;i++){
//如果号码不足两位数,在前面添加"0"显示。
System.out.print(((ball[i]<10)?("0"+ball[i]):ball[i])+"\t");
}
System.out.println();
}
}
/**
* 完成初始化,制定双色球号码的
* 开始和结束区域
*
*/
public void init(){
Scanner s = new Scanner(System.in);
System.out.println("===请输入开始数字===");
this.START = s.nextInt();
System.out.println("===请输入结束数字===");
this.END = s.nextInt();
if(this.START<=25 || this.END>=150){
System.out.println("输入数字不合法,退出程序!");
System.exit(0);
}
}
/**
* 对号码进行排序,只对最后一个号码以前的
* 号码进行排序
* @param ball
* @return
*/
private int[] sort(int[] ball){
for(int i=0;i<ball.length-1;i++){
for(int j=0;j<ball.length-i-2;j++){
if(ball[j]>ball[j+1]){
int t = ball[j];
ball[j] = ball[j+1];
ball[j+1] = t;
}
}
}
return ball;
}
public static void main(String[] args){
DoubleBall ball = new DoubleBall();
ball.displayBall();
}
}
展开全部
疯狂!
int i=0;
int[] ii=new int[6];
while(1>0){
for(int j=0;j<6;j++){
int k=Math.Random()*33(大概是*33,减不减一忘了);
i+=k;
ii[j]=k;
}
if(i>=80&&i<=100){
for(int i=0;i<6;i++){
System.out.println(ii[i]+" ");
}
break;
}
}
int i=0;
int[] ii=new int[6];
while(1>0){
for(int j=0;j<6;j++){
int k=Math.Random()*33(大概是*33,减不减一忘了);
i+=k;
ii[j]=k;
}
if(i>=80&&i<=100){
for(int i=0;i<6;i++){
System.out.println(ii[i]+" ");
}
break;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
import java.util.*;
class DoubleBall
{
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
System.out.println("input min_number:");
int min_number=in.nextInt();
System.out.println("input max_number:");
int max_number=in.nextInt();
int[] rnumber=new int[6];
for(int i=0;i<6;i++)
{
do
{
rnumber[i]=(int)(Math.Random()*max_number);
}
while(rnumber[i]<=min_number||rnumber[i]>=max_number)
}
for(int i=0;i<6;i++)
System.out.println("第"+i+"个随机数"+rnumber[i]);
}
}
class DoubleBall
{
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
System.out.println("input min_number:");
int min_number=in.nextInt();
System.out.println("input max_number:");
int max_number=in.nextInt();
int[] rnumber=new int[6];
for(int i=0;i<6;i++)
{
do
{
rnumber[i]=(int)(Math.Random()*max_number);
}
while(rnumber[i]<=min_number||rnumber[i]>=max_number)
}
for(int i=0;i<6;i++)
System.out.println("第"+i+"个随机数"+rnumber[i]);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我也写了一下,大家研究一下
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.JOptionPane;
class colorboll extends Frame implements ActionListener,Runnable
{
TextField text1,text2,text3;
Button kaishi,stop,restart;
Thread t1;
Random rr;
boolean bb=true;
colorboll(String d)
{
setTitle(d);
setLayout(new FlowLayout());
t1=new Thread(this);
rr=new Random();
text1=new TextField(5);
text2=new TextField(5);
text3=new TextField(20);
text3.setForeground(Color.red);
kaishi=new Button("开始");
restart=new Button("继续");
kaishi.setForeground(Color.red);
stop=new Button("停止");
stop.setForeground(Color.gray);
kaishi.addActionListener(this);
stop.addActionListener(this);
add(new Label("输入下限"));
add(text1);
add(new Label("输入上限"));
add(text2);
add(kaishi);
add(stop);
add(restart);
add(text3);
setSize(280,150);
setResizable(false);
setVisible(true);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent ee)
{
if(ee.getSource()==kaishi)
{
t1.start();
}
else if(ee.getSource()==stop)
{
bb=false;
}
if(ee.getSource()==restart)
{
//此模块的功能是:按下按钮restart时,继续输出随机数字
//但本人没有办法做到,望高手帮忙完成
}
}
public void run()
{
int aa=0,cc=0;
try
{
aa=Integer.parseInt(text1.getText());
cc=Integer.parseInt(text2.getText());
}
catch(Exception ww)
{
JOptionPane.showMessageDialog(this,"输入了非数字字符!");
text1.setText(null);
text2.setText(null);
}
while(bb)
{
int x1=rr.nextInt(33);
int x2=rr.nextInt(33);
int x3=rr.nextInt(33);
int x4=rr.nextInt(33);
int x5=rr.nextInt(33);
int x6=rr.nextInt(33);
String s=""+x1+"-"+x2+"-"+x3+"-"+x4+"-"+x5+"-"+x6;
int xx=x1+x2+x3+x4+x5+x6;
if(xx>aa&&xx<cc)
text3.setText(s);
if(bb==false)
break;
try
{
Thread.sleep(50);
}
catch(Exception qq){}
}
}
}
public class pppp {
public static void main(String[] args) {
new colorboll("随机数生成器");
}
}
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.JOptionPane;
class colorboll extends Frame implements ActionListener,Runnable
{
TextField text1,text2,text3;
Button kaishi,stop,restart;
Thread t1;
Random rr;
boolean bb=true;
colorboll(String d)
{
setTitle(d);
setLayout(new FlowLayout());
t1=new Thread(this);
rr=new Random();
text1=new TextField(5);
text2=new TextField(5);
text3=new TextField(20);
text3.setForeground(Color.red);
kaishi=new Button("开始");
restart=new Button("继续");
kaishi.setForeground(Color.red);
stop=new Button("停止");
stop.setForeground(Color.gray);
kaishi.addActionListener(this);
stop.addActionListener(this);
add(new Label("输入下限"));
add(text1);
add(new Label("输入上限"));
add(text2);
add(kaishi);
add(stop);
add(restart);
add(text3);
setSize(280,150);
setResizable(false);
setVisible(true);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent ee)
{
if(ee.getSource()==kaishi)
{
t1.start();
}
else if(ee.getSource()==stop)
{
bb=false;
}
if(ee.getSource()==restart)
{
//此模块的功能是:按下按钮restart时,继续输出随机数字
//但本人没有办法做到,望高手帮忙完成
}
}
public void run()
{
int aa=0,cc=0;
try
{
aa=Integer.parseInt(text1.getText());
cc=Integer.parseInt(text2.getText());
}
catch(Exception ww)
{
JOptionPane.showMessageDialog(this,"输入了非数字字符!");
text1.setText(null);
text2.setText(null);
}
while(bb)
{
int x1=rr.nextInt(33);
int x2=rr.nextInt(33);
int x3=rr.nextInt(33);
int x4=rr.nextInt(33);
int x5=rr.nextInt(33);
int x6=rr.nextInt(33);
String s=""+x1+"-"+x2+"-"+x3+"-"+x4+"-"+x5+"-"+x6;
int xx=x1+x2+x3+x4+x5+x6;
if(xx>aa&&xx<cc)
text3.setText(s);
if(bb==false)
break;
try
{
Thread.sleep(50);
}
catch(Exception qq){}
}
}
}
public class pppp {
public static void main(String[] args) {
new colorboll("随机数生成器");
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把代码发给我用下吧,谢谢啦
723889@qq.com
723889@qq.com
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询