我要写一个方法,就是一个七星彩的程序,程序随机的生成一个数组,然后与上一期的匹配,如果匹配失败了,就再生成一个数组,接着再去匹配,直到匹配成功,成功后再随机生成一个数组,这个就是我要买的彩票号码了。
目前用了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+"次");
}
}
目前用了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+"次");
}
}
解决方案 »
- 如何关闭没有名字的线程?
- swing下拉框显示表格内容
- 关于utf-8和GBK的乱码问题 求解决
- 关于反射机制中 Class.getConstructor()的疑问
- 为什么Java读取网页速度这么慢
- 请问在swt的text中怎样保证使其输入的内容只能是数字?
- 初学者碰上碰上怪现象,网高人指点!
- 关于CLASSPATH的问题!(不知道大家有没有研究过)
- Runtime.getRuntime().totalMemory();是得到整个虚拟机内存吗?
- 请问如何改变JFrame的颜色?用setBackground(color),好象不行。谢谢!
- 多线程中只想初始化某个类一次而且效率不受影响,怎么实现
- 求助,java环境变量中的path和classpath什么关系,各自都引到的是谁的路径
在你这个程序中这个样子用递归~~堆容量再调大估计都吃力!!!
if(count%3000==0){
System.gc();
}我这边加了一个
if(count%3000==0){
System.gc();
}
不过还是不管用
根本的解决方法是将你的valid函数的递归调用改掉,改为循环。
所有的递归都可以改为循环。
递归将对你的内存产生很大的压力,因为要到所有的都处理完才会弹出堆栈的数据。
System.gc();
}
虽然你这么写了
可是jvm确不是立即的清空无用的对象
这么写只是通知jvm可以回收了。java并不能及时的清除无用的对象,这是由jvm决定的。
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+"次");
}
}
没有办法 还是用循环替代递归