【问题标题】:Loop through two arrays while checking if both are are empty or not onClick of a button循环遍历两个数组,同时检查两个数组是否为空 onClick of a button
【发布时间】:2020-04-04 09:28:30
【问题描述】:

我被一些对许多人来说可能微不足道的事情所困扰,但这对我来说已经成为一个问题。 基本上我试图通过两个字符串数组循环,其中一个具有静态大小,另一个具有可变大小,也可能为 0。

所以我的目标是在遍历第一个数组的同时遍历这两个数组,并使用第一个数组的值获取第二个数组的值,然后完全循环第二个数组。 但是,如果第二个数组为空,我想增加第一个数组的索引并查询第二个数组并继续直到第一个数组并且它的内部数组完全迭代。

听起来很简单,但我很难写出有效的东西。

我的代码:

var array1 : ArrayList<String> = ArrayList() // static value say 10
        var array2 : ArrayList<String> = ArrayList() // may vary
        var array1index = 0
        var array2index = 0
        array1 = getArray1Value()
        button.setOnClickListener {
            if(array1index<array1.size){
                array2 = getByArray1Value(array1[array1index])
                if(array2.isEmpty()){
                  //increase array1 index
                    if(array1index<array1.size){
                    array1index+=1
                        array2 = getByArray1Value(array1[array1index])
                          //  ....... ?
                    }else{
                        over()
                    }
                }else{

                    if(array2index<array2.size){
                        array2index+=1
                    }else{
                        over()

                    }
                }

            }else{

                over()
            }

我认为它变得比预期的要复杂......请帮助。

【问题讨论】:

  • 这里肯定array1index&lt;=array1.size 是一个问题。如果 array1index == array1size 并且您创建 array1index+=1 然后 array2 = getByArray1Value(array1[array1index]) 将给您 IndexOutOfBound exception 其中大小为 10,索引为 10
  • 好的..我知道我还需要改变什么?你能帮我一个完整的答案吗

标签: android performance loops for-loop arraylist


【解决方案1】:

如果任何新手对这样的事情感到困惑,这里就是答案:

val array1 : ArrayList<String> = ArrayList() // static value say 10 items
    var array2 : ArrayList<String> = ArrayList() // may vary
    var array1index = 0
    var array2index = 0
    array1 = getArray1Value()
    array2 = getByArray1Value(array1[array1index])
    button.setOnClickListener {
        if(array1index<array1.size){
            mLog.i(TAG,"number of questions : ${array2.size}")
            if(array2index<array2.size){
                mLog.i(TAG,"1 activity index $array1index question index $array2index ")
                array2index+=1
            }else{
                MaterialAlertDialogBuilder(context).setTitle("Questions over")
                    .setMessage("ok thicha")
                    .setPositiveButton("ok"){
                            dialogInterface, i ->
                        dialogInterface.dismiss()
                        array2index =0
                        array1index+=1
                        if(array1index<array1.size){
                            array2 = getByArray1Value(array1[array1index])
                        }
                        button.callOnClick()
                    }.create().show()
            }

        }else{

            over()
        }

    }

【讨论】:

    【解决方案2】:

    检查一下

    private void doStuff() {
            if(array1index<array1.size){
                array2 = getByArray1Value(array1[array1index])
                if(array2.isEmpty()){
    
                        array1index+=1
                        doStuff();
    
                }else{
    
                    if(array2index<array2.size){
                        array2index+=1
                    }else{
                        over()
    
                    }
                }
    
            }else{
    
                over()
            }
        }
    

    希望这是您想要实现的目标

    【讨论】:

    • 感谢 SkypeDogg 我找到了答案 这对我来说是新的,我把它弄得太大了,哈哈
    • 我自己也做了同样的事情,但你可以看到每次点击都会调用array2 = getByArray1Value(array1[array1index])
    • 我无法想象这段代码的目的是什么,所以我很难发明任何东西。
    • 我只需要做我在问题中解释的事情,但我认为显示对话剪辑会将复杂性降低到零。是的,我从来没有提到使用对话和所有的可能性,所以我很抱歉
    • 我在想问题和答案的事情。我还没明白目的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 2020-01-14
    相关资源
    最近更新 更多