强烈要求高手帮帮我这个菜鸟
下面是一段我写的程序(烂,请随便笑话) 运行的时候提示
Exception in thread "main" java.lang.StackOverflowError
好像是什么栈溢出,请高手帮忙看看问题出在哪里好么?我哪里写错了呢?我自己试着调试了一下
computeRandomString(3,20,"red")的返回值是正确的啊?为什么就不能直接输出那??
谢谢了!
/*
* Compute.java
*
* Created on 2004年9月2日, 下午12:29
*/
/**
*
* @author Administrator
*/
import java.util.*;
public class Compute {
/** Creates a new instance of Compute */
public Compute() {
}
int insRed, insBlue;
//int[][] tableDisplay;
int[] tempRed = new int[7];
/**
* @param args the command line arguments
*/
public String computeRandomString( int x, int y, String flag ){
String randomString = "";
int randomRed,randomBule;
if(flag == "red"){
for(int i=1;i<8;i++){
randomString += buildRandomInt( x, y, i -1 ) + " ";
}
}
else{
};
return randomString;
}
public int buildRandomInt( int x, int y, int z){
int radomTemp = 0;
Random rad = new Random();
radomTemp = rad.nextInt(y-x);
radomTemp += x;
for(int i=0;i<tempRed.length;i++){
if(radomTemp == tempRed[i]){
radomTemp = buildRandomInt( x, y, z );
i = z + 1;
}
};
tempRed[z] = radomTemp;
return radomTemp;
}
public static void main(String[] args) {
// TODO code application logic here
Compute c = new Compute();
System.out.println(c.computeRandomString(3,20,"red"));
}
}
问题点数:100、回复次数:14Top
1 楼ntzls()回复于 2004-09-02 13:07:12 得分 0
radomTemp = buildRandomInt( x, y, z );
仔细检查非递归部分的基本条件Top
2 楼gf_iLoveU(True)回复于 2004-09-02 13:07:24 得分 0
请大家帮帮忙谢谢啦Top
3 楼gf_iLoveU(True)回复于 2004-09-02 13:09:01 得分 0
仔细检查非递归部分的基本条件?
什么意思啊?能详细的说一下么??Top
4 楼kingfish(工作很忙,很少来csdn...)回复于 2004-09-02 13:15:05 得分 0
先把 ==换成 equals
显然死在buildRandomInt中了,仔细看看你修改循环变量i的地方Top
5 楼craks()回复于 2004-09-02 13:18:40 得分 0
if(flag == "red")
改为:if(flag.equals("red"))
Top
6 楼xxben(001)回复于 2004-09-02 13:20:46 得分 0
我运行了一下,没有报栈溢出异常啊
Top
7 楼jokerjava(冷血)回复于 2004-09-02 13:21:40 得分 0
buildRandomInt 无穷递归了Top
8 楼gf_iLoveU(True)回复于 2004-09-02 13:23:03 得分 0
我的想法很简单,随机从3-20中取出7个数字,但是都不重复,所以我想取出一个后判断是否在数组tempRed中,如果在就再重新成城随机数,再判断,不过不在就把这个数放到数组中,供下一个数判断,我就这么瞎写的,问题到底出在哪里呢?修改if(flag == "red")
改为:if(flag.equals("red"))好像没有什么效果。Top
9 楼gf_iLoveU(True)回复于 2004-09-02 13:24:12 得分 0
xxben(chacha)??你运行没有问题??难道我重新启动一下就没有问题了?Top
10 楼007JavaKing(乖乖咙的咚)回复于 2004-09-02 13:24:32 得分 0
无穷第归 栈满了Top
11 楼xxben(001)回复于 2004-09-02 13:25:09 得分 0
这并不是递归啊?!Top
12 楼kingfish(工作很忙,很少来csdn...)回复于 2004-09-02 13:28:57 得分 100
问题在这
Random rad = new Random();
你每次new,Random用当前时间做种子,所以同1ms中产生的随机数相同
而1ms足够你的stack overflow了。
Top
13 楼kingfish(工作很忙,很少来csdn...)回复于 2004-09-02 13:30:13 得分 0
有时恰好两次new时不在同一ms,所以正常,就像xxben这样没赶上...Top
14 楼gf_iLoveU(True)回复于 2004-09-02 13:32:55 得分 0
谢谢楼上,问题解决了,我把Random的实例声明成类里就好了,十分感谢。Top




