当前位置: 代码迷 >> Java相关 >> JAVA 随机数 Random,求好手
  详细解决方案

JAVA 随机数 Random,求好手

热度:9288   发布时间:2013-02-25 21:44:50.0
JAVA 随机数 Random,求高手
* 随机产生7个随机数,前六个数字的范围是从1至33,第7个数的范围是从1至22。

* 就只有一个要求
* 前六个的数字是1至33之间不重复的数。


import java.util.Random;

public class SSQiu {

/**
* @param args
* 随机产生7个随机数,前六个数字的范围是从1至33,第7个数的范围是从1至22。

* 就只有一个要求
* 前六个的数字是1至33之间不重复的数。

* 这个程序感觉写的很复杂,有没有简单一点的写法,求高手

*/

public static final int SCOPE_1_6 = 33; //The first sixth number's scope is from 1 to 33,including 1 and 33 ,(1 <= X <= 33) 

public static final int SCOPE_7 = 22; // The first seventh number's scope is from 1 to 22,including 1 and 22 ,(1 <= X <= 22)

public static final int NUM = 7; // The ShuangSeQiu including 7 numbers


private static boolean alreadyExisted(int[] result, int key ,boolean firstTime ,int index) {

boolean flag = false;

if(!firstTime){
for (int i = 0; i < index ; i++) {

if (result[i] == key) {

flag = true;

break;

}
}
}


return flag;

}

public static void main(String[] args) {
// TODO Auto-generated method stub
Random rd = new Random();

int[] result = new int[NUM];

for (int i = 0; i < result.length; i++) {

result[i] = -1;
}
boolean[] flag = new boolean[SCOPE_1_6 + 1];

for (int i = 1; i <= SCOPE_1_6; i++) {

flag[i] = true;

}


int key = 1;

int index = 0;

int count = 0;

boolean firstTime = true;

while (true) {

key = Math.abs(rd.nextInt() % (SCOPE_1_6 + 1));
while (key < 1) {
key = Math.abs(rd.nextInt() % (SCOPE_1_6 + 1));
}

result[index] = key;

if (!alreadyExisted(result, key,firstTime,index)) {

index++;
count++;

}
if(index >= NUM -1 ){
break;
}

firstTime = false;

}



key = Math.abs(rd.nextInt() % (SCOPE_7 + 1));
while (key < 1) {
key = Math.abs(rd.nextInt() % (SCOPE_7 + 1));
}
result[NUM - 1] = key;

int sum = 0;

System.out.print("The " + NUM + " random's number is :");

for (int i = 0; i < result.length; i++) {
sum = sum + result[i];

System.out.print("["+result[i] + "] ");

}

System.out.println( );
System.out.println("sum[" + result.length + "] = " + sum );
}

}




------解决方案--------------------------------------------------------
你参考下,用java提供的随机数生成
Java code
import java.util.List;import java.util.ArrayList;public class RandomNumberFactory {    public static final int NUM = 7;    public List<Integer> getRandowNumbers(){        List<Integer> list=new ArrayList<Integer>();        for(int j=0;list.size()!=6;j++){            int i=1+(int)(Math.random()*33);            if(!list.contains(i)&&list.size()!=6){                list.add(i);            }        }        for(int i=0;list.size()!=7;i++){            int j=1+(int)(Math.random()*22);            if(!list.contains(j)&&list.size()!=7){                list.add(j);            }        }//        i=1+(int)(Math.random()*22);        return list;    }    public static void main(String[] args) {        RandomNumberFactory factory=new RandomNumberFactory();        for(int i:factory.getRandowNumbers()){            System.out.println(i);        }    }}
------解决方案--------------------------------------------------------
借助Collections的shuffle()写了一个,供参考。
Java code
  相关解决方案