【问题标题】:Simplify the if statement简化 if 语句
【发布时间】:2015-09-12 12:17:54
【问题描述】:

我有这样的 if 语句

int val = 1;
if (val == 0 || val == 1 || val == 2 || ...);

有没有更简化的方法?例如:

int val = 1;
if (val == (0 || 1 || 2 || ...));

我决定通过创建这样的函数来解决这个问题:

public boolean ifor(int val, int o1, int o2, int o3) {
    return (val == o1 || val == o2 || val == o3);
}

但这还不够,因为如果我想在ifor中添加另一个参数,例如o4,我做不到(我应该用新参数创建另一个函数),或者如果我想减少o1o2 中的参数。老实说,我不知道我是否解释过,如果你问,我会尽力解释。

【问题讨论】:

  • 你是说需要动态改变条件的数量?
  • @JesseShelabarger 是的
  • @rakeb.void 问题是不一定是值的范围,我可能有if (val == 1 || val == 5);
  • 那么答案就是你需要的。他打败了我:(

标签: java if-statement


【解决方案1】:

您可以拥有一个具有有效值的枚举或 Arraylist,然后使用适当的函数来检查该值。

一个使用数组列表的例子

列表列表 = Arrays.asList(1,2,3,4); ... if (list.contains(3)) { / ... }

【讨论】:

    【解决方案2】:
    Arrays.asList(options).contains(value) // check if int value in int[] array called options
    

    【讨论】:

    • 例如:int[] options = {6, 0, 2, 3}; int value = 5;
    • List.contains() 将是 O(n)。 Set<Integer> 会更好。
    • O(n) 时间(也称为线性时间)就像在电话簿中找到一个名字,从头开始并逐个阅读。您必须依次查看每个名称。如果您的电话簿很长,则需要很长时间。某些集合(例如 HashSet)为 contains() 方法提供 O(1) 时间(也称为常量时间)。这就像直接访问您电话簿中的姓名,而无需搜索所有其他姓名——例如,它在您的收藏夹页面上。顺便说一句,你有将近 10K 的 stackoverflow 点。在这里,您只是一名高中生。
    • @AndyThomas 我不明白。
    • 简写形式:当您将一个键放入哈希表时,它的位置是根据该键计算的。当您查找哈希表中的键时,它的位置是使用相同的函数从键中计算出来的。您不必查看所有其他位置。哈希表是一种数据结构。在有关数据结构和算法的课程中,您有这些以及更多值得期待的内容。
    【解决方案3】:

    您可以改用varargs 来概括该函数:

    public boolean ifor(int val, int... comparisons){
        for(int o : comparisons){
            if(val == o) return true;
        }
        return false;
    }
    

    然后,您可以像调用任何其他函数一样调用它,但可以进行多次比较。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 2014-06-18
    相关资源
    最近更新 更多