【问题标题】:How to set random max that the user choose如何设置用户选择的随机最大值
【发布时间】:2016-07-30 21:44:11
【问题描述】:

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

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

我在这里调用 int:

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

并随机放入:

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

我已经检查了 int 确实等于一个高于默认值 - 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 我要求随机类的类。

谢谢!

【问题讨论】:

  • 崩溃的堆栈跟踪是什么?知道这一点总是很重要。
  • Activity-A 中多余的"highNum" 放在哪里?

标签: java android android-activity random


【解决方案1】:

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

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

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

在将其传递到此方法之前检查您的 highNum 值。

【讨论】:

    【解决方案2】:

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

    这里:

    mainNum = random.nextInt(highNum) + 1;
    

    恰好是变量highNum一定是正数

    解决方案:

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

    做一些简单的事情:

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

    有需要可以看官方Documentation

    参数:上界(不包括)。必须是正面的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      • 2022-01-21
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-10
      相关资源
      最近更新 更多