2015-04-13 2 views
1

У меня есть метод RandomInt, который возвращает случайное число. Однако, когда я пытаюсь вернуть значение, это дает мне ошибку, заявляя, что переменная не может быть найдена. Я не могу использовать его как параметр, потому что, когда я его вызываю другим способом, он вернет 0. Любая помощь?Мое возвращаемое значение возвращает ошибку

public static int randomInt(int low, int high) { 
    for (int i = 0; i < 10; i++) { 
     double x = Math.random(); 
     int e = (int) x * high/low; 
    } 
    return e; 
} 
+0

Я не понимаю, почему у вас есть цикл внутри метода. – hexafraction

+0

Объем e ограничен циклом 'for', а' return' находится снаружи, как и должно быть. Поэтому объявляйте 'int e;' вне цикла. – DSlomer64

+0

@ DSlomer64 Я не вижу, как это было бы полезно, поскольку OP просто перезаписывал 'e' кучу раз. – hexafraction

ответ

0

Метод может возвращать только одно значение (в вашем случае один int), но это может быть составное значение (массив или объект). В этом случае вам будет лучше, если цикл вызовет ваш метод несколько раз, и сделайте все, что ему нужно, чтобы сделать результат.

Технически, область int e находится внутри тела петли, так как она заявлена ​​внутри. Следующий код будет генерировать 10 случайных чисел и возвращает последний (как последний перезаписывает 9th, которая переписывает 8th, ...):

public static int randomInt(int low, int high){ 
    int e; 
    for(int i=0;i<10;i++){ 
     double x=Math.random(); 
     e=(int)x*high/low; 
    } 
    return e; 
} 
-1

Вы объявляя переменную e внутри цикла , а затем попытаться ссылаться на него извне этого цикла. Ниже должно работать:

public static int randomInt(int low, int high) 
{ 
    int e; 

    for (int i=0;i<10;i++) 
    { 
     double x=Math.random(); 
     e=(int)x*high/low; 
    } 

    return e; 
} 
+0

Это будет работать только в буквальном смысле «не синтаксическая ошибка». Это очень много кода для 'return 0'. – Phylogenesis

1

В Java, область видимости переменной связана {} символов (в JavaScript, это не так). Это означает, что если переменная объявлена ​​в наборе {} (фигурные скобки), на нее нельзя ссылаться вне этих скобок.

Это относится к вашему коду. Переменная e объявлена ​​в цикле, поэтому вы не можете использовать ее в операторе возврата функции. Я бы предложил объявить e прямо перед ловом.

1

В java всякий раз, когда объявляется переменная, она имеет определенную область видимости. Когда вы объявляете переменную внутри цикла, она доступна только внутри этого цикла. Поскольку переменная, которую вы возвращаете, объявляется внутри цикла for, поэтому она дает ошибку. Попробуйте объявить переменную за пределами цикла и затем получить доступ к ней в цикле for. Вы код будет выглядеть так:

public static int randomInt(int low, int high) 
{ 
    int e = 0; 

    for (int i = 0; i < 10; i++) 
    { 
     double x = Math.random(); 
     e = (int) x * high/low; 
    } 
    return e; 
} 
Смежные вопросы