Как решить StackOverflowError

У меня есть метод 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

Любые полезные указатели были бы замечательными!

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

dave 16.10.2018 06:56

Что такое rand в вашем вопросе? Пожалуйста, добавьте дополнительную информацию.

Sudhir Ojha 16.10.2018 06:57

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

Sean Lynch 16.10.2018 06:59
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
204
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

тебе нужно делать как это

public int nextInt(int a){

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

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

Я должен подождать 5 минут, прежде чем он мне позволит.

Sean Lynch 16.10.2018 07:06

@SeanLynch рад помочь вам и внести свой вклад в это сообщество счастливого кодирования

ashad 16.10.2018 07:08

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

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

Другие вопросы по теме