如何解决StackOverflowError

时间:2018-10-16 04:54:05

标签: java recursion stack-overflow

我有这个nextInt方法给我一个stackoverflow错误:

public int nextInt(int a){
        int n = rand.nextInt(a);
        return n;
    }

并由以下代码行调用:

int index = rnd.nextInt(Words.size());

我知道为什么会给出错误,但我不知道如何解决。在其他程序中,我有类似的方法不会出现错误:

public int nextInt(int l, int h){
    int n = rand.nextInt(h - l + 1) + l;
    return n;
}

以下代码行将调用哪个代码:

System.out.println(rand.nextInt(10,20)); //prints random num between 10 and 20 inclusive

任何有用的指针都会很棒!

2 个答案:

答案 0 :(得分:1)

首先,您还需要在该范围内定义随机对象,或者如果要定义随机对象,则将其声明为全局

您需要像htis

public int nextInt(int a){

 // create random object
  Random rand = new Random();

 // check next int value
  int n = rand.nextInt(a);
  return n;
}

答案 1 :(得分:0)

根据我的说法,在以下情况下递归没有发生(实际上,方法超载的情况):

public int nextInt(int l, int h){
    int n = rand.nextInt(h - l + 1) + l;
    return n;
}

因为nextInt方法具有两个参数,而在int n = rand.nextInt(h - l + 1) + l;处您仅使用一个参数来调用nextInt

在第一种情况下,nextInt方法只有一个参数,并且在此方法中,您正在使用单个参数递归调用相同的nextInt方法。