Java 需要排列和组合
我试图从blackberry的本机日历中读取“day”值,该值以整数形式返回,并映射到一周中每一天的值。这些值如下所示: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(
- 星期一: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很多,有问题:)非常感谢,有问题:)