有没有方便的方法来检查是否至少有一定数量的条件是真的?

时间:2014-07-24 14:13:03

标签: java boolean boolean-logic boolean-operations

是否有一种简单的方法可以检查是否满足最低数量的条件?就像,让我们说我已经要求某人选择一周至少4天。有什么方法我可以检查他们已经选择了至少4天?为可能的条件写出所有的事情和事情真的很痛苦。也许这可以在java中用switch语句完成,但总的来说有一种直截了当的方式吗?

我认为最简单的方法是将所有布尔语句的值加起来,然后看看它们是否总和至少4.一些伪代码来证明我的意思:

if ((input.contains("mon") + input.contains("tues") + ... + input.contains("sun")) >=4){
    //do stuff
}

但我不确定这是否真的是一种有效的方法呢?帮助

4 个答案:

答案 0 :(得分:3)

只需定义一种简单的方法来计算所选的总天数:

private boolean moreThanFourSelected(input) {
    String days[] = { "mon", "tues", ..., "sun" };
    int total = 0;
    for (String day : days) {
        if (input.contains(day)) total++;
    }
    return total >= 4;
}

答案 1 :(得分:1)

所以基本上,我假设input的类型为String,而且由于你没有指定语言,我只会在这个例子中使用C#,因为它非常酷,东西。

所以如果这个字符串看起来像这样:

  

星期一星期二星期三橘子

这就是它实际包含的内容,代码如下:

if(MinimumNumberOfDaysSelected(input))
{
   // Condition is met (atleast 4 selected).
}
else
{
   // Condition not met (less than 4 selected).
}

public bool MinimumNumberOfDaysSelected(string input)
{
   string[] days = input.Split(' ');
   int count;

   foreach(string day in days)
   {
      switch(day)
      {
         case "Monday":
            count++;
         break;
         case "Tuesday":
            count++;
         break;
         case "Wednesday":
            count++;
         break;
         case "Thursday":
            count++;
         break;
         case "Friday":
            count++;
         break;
         case "Saturday":
            count++;
         break;
         case "Sunday":
            count++;
         break;
         default:
         break;
      }
   }

   return count >= 4 ? true : false;
}

将返回是否至少选择了4天 - 或不是。它还假设您使用space来分隔单词。我想如果我们知道你使用的语言和输入的格式会更容易。

答案 2 :(得分:0)

一般情况下(不仅仅是几天),使用HashMap将条件存储为键,选择作为值存储,如下所示

        HashMap<String, Boolean> selectionMap=new HashMap<String, Boolean>();

以这种方式,可以基于散列图中的条目容易地计算所选择的和未选择的计数。每当有选择或不选择时,在此hashmap中创建一个条目并最终计算条目。这也可以单独用于选择。如果我们最初不知道条件的总数,这种方式将非常有用。

这是代码,

    HashMap<String, Boolean> selectionMap=new HashMap<String, Boolean>();
    selectionMap.put("Mon", true);
    selectionMap.put("Tue", true);
    selectionMap.put("Wed", false);
    selectionMap.put("Thur", false);

    int selectedCount=0;
    int notSelectedCount=0;
    boolean s=false;
    for(String key : selectionMap.keySet())
    {
         s=selectionMap.get(key);
         if(s)
             selectedCount++;
         else
             notSelectedCount++;

    }

    System.out.println("Selected Count : "+selectedCount);
    System.out.println("Not Selected Count : "+notSelectedCount);

答案 3 :(得分:0)

我的观点是与Enum而不是String。例如,从我的角度来看,您可以先定义枚举。

enum Day {
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday;

    public static Day forName(String name) {
        for (Day value : values()) {
            if (value.name().equals(name)) {
                return value;
            }
        }
        return null;
    }
}

然后使用EnumSet做任何你需要的事情。所以,如果你想要包括的天数;

public int numOfDays(String[] strings){
    EnumSet<Day> days = EnumSet.noneOf(Day.class);
    for (String string : strings) {
        Day day = Day.valueOf(string);
        if(day != null)
            days.add(day);
    }
    return days.size(); // return days if you need what days are included
}