日期:2014-05-20 浏览次数:20789 次
import java.math.*; import java.util.Scanner; public class LotteryGenerator { static int randomInt(int x){ int ret; do{ double getran = (10000*Math.random()); ret = (int)getran; }while(ret>x || ret==0); return ret; } [] x,int[] y,int z){ int length; System.out.println("模拟开奖结果 " + z); System.out.print("红球是:"); for(length=0;length<x.length;length++){ System.out.print(x[length] + " "); } System.out.println(); System.out.print("蓝球是:"); System.out.println(y[0]); System.out.println("====================="); } static boolean check(int[] x){ boolean isIlleg = false; int i=0,j=0; for(i=0;i<x.length;i++){ for(j=0;j<x.length;j++){ if(x[i] == x[j]){ isIlleg = true; } } } return isIlleg; } static int input(){ Scanner s = new Scanner(System.in); int i=0; System.out.print("请输入开奖注数:"); i = s.nextInt(); System.out.println("====================="); return i; } public static void main(String[] args) { int[] general = new int[6]; int[] special = new int[1]; int i = input(); for(int c=0;c<i;c++){ do{ run(general,special); }while(check(general)); java.util.Arrays.sort(general); print(general,special,(c+1)); } } }
static boolean check(int[] x){ boolean isIlleg = false; int i=0,j=0; for(i=0;i<x.length;i++){ for(j=0;j<x.length;j++){ if(x[i] == x[j]){ isIlleg = true; } } } return isIlleg; }
------解决方案--------------------
check方法里面有个明显的bug。
双层循环,遍历同一个数组,下角标(i和j)会存在相同的时候,这个时候,进入if语句,返回true。
也就是说,楼主的check方法,怎么调用,都会返回true,造成主调函数中while循环变成了死循环,程序无法正常退出。
正确的逻辑,应该是在check方法体里面,双层循环中的if条件中,排除i和j相等的情况。
比如:if(x[i] == x[j] && i!=j){...}
------解决方案--------------------
check 方法的问题,楼主再研究一下冒泡排序吧。冒泡排序可不是这么写的。
------解决方案--------------------
4楼已经给出正解,还有两个问题
1.楼主用的太多的循环,有的不必要如:
static int randomInt(int x){
int ret;
do{
double getran = (10000*Math.random());
ret = (int)getran;
}while(ret>x || ret==0);
return ret;
}
可改成:
static int randomInt(int x){
double getran = (10000*Math.random());
return (int)getran%(x-1)+1;
}
2. 蓝色球是可以跟红球相同么?好像不行吧,楼主也没有进行判断。
------解决方案--------------------
给分吧
//import java.math.*;
import java.util.Scanner;
public class LotteryGenerator {
static int randomInt(int x) {
int ret;
do {
double getran = (10000 * Math.random());
ret = (int) getran;
} while (ret > x || ret == 0);
return ret;
}
static void run(int[] x, int[] y) {
int i;
for (i = 0; i < x.length; i++) {
x[i] = randomInt(33);
}