我要写一个方法,就是一个七星彩的程序,程序随机的生成一个数组,然后与上一期的匹配,如果匹配失败了,就再生成一个数组,接着再去匹配,直到匹配成功,成功后再随机生成一个数组,这个就是我要买的彩票号码了。
目前用了4位数,才有可能成功。大于4的成功的机遇就渺茫了import java.util.Random;public class Qiqingcai { public static long count= 0;
public static boolean valid(int[] next)throws Exception{
boolean flag = false;
int[] per = {1,2,3,4};
if(next[0]==per[0]&&next[1]==per[1]&&next[2]==per[2]&&next[3]==per[3]){
flag = true;
System.out.print("上期中奖号码为");
for (int i : per) {
System.out.print(i+" ");
}
System.out.println();
int[] real = getNext();
System.out.print("本期中奖号码为");
Thread.sleep(2000);
for (int j : real) {
System.out.print(j+" ");
Thread.sleep(500);
}
}else{
count++;
if(count%100==0){
System.out.println("程序已经运行了"+count+"次");
}
if(count%3000==0){
System.gc();
}
  
valid(getNext());
}
return flag;
} public static int[] getNext(){
Random random = new Random();
int[] next = {0,0,0,0};
for(int i=0;i<4;i++){
next[i] = random.nextInt(10);
}
return next;
} public static void main(String[] args)throws Exception{
valid(getNext());
System.out.println();
System.out.println("程序总共运行了"+count+"次");
}
}

解决方案 »

  1.   

    你可以把JVM的堆容量调大一点~~~但是这不是解决问题的根本之道~~
    在你这个程序中这个样子用递归~~堆容量再调大估计都吃力!!!
      

  2.   

    有没有清空堆容量的方法,vc就有,java没有吗?
      

  3.   

    java用GC清,但是GC的执行是不确定时间的。
      

  4.   


    if(count%3000==0){
    System.gc();
    }我这边加了一个
    if(count%3000==0){
    System.gc();
    }
     不过还是不管用
      

  5.   

    GC是不定时的,就是你调用但是不会立即执行,要根据JVM的算法决定执行的时间。
    根本的解决方法是将你的valid函数的递归调用改掉,改为循环。
    所有的递归都可以改为循环。
    递归将对你的内存产生很大的压力,因为要到所有的都处理完才会弹出堆栈的数据。
      

  6.   

    if(count%3000==0){
    System.gc();
    }
    虽然你这么写了
    可是jvm确不是立即的清空无用的对象
    这么写只是通知jvm可以回收了。java并不能及时的清除无用的对象,这是由jvm决定的。
      

  7.   

    public class Qiqingcai2 {


    public static long count= 0;
    public static int[] random = new int[7];
    public static int[] per = {1,2,3,4,5,6,7}; public static int[] getNext(){
    Random random = new Random();
    int[] next = new int[7];
    for(int i=0;i<7;i++){
    next[i] = random.nextInt(10);
    }
    return next;
    }


    public static void main(String[] args)throws Exception{
    System.out.print("上期中奖号码为");
    for (int i : per) {
    System.out.print(i+" ");
    }
    System.out.println();
    for(int i=0;i<1000000000;i++){
    count ++;
    if(count%10000==0){
    System.out.println("程序已经运行了"+count+"次");
    }
    random = getNext();
    if(random[0]==per[0]&&random[1]==per[1]&&random[2]==per[2]&&random[3]==per[3]&&random[4]==per[4]&&random[5]==per[5]&&random[6]==per[6]){
    random = getNext();
    System.out.print("本期中奖号码为");
    Thread.sleep(2000);
    for (int j : random) {
    System.out.print(j+" ");
    Thread.sleep(500);
    }
    break;
    }
    }
    System.out.println();
    System.out.println("程序总共运行了"+count+"次");
    }
    }
    没有办法 还是用循环替代递归