1
whatCanIDoForYou OP 如果您继续往下读可能浪费你的时间(您理解的),当然非常期待您的回复。
|
2
whatCanIDoForYou OP 上面那个方法实现了两个非偶数的判断。但是我突然想 我能不能不写那两句 if 判断,加一些逻辑运算符 在第二个 for 循环去判断。
如果实现了 我觉得就比较 B 格高 哈哈哈哈 在尝试。 也请大家帮忙想下。 |
3
pushback 2020-07-20 16:36:57 +08:00
for (int i = 1; i <= 20; i++)
for (int j = 1; j <= 20; j++) if ((i + j) % 2 ==0) continue; 然后怎么优化,细说喃 |
4
whatCanIDoForYou OP @pushback #3 就是没有想好怎么优化,只是突发奇想不想写这两行 判断 能不能在 第二个 for 中 使用 && 解决
|
5
whatCanIDoForYou OP @pushback #3 而且你这个 + 的判断 也不中啊 铁子 两个奇数也跳走了~~
|
6
pushback 2020-07-20 16:43:08 +08:00
哦哦,没审题
|
7
Vegetable 2020-07-20 16:43:28 +08:00
first 是奇数时,第二层循环整个就是浪费的, 不应该在输出前判断。
其次,你可以直接 for int i=2;i<=20;i+=2 设置步长为 2 跳过奇数。 最后,在 for 循环当中直接判断好像是不行的, |
8
whatCanIDoForYou OP @Vegetable #7 可能是我没有表述太清楚哦 抱歉。 不论奇数还是偶数都是要使用的,但是 在使用两个数的时候不能同时为偶数。再次抱歉
|
10
remiver 2020-07-20 16:51:15 +08:00
((i | j) & 1) > 0 这种?
|
11
Vegetable 2020-07-20 16:52:23 +08:00
@whatCanIDoForYou #8 是我没看清楚.
不能同时为偶数的话,两个数二进制最后一位必须有一个 1,所以 1&(first|second)==1,这个倒是能通过位运算判断 |
12
lllue 2020-07-20 16:52:34 +08:00 1
for (int i = 0; i < 20; i++) {
int first = i+1; for (int j = 0; j < 20 ; j=j+1+i%2) { int second = j+1; //如果同时为偶数,则跳出本次循环 System.out.println("首当其冲:"+first +"退而求次:"+ second +",结果等于"+ String.format("%.3f", first / new Double(second))); } } |
13
pushback 2020-07-20 16:57:04 +08:00
// scope 1~20
int[] moArr = {19, 2, 3, 5, 6, 8, 15, 20, 1}; int[] deArr = {6, 7, 3, 2, 12, 18, 11, 19, 9}; for (int i = 0; i < moArr.length; i++) { int mo = moArr[i]; for (int j = 0; j < deArr.length; j++) { int de = deArr[j]; {continue;} } } for 第二段是 end 条件,你要在里面进行 continue,有点骚 |
14
whatCanIDoForYou OP |
15
Vegetable 2020-07-20 17:15:57 +08:00
@whatCanIDoForYou #14 奇数和奇数也是的,两个奇数相当于(1 or 1) and 1,结果也是 1
|
16
pushback 2020-07-20 17:18:03 +08:00
@whatCanIDoForYou 没有,我只是重新罗列了一下,上面说按步长的情况在乱序数组里面不适用
|
17
cigarzh 2020-07-20 17:20:41 +08:00
for (int j = 1; j <= 20 ; j=j+((~(i&1)&j&1)==1?2:1)) {
初始化的 ij 不能都为偶数 |
18
msg7086 2020-07-20 17:25:07 +08:00
这不是 B 格高,这属于代码混淆,把原本思路清晰的代码改写成一个星期后的自己也看不懂的代码。
|
19
whatCanIDoForYou OP |
20
superJava 2020-07-20 18:19:36 +08:00
public static void main(String[] args) {
IntStream.range(1, 20).forEach(i -> { IntStream.range(1, 20).filter(j -> !(i % 2 == 0 && j % 2 == 0)).forEach(j -> { System.out.println("首当其冲:" + i + "退而求次:" + j + ",结果等于" + String.format("%.3f", i / new Double(j))); }); }); } |
21
whatCanIDoForYou OP @superJava #20 1.8 新特性 good 谢谢您~
|