【问题标题】:Whats wrong with my Random?我的随机有什么问题?
【发布时间】:2010-04-22 21:02:30
【问题描述】:

这是我的导入声明:

import java.util.*;

这里主要是:

    Random Rand = new Random() ; 

这是一个公共的 void 方法:

            int a = 0 ; 
            while (!done) 
        { 
            int a = Rand.nextInt(10) ;
            if (debug) stuff ; 
            if (possibles[a]==1) done = true ; 
        } 

这是我收到的错误消息:

    TicTacToe.java:85: cannot find symbol
    symbol  : method nextInt(int)
    location: class Rand
                a = Rand.nextInt(10) ;
                        ^

这里出了什么问题?看来我已经为我做了一切正确的事情。

【问题讨论】:

  • 兰德变量的颜色应该已经给你提示了..
  • @Kasturi:这可能对有经验的开发人员有用,但对于 Java 新手来说并不是一个好的提示。
  • 当您发布代码时,classes 的颜色为 blue,变量为 black

标签: java random


【解决方案1】:

您似乎在项目的某处定义了一个名为Rand 的类。不要将其用作变量名。我建议使用带有小 r 的 random

另外,这条线是非法的:

int a - 0 ; 

您可能应该删除它,否则您将定义 a 两次。

【讨论】:

  • 我用源代码搜索了文件,字符串“rand”(不区分大小写)只出现在我在问题中引用的代码中。
  • 没关系,在我想之前你是对的。我的电脑上有一个名为 Rand 的不同课程。
  • 我敢打赌int a - 0; 实际上是一个拼写错误/c&p 错误。这将产生另一个编译错误之前 Rand 错误。
  • @David:更新后的代码应该仍然无法编译。它应该给出错误a is already defined。该行应该被删除。
  • @David:将来 复制粘贴 IDE 中的实际代码到问题中。之后不要输入或编辑,只要你对这些东西有点陌生:) 继续阅读 SSCCESmart Questions
【解决方案2】:

您在main 方法中定义了Rand,并尝试在您的public void 方法上使用它。它超出了范围。

尝试在 same 方法中定义Rand(这次使用小写)

类似:

主要:

随机兰德 = new Random();

在你的方法中:

        Random rand = new Random();
        int a = 0 ; 
        while (!done) { 
            int a = rand.nextInt(10) ; //<-- the one declared above
            if (debug){ stuff ; }
            if (possibles[a]==1){ done = true ; } 
        }

顺便说一句,即使在 1 行 if 中,也使用大括号 always

【讨论】:

    【解决方案3】:
    location: class Rand
    

    您显然在同一个包或导入中有一个名为Rand。根据Sun Java Naming Conventions 将变量名从Rand 重命名为rand,它将工作 修复特定问题

    【讨论】:

    • 这是范围问题,不是阴影问题。
    • @erickson:这确实是许多其他需要解决的问题之一 :) 一步一步来。
    【解决方案4】:

    听起来Randmain 方法中的局部变量。

    调用“public void 方法”时,它不在范围内。因此,编译器将标识符 Rand 解释为类名。巧合的是,您的类必须命名为Rand,因此编译器会查找名为nextInt() 的静态方法,但失败了。

    要修复它,您有几个选择。使 Random 实例成为您创建的“公共 void 方法”中的局部变量(通过将其作为参数从 main 方法或其他调用者传递,或通过在方法内实例化)。或者,您可以声明一个私有静态变量Rand。调用该方法时,该变量将在范围内。

    顺便说一句,Java 的约定是变量以小写字母开头。类型(类、接口和枚举)以大写字母开头。打破这个约定会让你的代码对 Java 程序员来说看起来很奇怪。

    【讨论】:

      【解决方案5】:

      编译器告诉你错误在location: class Rand

      为什么它认为Rand 是一个类?您的代码中有class Rand 的定义吗?

      如果您将Random 对象称为r 而不是Rand,会发生什么?

      【讨论】:

        【解决方案6】:

        尝试将变量 Rand 重命名为其他名称..

        【讨论】:

          【解决方案7】:

          错误消息表明 Java 正在寻找一个名为 nextInt 的方法,该方法在名为 Rand 上采用 int

          出于某种原因,Java 认为它必须查看该类而不是您的变量。你的程序中是否有一个名为Rand 的类?

          通过遵循命名约定并以小写字母开头的变量名可以很容易地避免这种混淆:

           Random rand = new Random(); 
           int a = rand.nextInt(10);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-02-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-21
            • 2013-02-16
            相关资源
            最近更新 更多