Android 字符串数组随机化ArrayIndexOutOfBoundsException(已编辑) 需要帮助,伙计们。我在代码中添加了random方法,现在我得到了这个错误。 这是我在youtube上看到的全部代码

Android 字符串数组随机化ArrayIndexOutOfBoundsException(已编辑) 需要帮助,伙计们。我在代码中添加了random方法,现在我得到了这个错误。 这是我在youtube上看到的全部代码,android,arrays,string,indexoutofboundsexception,Android,Arrays,String,Indexoutofboundsexception,代码是关于问题的随机化,您将键入正确答案。尝试以下操作: questions[random.nextInt(questions.length-1)]; 其思想是数组位置从0开始。所以你的quesrion数组的值在0到9之间 您传递的总长度为10,超出了最后一个位置,即9。尝试删除answers数组末尾的逗号“,” answers = new String[]{"A1","A2","A3","A4","A5","A6","A7","A8","A9","10",}; 作为 问题是您初始化了cur

代码是关于问题的随机化,您将键入正确答案。

尝试以下操作:

questions[random.nextInt(questions.length-1)];
其思想是数组位置从0开始。所以你的quesrion数组的值在0到9之间

您传递的总长度为10,超出了最后一个位置,即9。

尝试删除answers数组末尾的逗号“,”

answers = new String[]{"A1","A2","A3","A4","A5","A6","A7","A8","A9","10",};
作为


问题是您初始化了
currentQuestion=-1。因此,如果您第一次单击答案按钮,而没有单击前面的问题按钮,它将执行:

public boolean isCorrect(String answer) {
     return (answer.equalsIgnoreCase(answers[-1]));
}

因此出现了
索引自动边界异常

String randString=questions[random.nextInt(questions.length)]

由于
randString
被声明为一个成员变量,因此在创建类的对象时这是赋值,此赋值依赖于
questions
,它在
init()
中初始化,在对象创建后将调用此
init()
。这就是为什么您会得到
ArrayIndexOutOfBoundException
,因为您试图在初始化
问题之前访问它

流量:

  • 对象被创建
  • 成员已初始化

    2.a)
    randString
    是赋值,但这需要
    问题

    2.b)现在,查询问题
  • 2.c)只能找到问题的声明<代码>问题
    不是指任何值

    2.d)现在
    questions[random.nextInt(questions.length)]
    正在尝试访问某个索引的值(random int),但是
    question
    到目前为止没有任何内容

    这是引发异常的点。

    解决方案

    如果
    randString
    是某个初始化参数,则执行以下操作

    init(){
    // some code
    questions = new String[]{"Q1?","Q2","Q3","Q4","Q5","Q6","Q7","Q8","Q9","Q10"};
    String randString = questions[random.nextInt(questions.length)];
    // some code
    } 
    

    MainActivity.java中的第97行是什么?在字符串中,randString=questions[random.nextInt(questions.length)];line random.nextInt(questions.length)生成的数字大于数组的大小-1。修复这个问题,就不会出现错误。发布
    isCorrect
    method code这个字符串randString=questions[random.nextInt(questions.length)]的事实如何;在init()中声明问题之前声明。可以吗?请发布
    isCorrect
    方法。这是引发异常的一个。也不要在评论中发布,编辑并更新你的问题。谢谢
    nextInt(max)
    0
    max-1
    返回一个数字,两者都包括在内
    length-1
    将出错,因为它将返回范围
    0-8
    no@AmulyaKhare。它将返回10作为总长度。所以10-1=9
    questions.length=10
    questions.length-1=9
    nextInt(questions.length-1)=nextInt(9)
    =>输出来自
    0-8
    阅读文档:我会试试这个家伙。我将在进行更改时解决此nullpointerexception新错误。谢谢,但它没有解决问题。很抱歉我刚刚更新了我的代码,现在我得到了nullpointerexception。它解决了arrayindexoutofboundsexception,谢谢。现在randString变成了“未使用”,并且有黄色摇摆的下划线,这个问题不是随机的。谢谢你的回答,先生@GauravGupta@Jan如果答案对你有帮助,请接受。你能帮我如何随机选择吗?@Jan请详细描述问题,或者过来聊天进行详细讨论。问题是我需要随机生成问题,同时它可以检查正确答案。我们在哪里可以聊天?
    answers = new String[]{"A1","A2","A3","A4","A5","A6","A7","A8","A9","10"};
    
    public boolean isCorrect(String answer) {
         return (answer.equalsIgnoreCase(answers[-1]));
    }
    
    init(){
    // some code
    questions = new String[]{"Q1?","Q2","Q3","Q4","Q5","Q6","Q7","Q8","Q9","Q10"};
    String randString = questions[random.nextInt(questions.length)];
    // some code
    }