【问题标题】:Random.nextInt(5) throws an IllegalArgumentException [closed]Random.nextInt(5) 抛出 IllegalArgumentException [关闭]
【发布时间】:2010-04-25 20:43:44
【问题描述】:

编辑:抱歉!

原来我是个白痴。另一个调用 r.nextInt() 引发了异常,该调用将未初始化的变量作为参数!脚在嘴里。

我真的不知道还能说什么:

Random r = new Random();

class SomeClass {
   public SomeClass(){
       new SomeClass(r.nextInt(5));
   }

   public SomeClass(int i){
   ...

在调用 r.nextInt(5) 的地方抛出 NullPointerException。有什么想法吗?

【问题讨论】:

  • SomeClass 在 SomeOtherClass 中定义,其中声明了 Random r。
  • 您是否尝试过将r.nextInt(5) 设置为一个变量,然后在构造函数中传递该变量?
  • 你并没有真正展示你的代码,是吗?

标签: java android exception


【解决方案1】:

根据documentation,如果参数不是正数,nextInt 只会抛出IllegalArgumentException

我的猜测是你不是用字面常量 5 调用它,而是用一些恰好为零(或负数)的变量。

【讨论】:

  • 我宁愿猜测 r 本身是空的。
【解决方案2】:

原来我是个白痴。在同一行上对 r.nextInt() 的另一个调用引发了异常,该调用将未初始化的变量作为参数!脚非常在嘴里。以后会仔细阅读。

【讨论】:

  • 没问题,我们所有人都遇到过类似的事情。 :-) 请将您的说明标记为“已接受的答案”(通过单击复选标记),这样您的问题就不会再显示为“未回答”。
  • +1 表示忏悔。正如 Heinzi 所说,请接受你自己的回应,作为对可能做出同样大器的未来寻求者的帮助。
  • 它说我不能再接受 23 小时
【解决方案3】:

我尝试使用示例代码重现您的问题。但它有效..

导入 java.util.Random;

公共类测试{

public static void main(String[] args) {
    Test test1 = new Test();
    SomeClass obj = test1.new SomeClass();
}

private Random r = new Random();

class SomeClass {
       public SomeClass(){
           new SomeClass(r.nextInt(5));
       }

       public SomeClass(int i){
           System.out.println(i);
       }

}

}

【讨论】:

    【解决方案4】:

    评论太长,但此代码在没有 NPE 的情况下编译和运行。您需要显示有问题的代码。从您当前的代码中提取一个演示该问题的简短示例。

    import java.util.Random;
    
    public class SomeOtherClass {
        Random r = new Random();
    
        class SomeClass {
            public SomeClass() {
                /***/
                new SomeClass(r.nextInt(5));
                /*/
                this(r.nextInt(5)); // Or this.
                /***/
            }
    
            public SomeClass(int i){
                // ...
            }
        }
    
        public SomeOtherClass() {
            new SomeClass();
        }
    
        public static void main(String[] args) {
            new SomeOtherClass();
        }
    }
    

    【讨论】:

      【解决方案5】:

      我不确定你想用这个做什么,

        public SomeClass(){
             new SomeClass(r.nextInt(5));
         }
      

      但我怀疑正确的语法(如果你想调用另一个构造函数)是

        public SomeClass(){
             this(r.nextInt(5));
         }
      

      您应该发布外部类的代码以了解您的问题。

      【讨论】:

      • 这不是他的问题。 (很有可能这就是他要做的,尽管他所做的也是完全正确的)。
      • 这并不能解释 NPE。 (实际上,-target 1.3 或更少的 NPE 总是如此。)
      • 是的,我知道这并不能解释 NPE,但它肯定是一个错误
      • 然后添加它是一个评论。 (实际上,我所说的关于 1.3 的内容是不正确的。在涉及基类的情况下是正确的。)
      猜你喜欢
      • 2014-09-18
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多