【问题标题】:If Statement: Compare multiple intsIf 语句:比较多个整数
【发布时间】:2016-05-09 07:09:24
【问题描述】:

我正在开发一个应用程序,该应用程序在 1 年后变得相当大。所以我正在努力提高它在各个方面的表现。 我不是专业人士,过去一年我一直在自学编程,当我回顾我过去写的一些行时,它们看起来很傻,如下所示:

    if (screenPos == 0 || screenPos == 20 || screenPos == 22){

//do something
} else {

}

有没有一种最简单/更短的方法可以将一个值与多个整数进行比较?

类似:

    if (screenPos != 0, 20, 22){
    //do something
} 

或者可能将这个数字添加到数组列表中并检查“如果(screenPos 存在于数组中)”?

我知道这是一个新手问题,对此感到抱歉。我一直在寻找答案,但没有找到。

提前致谢

【问题讨论】:

    标签: java android if-statement int


    【解决方案1】:

    你可以这样做:

    switch(screenPos) {
        case 0:
        case 20:
        case 22:
            //do something in case screenPos was equal to 0 or 20 or 22
            break;
        default:
            // do something otherwise
    }
    

    【讨论】:

    • 感谢您的回复。您的建议确实有效,但我找到了一个更简单的建议,我已经在使用它并且更适合我的情况。
    【解决方案2】:

    你可以使用:

    ArrayList<Integer> test = Arrays.asList(0,20,22);
    //...
    if(test.contains(screenpos)){
        //...
    }
    

    编辑(感谢 @Gabe Sechan):正如 cmets 中所指出的,在 if 语句之外初始化 List 会更有效。

    当然,最好使用开关,真的,但如果你想要一些简短的东西,这会很好,尽管有点不合常规

    【讨论】:

    • 我用的是你的工具,因为它是最短的,我可以用很多次来检查特定的屏幕编号。谢谢!
    • 这实际上是低效的代码——它每次运行时都会创建一个新的 List 对象。你最好只初始化一次列表并保存它,创建对象很昂贵,应该避免多次这样做。此外,一个集合会比一个列表更好 - 一个列表不能假设它是排序的,所以会做一个完整的搜索而不是一个二分搜索(O(n)vs O(log(n)),并且可能有相同的元素多次(一组不能)。
    • 也可以接受的只是数组上的标准循环。但是创建一个列表只是为了使用 contains 是一种可怕的习惯。
    【解决方案3】:

    好吧,您正在检查没有明显模式的具体整数,因此没有自然的模数技巧,乘法和除法将起作用。上述所有其他建议都是可行的(我最喜欢 Mulligans),但我认为您应该做的最重要的事情是将条件重构为另一种方法并在此处进行检查。

    如果您采用经典的面向对象编程观点,这显然是最佳实践。

    【讨论】:

      猜你喜欢
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 2016-07-27
      • 1970-01-01
      相关资源
      最近更新 更多