首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.lang.ArrayIndexOutOfBoundsException: length=5;index=5

java.lang.ArrayIndexOutOfBoundsException: length=5;index=5
EN

Stack Overflow用户
提问于 2019-08-24 15:56:12
回答 4查看 432关注 0票数 1

致因: com.example.android.architecture.MainActivity.updateDisplay(MainActivity.kt:59) at com.example.android.architecture.MainActivity.onCreate(MainActivity.kt:44):java.lang.ArrayIndexOutOfBoundsException: length=5;index=5

更改索引和类视图

代码语言:javascript
复制
class MainActivity : AppCompatActivity() {

    private lateinit var dice: IntArray
    private lateinit var headlineText: String

    private val imageViews by lazy {
        arrayOf<ImageView>(findViewById(R.id.die1),
        findViewById(R.id.die1),
        findViewById(R.id.die2),
        findViewById(R.id.die3),
        findViewById(R.id.die4),
            findViewById(R.id.die5)
        )
    }
        private val headline by lazy { findViewById<TextView>(R.id.headline) }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setSupportActionBar(toolbar)

        headlineText = savedInstanceState?.getString(HEADLINE_TEXT)
            ?: getString(R.string.welcome)
        dice = savedInstanceState?.getIntArray(DICE_COLLECTION)
            ?: intArrayOf(6,6,6,6,6)

        lifecycle.addObserver(MyLifeCycleObserver())

        fab.setOnClickListener{
            fabClickHandler()}

        updateDisplay()

    }


    private fun fabClickHandler(){
        dice = DiceHelper.rollDice()
        headlineText = DiceHelper.evaluateDice(this,dice)
        updateDisplay()

    }

    private fun updateDisplay() {
        for (i in 0 until imageViews.size) {

            val drawableId = when (dice[i]) {
                1 -> R.drawable.die_1
                2 -> R.drawable.die_2
                3 -> R.drawable.die_3
                4 -> R.drawable.die_4
                5 -> R.drawable.die_5
                6 -> R.drawable.die_6
                else -> R.drawable.die_6
            }
            imageViews[i].setImageResource(drawableId)
        }
        headline.text = headlineText
    }

    override fun onSaveInstanceState(outState: Bundle?) {
        outState?.putString(HEADLINE_TEXT,headlineText)
        outState?.putIntArray(DICE_COLLECTION,dice)
        super.onSaveInstanceState(outState)
    }
}

不知道为什么我的android应用程序没有运行

EN

回答 4

Stack Overflow用户

发布于 2019-08-24 16:57:23

骰子大小为5,当ImageViews有6个元素时,循环运行6次,第六次出现异常。

票数 1
EN

Stack Overflow用户

发布于 2019-08-24 17:40:47

您正在用5个元素初始化骰子数组,以防止出现空保存实例。

代码语言:javascript
复制
"dice = savedInstanceState?.getIntArray(DICE_COLLECTION)
    ?: intArrayOf(6,6,6,6,6)"'

===========================================================和您的Imageviews有6个元素

代码语言:javascript
复制
private val imageViews by lazy {
        arrayOf<ImageView>(findViewById(R.id.die1),
        findViewById(R.id.die1),
        findViewById(R.id.die2),
        findViewById(R.id.die3),
        findViewById(R.id.die4),
            findViewById(R.id.die5)
        )
    }

因此,当您在循环运行中访问骰子元素时,=====================================================

代码语言:javascript
复制
for (i in 0 until imageViews.size) {
            val drawableId = when (dice[i]) {

它给了例外

票数 1
EN

Stack Overflow用户

发布于 2019-08-24 16:54:24

错误在这里:

代码语言:javascript
复制
for (i in 0 until imageViews.size) {
            val drawableId = when (dice[i]) {

imageViews由6个元素组成。

dice由5个元素组成。

代码语言:javascript
复制
dice = savedInstanceState?.getIntArray(DICE_COLLECTION)
            ?: intArrayOf(6,6,6,6,6)

private val imageViews by lazy {
        arrayOf<ImageView>(
          findViewById(R.id.die1),  
          findViewById(R.id.die1),  //maybe it is duplicated
          findViewById(R.id.die2),
          findViewById(R.id.die3),
          findViewById(R.id.die4),
          findViewById(R.id.die5)
        )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57639466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档