Random.nextInt(5)抛出IllegalArgumentException

时间:2010-04-25 20:43:45

标签: java android exception

编辑:抱歉!

原来我是个白痴。从另一个调用r.nextInt()抛出异常,该调用将未初始化的变量作为参数!脚很大。

我真的不确定还有什么要说的:

Random r = new Random();

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

   public SomeClass(int i){
   ...

抛出NullPointerException,其中调用r.nextInt(5)。有什么想法吗?

5 个答案:

答案 0 :(得分:5)

根据documentation,如果参数不是正数,则nextInt仅抛出IllegalArgumentException

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

答案 1 :(得分:1)

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

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

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

import 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 :(得分:1)

评论太长,但此代码编译并在没有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();
    }
}