【问题标题】:If statement equal twiceif 语句等于两次
【发布时间】:2014-04-01 11:55:40
【问题描述】:

我有一个数组,我想搜索并检查是否有任何值具有多个路由。例如,我希望计算机检查数组并查看 0,1 是否出现在任何地方两次 它没有,但我的似乎不起作用。我希望这适用于左侧的所有值。因此,第一列中的任何值都不应与超过 0 或 1 多次配对。

例如 0,1 和 0,1 不应该存在两次,如果存在则计算机应返回 false,但如果不存在则返回 true

    myArray=new int[][]{
        {0, 1},
        {0, 0},
        {1, 1},
        {1, 0},
        {2, 0},
        {2, 1},
        {3, 0},

    };



    for (int i = 0; i <= myArray.length; i++){

        for(int z = 1; z<= myArray.length; z++){
            if(myArray[i][1]== myArray[z][1] && myArray[i][0] == myArray[z][0]){

                check = false;
            }
            else{
                check = true;
            }
        }
    }
    return check;
    }

【问题讨论】:

    标签: java arrays if-statement return


    【解决方案1】:

    问题在于你的“check”,即使你发现有“pair”,在下一次迭代中,它也会被重写为true。

    如果你想知道你的数组是否包含重复,应该是这样的:

    for (int i = 0; i < myArray.length; i++){
        for(int z = i+1; z< myArray.length; z++){
            if(myArray[i][1]== myArray[z][1] && myArray[i][0] == myArray[z][0]){
                return false;
            }
        }
    }
    return true;
    }
    

    感谢 StephaneM,我们发现您应该将 z = 1 更改为 z = i+1

    我也注意到它会以arrayoutofbounds异常结束,你必须改变

    i &lt;= myArray.lengthi &lt; myArray.length

    【讨论】:

    • z 应初始化为 i+1,而不是 1,否则函数将始终返回 false(当 i=1 和 z=1 时,您将检查 myArray[1][1]== myArray[1][1] &amp;&amp; myArray[1][0] == myArray[1][0]
    【解决方案2】:

    请查看(控制语句分支教程)[http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html]。当你遇到第一个否定条件时,你只需要跳出循环。

    或者,将其包装为一个函数,并在遇到否定条件时在嵌套循环中使用return false

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 2023-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多