Java 需要排列和组合

Java 需要排列和组合,java,permutation,combinations,Java,Permutation,Combinations,我试图从blackberry的本机日历中读取“day”值,该值以整数形式返回,并映射到一周中每一天的值。这些值如下所示: 星期一:32768 星期二:16384 星期三:8192 星期四:4096 星期五:2048 星期六:1024 孙:65536 如果事件只发生一天,我可以使用 if (rule.MONDAY == rule.getInt(rule.DAY_IN_WEEK)) { System.out.println("occurs monday"); } rule.getInt(

我试图从blackberry的本机日历中读取“day”值,该值以整数形式返回,并映射到一周中每一天的值。这些值如下所示:

  • 星期一:32768
  • 星期二:16384
  • 星期三:8192
  • 星期四:4096
  • 星期五:2048
  • 星期六:1024
  • 孙:65536
如果事件只发生一天,我可以使用

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)
返回所选天数的总和

示例:如果日期是:wed,sat,那么我得到的结果是9216,wed+sat之和,由此我无法知道事件发生的日期


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

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

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 */
boolean occursOnMonday = (rule.getInt(rule.DAY_IN_WEEK) & rule.MONDAY) != 0;
请注意:

0000 0100 0000 0000=1024

0000 1000 0000=2048

。 . .
同时检查

我假设天数只是数字中的位标志,因此您可以更改您的检查:

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

要知道事件发生在一周中的哪几天,您需要执行以下操作:

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 */
boolean occursOnMonday = (rule.getInt(rule.DAY_IN_WEEK) & rule.MONDAY) != 0;
其中&是按位AND运算符。为什么会这样

星期三是8192,二进制是100000000000(2乘以13)

星期六是1024,二进制是0001000000000(2乘以9)

所以在周三和周六发生的事件是9216,也就是1001000000000


然后使用位操作,您可以知道1中的位和0中的位,并由此知道事件发生的日期。

您知道位掩码吗@leonbloy不我不知道比特面具,怎么做?我怎样才能实现我想要的need@harqs:已经回答(Thomas和ixos)我的情况是多天的事情,对于多天我得到一个总和,在这里我如何检查if循环,它永远不会匹配@ixos,如何使用bitMask做到这一点?非常感谢,得到了问题:)rule.DAY_IN_WEEK值总是2,如果我执行一个rule.getInt(rule.DAY_IN_WEEK)将给我上面列表中的值,即mon/sun@thomastanks很多,有问题:)非常感谢,有问题:)