如何设置用户选择的随机最大值

时间:2016-04-09 16:39:02

标签: java android android-activity random

我正在尝试编写简单的代码,允许用户在一个活动中选择随机推荐的最大数量,并在另一个活动中使用它。 (分钟是1)

我成功地将活动A中的int变量调用到活动B,但是当我尝试在随机推荐中使用它时,应用程序崩溃了。

这里我要求int:

Intent intent = getIntent();
highNum = intent.getIntExtra("highNum", 0);

并随机输入:

Random random = new Random();
mainNum = random.nextInt(highNum) + 1;

我已经检查过int真的等于高于defualt的数字 - 0。

这是我厚的是堆栈流程的重要部分:

Caused by: java.lang.IllegalArgumentException: n <= 0: 0
at java.util.Random.nextInt(Random.java:182)
at com.appstudio.shirdn.sevenboom.MainActivity.randomNumber(MainActivity.java:148)
at com.appstudio.shirdn.sevenboom.MainActivity.onCreate(MainActivity.java:40)

第148行是我设置mainNum的地方,第40行是onCreate  我要求随机类的类。

谢谢!

2 个答案:

答案 0 :(得分:0)

堆栈跟踪告诉您传入Random.nextInt()的数字实际为0.以下是Android平台API级别23的实际代码行:

public int nextInt(int n) {
    if (n <= 0) {
        throw new IllegalArgumentException("n <= 0: " + n);
    }
    ...
}

您可以看到消息正在将n的值插入到异常错误消息中。这对应于你的highNum值。

在将highNum传递给此方法之前检查它的值。

答案 1 :(得分:0)

此异常是因为您试图生成一个随机数,但您没有验证作为参数**传递的绑定

这里:

mainNum = random.nextInt(highNum) + 1;

恰好是变量 highNum 必须为正

解决方案:

在将值传递给nextInt方法之前验证变量highNum:

做一些简单的事情:

if (highNum > 0) {
    mainNum = random.nextInt(highNum) + 1;
}

如果您需要,请查看官方Documentation

  

参数:绑定上限(不包括)。必须是积极的。