Как решить StackOverflowError - PullRequest
       26

Как решить StackOverflowError

0 голосов
/ 16 октября 2018

У меня есть метод nextInt, который выдает мне сообщение об ошибке переполнения стека:

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 голосов
/ 16 октября 2018

По моему мнению, рекурсия не происходит (фактически, это похоже на случай перегрузки метода ) в следующем сценарии:

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 метод с одним параметром.

0 голосов
/ 16 октября 2018

сначала вам нужно также определить случайный объект в этой области или, если вы определяете случайный объект в другом месте, затем объявить его глобальным

, вам нужно сделать как htis

public int nextInt(int a){

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

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