在 if 语句中格式化多个“或”条件的最佳方法

新手上路,请多包涵

我有一个包含许多条件的 if 语句(必须检查 10 或 15 个常量以查看它们是否存在。)

而不是写这样的东西:

 if (x == 12 || x == 16 || x == 19 || ...)

有没有办法像这样格式化

if x is [12, 16, 19]?

只是想知道是否有更简单的编码方法,感谢您的帮助。

答案非常有帮助,但一些人要求我添加更多细节,所以我会这样做来满足他们的好奇心。我正在制作一个日期验证类,需要确保在只有 30 天的月份(我认为有 4 天)中的天数不大于 30,并且我正在编写一个 if 语句来检查这样的事情:

 if (day > 30 && (month == 4 || month == 6 || month == 9 || month == 11))

我只是想知道是否有更快的方法来编写这样的代码——下面的许多答案都有帮助。

原文由 Anthony 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 617
2 个回答

我经常使用这种模式。它非常紧凑:

 // Define a constant in your class. Use a HashSet for performance
private static final Set<Integer> values = new HashSet<Integer>(Arrays.asList(12, 16, 19));

// In your method:
if (values.contains(x)) {
    ...
}

A HashSet 在这里用于提供良好的查找性能 - 即使是非常大的哈希集也能够执行 contains() 非常快。

如果性能不重要,您可以将其要点编码为一行:

 if (Arrays.asList(12, 16, 19).contains(x))

但知道它会在每次执行时创建一个新的 ArrayList

原文由 Bohemian 发布,翻译遵循 CC BY-SA 3.0 许可协议

你想切换到这个??

 switch(x) {
    case 12:
    case 16:
    case 19:
        //Do something
        break;
    default:
        //Do nothing or something else..
        break;
}

原文由 Marsellus Wallace 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题