本次雙色球的難點在於,紅球的選擇,它是不能重複的,所以要經過遍歷,將重複元素給剔除,不多說直接看代碼吧(註釋很詳細了):
方法一:主要是用了集合的list.contain()的方法,判斷是否有重複元素。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
/**
*
* 雙色球選7球
* 紅球在【1-36】之間,選出6個,且不能重複
* 籃球在【1-16】之間,選出一個
*
* @author Administrator
*
*/
public class DoubleColorBall {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
Random random = new Random();
getReadBall(list, random);
getBlueBall(list, random);
System.out.println(Arrays.toString(list.toArray()));
}
/**
* 獲得紅色球
* @param list
* @param random
*/
public static void getReadBall(List<Integer> list,Random random){
for (int i = 0; i < 6; i++) {
int num = random.nextInt(36) + 1;
do{
num = random.nextInt(36) + 1;
}while(list.contains(num)); //如果集合中包含該值則重新複製
list.add(num);
}
}
/**
* 獲得藍色球
* @param list
* @param random
*/
public static void getBlueBall(List<Integer> list,Random random){
int num = random.nextInt(16)+1;
list.add(num);
}
}
方法二:有個小技巧,就是i--;將for循環倒退一格,重新獲取隨機數(這個技能必須得get)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
public class DoubleColorBall2 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
Random random = new Random();
int num = 0;
boolean flag = true;// 判斷是否重複的標誌
int[] nums = {12,15,12,36,16,96,12};
int temp = 0;
// 紅球邏輯實現
for (int i = 0; i < 6; i++) {
flag = true;
num = random.nextInt(36) + 1;
System.out.println("num = " + num + " ");
// 遍歷,剔除重複元素
for (int j = 0; j < list.size(); j++) {
if (num == list.get(j)) {
i--; // 當有重複時--,使for循環倒退一格,重新獲取隨機數
flag = false;
break;
}
}
if (flag) { // 不重複則添加
list.add(num);
}
}
// 籃球實現
num = random.nextInt(16) + 1;
list.add(num);
System.out.println(Arrays.toString(list.toArray()));
}
}
結語:你只是看起來很努力!