【问题标题】:My return value returns an error我的返回值返回错误
【发布时间】:2015-06-19 09:55:06
【问题描述】:

我有一个名为 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;
}

【问题讨论】:

  • 我不明白为什么你的方法中有循环。
  • e 的范围仅限于for 循环,而return 应该在外部。所以在循环外声明int e;
  • @DSlomer64 我看不出这有什么用,因为 OP 只会覆盖 e 很多次。
  • 嘿...好点,@hexafraction。我只是在修复他的编译错误而不是他的逻辑错误。他可能应该只是丢失 for 循环,因为他说“返回了一个随机数”。
  • 另外,(int)x 将始终为 0。

标签: java arrays histogram


【解决方案1】:

在 Java 中,变量的范围由 { } 字符绑定(在 Javascript 中不是这种情况)。这意味着如果一个变量在一组{}(大括号)中声明,则不能在这些括号之外引用它。

您的代码就是这种情况。变量e是在循环中声明的,所以不能在函数的return语句中使用。我建议在垂耳之前声明e

【讨论】:

    【解决方案2】:

    在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;
    }
    

    【讨论】:

      【解决方案3】:

      一个方法只能返回一个值(在你的例子中是一个int),但它可以是一个复合值(数组或对象)。在这种情况下,你最好让一个循环多次调用你的方法,然后对结果做任何需要做的事情。

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

      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;
      }
      

      【讨论】:

        【解决方案4】:

        您在循环内声明变量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;
        }
        

        【讨论】:

        • 这只会在字面上“不是语法错误”的意义上起作用。 return 0 的代码非常多。
        猜你喜欢
        • 2014-01-16
        • 2015-12-28
        • 2011-12-04
        • 2019-02-03
        • 1970-01-01
        • 2019-10-13
        • 2020-10-05
        • 2015-11-19
        • 2020-05-27
        相关资源
        最近更新 更多