需要排列和组合

时间:2012-04-25 13:48:44

标签: java permutation combinations

我试图从黑莓的原生日历中读取“日期”值,该值以整数形式返回,该值被映射为一周中每一天的值。值如下:

  • 星期一:32768
  • tue:16384
  • 婚礼:8192
  • thur:4096
  • fri:2048
  • sat:1024
  • sun:65536

如果事件发生一天,我可以看到值是mon / tue / wed / thu / fri / sat / sun

if (rule.MONDAY == rule.getInt(rule.DAY_IN_WEEK)) {
    System.out.println("occurs monday");
}
rule.getInt(rule.DAY_IN_WEEK)

值也与星期一值相同。

现在的问题是,如果事件发生在两天/三天或更多天,那么

rule.getInt(rule.DAY_IN_WEEK)

返回所选天数的总和。

示例:如果日期是:结婚,那么我得到结果为9216,结婚和坐的总和,从此我不知道事件发生的日期。

如何对这些数字进行排列/组合,并在选定的“n”天内获得准确的结果。

3 个答案:

答案 0 :(得分:4)

我认为日期只是数字中的位标志,因此您可以更改支票:

if ( (rule.getInt(rule.DAY_IN_WEEK) & rule.MONDAY) != 0 ) {
   System.out.println("occurs monday");
}

答案 1 :(得分:3)

使用二进制和运算符,如下所示:

int day = rule.getInt(rule.DAY_IN_WEEK)
if(day & rule.MONDAY != 0) {
 System.out.println("occurs monday");
}
if(day & rule.WEDNESDAY != 0) {
 System.out.println("occurs wednesday");
} /* and so on */

请注意:

0000 0100 0000 0000 = 1024

0000 1000 0000 0000 = 2048

。 。 。 另请查看bit mask

答案 2 :(得分:2)

要了解事件发生的一周中的哪一天,您需要执行以下操作:

boolean occursOnMonday = (rule.getInt(rule.DAY_IN_WEEK) & rule.MONDAY) != 0;

其中&是按位AND运算符。为什么会这样?

周三是8192,二进制是10000000000000(2倍13)

星期六是1024,二进制是00010000000000(2倍9)

因此,周三和周六发生的事件是9216,即10010000000000。

然后使用位操作,您可以知道1中的哪些位以及0中的位,并且知道事件发生的日期。