You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android App新增算式生成逻辑后点击选项按钮偶发崩溃

崩溃根因

偶发崩溃是数组索引越界(ArrayIndexOutOfBoundsException)导致的,触发点在setRandomButtonAnswer()方法,理论崩溃概率25%,小样本测试时很容易感知成半数崩溃,和你描述的现象完全匹配。

错误细节

你存选项按钮的answerButtons数组长度是4,Java数组从0开始计数,合法下标只能是0、1、2、3,但你生成正确答案随机位置的代码写错了区间:

public void setRandomButtonAnswer(){
    int min = 1;
    int max = 5;//not inclusive (1-4)
    randButton = (int) (Math.random() * (max - min) + min);
    answerButtons[randButton].setText(Integer.toString(sum));
}

你对随机数公式的区间判断有误:

  • Math.random() 返回值范围是 [0.0, 1.0),取得到0取不到1
  • 代入你写的参数计算,最终值的范围是[1.0, 5.0),强转int截断后得到的整数是1、2、3、4
  • 只要随机出4,访问answerButtons[4]就会直接越界崩溃,四个可能结果里有一个非法值,刚好是四分之一概率崩溃。
  • 顺带一提,这段逻辑还会导致第一个按钮(索引0)永远是干扰项,永远不会放正确答案,破坏答题随机性。

修复方案

1. 先解决崩溃问题

把setRandomButtonAnswer()里的随机范围改成0-3的合法区间就行,建议直接复用你已经写好的randomNumber()工具方法,避免手写公式再出错:

public void setRandomButtonAnswer(){
    // 左闭右开,传0和4刚好生成0/1/2/3四个合法下标
    randButton = randomNumber(0,4);
    answerButtons[randButton].setText(Integer.toString(sum));
}

2. 顺手修复几个不崩溃但影响功能的逻辑bug

这些问题不会导致闪退,但会让App功能不符合预期:

  • 倒计时文本拼接错误:timerTextView.setText(Long.toString(timeLeft/1000) + 's') 里的's'是char类型,Java里字符串和char做加法会把char转成ASCII码拼接,最后会显示成29115这种奇怪内容,把单引号改成双引号写成"s"就正常了。
  • 随机数方法区间问题:你写的randomNumber()是左闭右开逻辑,如果想生成包含上限的数(比如3到15包含15),调用时max要传目标值+1,比如生成加法的两个加数应该写randomNumber(3, 16),否则永远随机不到15。
  • 干扰选项逻辑不合理:现在generateButtonNumber()生成的干扰项固定在3-14区间,但两个加数相加的和范围是6-30,不仅会出现sum大于14时干扰项和正确答案差距过大的问题,sum在6-14区间时还可能随机出和sum一样的干扰项,导致多个按钮都是正确答案。建议改成围绕sum上下浮动生成干扰项,加个去重判断,避免四个按钮出现重复数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:09:20