Java 我的返回值返回一个错误

Java 我的返回值返回一个错误,java,arrays,histogram,Java,Arrays,Histogram,我有一个名为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

我有一个名为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;
}
公共静态int-randomInt(int-low,int-high){
对于(int i=0;i<10;i++){
double x=Math.random();
int e=(int)x*高/低;
}
返回e;
}

方法只能返回一个值(在本例中为一个
int
),但它可以是复合值(数组或对象)。在这种情况下,最好让循环多次调用您的方法,并对结果执行任何需要执行的操作

从技术上讲,
inte
的作用域位于循环体内部,因为它是在循环体内部声明的。以下代码将生成10个随机数,并返回最后一个(因为最后一个将覆盖第9个,而第8个将被覆盖,…):

公共静态int-randomInt(int-low,int-high){
INTE;

对于(int i=0;i您在循环内部声明变量
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;
}
公共静态int-randomInt(int-low,int-high)
{
INTE;

对于Java中的(int i=0;i,变量的范围由
{
}
字符绑定(在Javascript中并非如此)。这意味着如果变量是在一组
{}
(花括号)中声明的,则不能在这些括号之外引用它


代码就是这样。变量
e
是在循环中声明的,因此不能在函数的返回语句中使用它。我建议在lop之前声明
e

在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;
}
公共静态int-randomInt(int-low,int-high)
{
int e=0;
对于(int i=0;i<10;i++)
{
double x=Math.random();
e=(int)x*高/低;
}
返回e;
}

我不明白为什么在方法内部有循环。e的作用域限于
for
循环,而
返回
应该在循环外部。所以在循环外部声明
int e;
。@DSlomer64我看不出这有什么用处,因为OP只会覆盖
e
很多次。呵呵……很好点,@hexafrance。我只是修复了他的编译错误,而不是逻辑错误。他可能应该丢失for循环,因为他说返回了“一个随机数”。而且,
(int)x
将始终为0。这只在字面意义上“不是语法错误”才有效。这对于
返回0
,代码太多了。
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;
}