You need to enable JavaScript to run this app. Android Studio中Java如何生成可整除的1-100随机整数
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Java如何生成可整除的1-100随机整数

实现方案说明

现存代码的问题梳理

  • 随机数生成环节没有合法性校验,遇到无整除关系的数对(比如17和11)时,后续逻辑会生成空题目,直接设置给TextView会触发空指针崩溃
  • 整除判断逻辑漏了两数相等的合法场景(比如11 ÷ 11 = ?),原有判断只判断了两数不等的情况
  • findResult 里的语法错误很常见:else if 后面误用了左花括号,正确格式是用小括号包裹判断条件
  • 没有无效数对的处理逻辑,一旦随机结果不满足要求就直接返回空值

两种可落地的实现思路

思路1:正向构造法(优先使用)

这个方法从根源上规避不合法数对,不需要循环,也不用额外做整除判断,对新手更友好。
核心流程:

  1. 先生成1-100范围内的随机除数
  2. 计算该除数下的最大可用商:因为被除数必须≤100,所以最大商为 100 / 除数(整数除法自动向下取整)
  3. 在1到最大商的范围内随机生成商值
  4. 按「被除数 = 除数 × 商」计算被除数,天生满足所有要求:
    • 乘积是除数的整数倍,必然能整除
    • 商最小为1,乘积最小等于除数本身,满足被除数≥除数的要求
    • 所有数值都在1-100的取值范围内

替换onCreate里的随机数生成代码示例:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Objects.requireNonNull(getSupportActionBar()).hide();
    setContentView(R.layout.activity_division);

    // 正向构造合法的除法数对
    int divisor = (int) (Math.random() * 100 + 1); // 随机生成除数,范围1-100
    int maxQuotient = 100 / divisor; // 计算最大可支持的商,保证除数*商 ≤100
    int quotient = (int) (Math.random() * maxQuotient + 1); // 随机生成1~maxQuotient范围内的商
    int dividend = divisor * quotient; // 计算被除数,天生满足整除、大小关系要求

    // 赋值给原有全局变量即可,和之前的代码结构完全兼容
    randomFirstNum = dividend;
    randomSecondNum = divisor;

    // 调用后续的题目生成、结果计算方法
    generateQuestion(randomFirstNum, randomSecondNum);
    int result = findResult(randomFirstNum, randomSecondNum);
}

思路2:循环重试法

如果你更习惯之前「随机两个数、校验合法性」的思路,可以加循环逻辑,直到拿到符合要求的数对为止:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Objects.requireNonNull(getSupportActionBar()).hide();
    setContentView(R.layout.activity_division);

    int dividend, divisor;
    // 循环随机直到拿到合法数对
    do {
        int num1 = (int) (Math.random() * 100 + 1);
        int num2 = (int) (Math.random() * 100 + 1);
        // 把较大的数作为候选被除数,较小的作为候选除数
        dividend = Math.max(num1, num2);
        divisor = Math.min(num1, num2);
        // 只要不能整除就继续循环
    } while (dividend % divisor != 0);

    randomFirstNum = dividend;
    randomSecondNum = divisor;

    generateQuestion(randomFirstNum, randomSecondNum);
    int result = findResult(randomFirstNum, randomSecondNum);
}

修正后的功能方法

因为传入的两个参数已经是完全合法的被除数、除数,原有方法里的复杂分支判断可以全部删掉,也不会出现空值问题:

generateQuestion 修正版本

private void generateQuestion(int dividend, int divisor) {
    String question = dividend + " ÷ " + divisor + " = ?";
    textViewQuestion.setText(question);
}

findResult 修正版本

private int findResult(int dividend, int divisor) {
    // 已经保证是整除关系,直接计算结果即可
    return dividend / divisor;
}

内容的提问来源于stack exchange,提问作者Confused Superman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 19:45:02