突发奇想问一个 Java 的一个小小小问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
whatCanIDoForYou
V2EX    问与答

突发奇想问一个 Java 的一个小小小问题

  •  
  •   whatCanIDoForYou 2020 年 7 月 20 日 2394 次点击
    这是一个创建于 2043 天前的主题,其中的信息可能已经有所发展或是发生改变。
    /**
    *
    * 两个数不能同时为偶数
    * 分母和分子 取值范围在[1-20]
    * @param args
    */
    public static void main(String[] args) {
    for (int i = 1; i <= 20; i++) {
    int first = i;
    for (int j = 1; j <= 20 ; j++) {
    int secOnd= j;
    //如果同时为偶数,则跳出本次循环
    if((first%2 == 0) && (second%2==0) )
    continue;
    System.out.println("首当其冲:"+first +"退而求次:"+ second +",结果等于"+ String.format("%.3f", first / new Double(second)));
    }
    }
    21 条回复    2020-07-20 18:34:48 +08:00
    whatCanIDoForYou
        1
    whatCanIDoForYou  
    OP
       2020 年 7 月 20 日
    如果您继续往下读可能浪费你的时间(您理解的),当然非常期待您的回复。
    whatCanIDoForYou
        2
    whatCanIDoForYou  
    OP
       2020 年 7 月 20 日
    上面那个方法实现了两个非偶数的判断。但是我突然想 我能不能不写那两句 if 判断,加一些逻辑运算符 在第二个 for 循环去判断。
    如果实现了 我觉得就比较 B 格高 哈哈哈哈
    在尝试。
    也请大家帮忙想下。
    pushback
        3
    pushback  
       2020 年 7 月 20 日
    for (int i = 1; i <= 20; i++)
    for (int j = 1; j <= 20; j++)
    if ((i + j) % 2 ==0)
    continue;
    然后怎么优化,细说喃
    whatCanIDoForYou
        4
    whatCanIDoForYou  
    OP
       2020 年 7 月 20 日
    @pushback #3 就是没有想好怎么优化,只是突发奇想不想写这两行 判断 能不能在 第二个 for 中 使用 && 解决
    whatCanIDoForYou
        5
    whatCanIDoForYou  
    OP
       2020 年 7 月 20 日
    @pushback #3 而且你这个 + 的判断 也不中啊 铁子 两个奇数也跳走了~~
    pushback
        6
    pushback  
       2020 年 7 月 20 日
    哦哦,没审题
    Vegetable
        7
    Vegetable  
       2020 年 7 月 20 日
    first 是奇数时,第二层循环整个就是浪费的, 不应该在输出前判断。
    其次,你可以直接 for int i=2;i<=20;i+=2 设置步长为 2 跳过奇数。
    最后,在 for 循环当中直接判断好像是不行的,
    whatCanIDoForYou
        8
    whatCanIDoForYou  
    OP
       2020 年 7 月 20 日
    @Vegetable #7 可能是我没有表述太清楚哦 抱歉。 不论奇数还是偶数都是要使用的,但是 在使用两个数的时候不能同时为偶数。再次抱歉
    pushback
        9
    pushback  
       2020 年 7 月 20 日
    @Vegetable 如果这两个数组是不规则数组,步长也是不能固定的
    remiver
        10
    remiver  
       2020 年 7 月 20 日
    ((i | j) & 1) > 0 这种?
    Vegetable
        11
    Vegetable  
       2020 年 7 月 20 日
    @whatCanIDoForYou #8 是我没看清楚.
    不能同时为偶数的话,两个数二进制最后一位必须有一个 1,所以 1&(first|second)==1,这个倒是能通过位运算判断
    lllue
        12
    lllue  
       2020 年 7 月 20 日   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)));
    }
    }
    pushback
        13
    pushback  
       2020 年 7 月 20 日
    // scope 1~20
    int[] oArr = {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,有点骚
    whatCanIDoForYou
        14
    whatCanIDoForYou  
    OP
       2020 年 7 月 20 日
    @remiver #10 哈哈哈哈哈 我对于这些奇数还有点懵,我验证了 告诉您

    @Vegetable #11 奇数和奇数 的情况呢 好像没有考虑呦
    @lllue #12 厉害厉害 学习了 谢谢您
    @pushback #13 嘿嘿 这个仅仅是跳过当前不符合条件 下面该干嘛干嘛的。 您这段代码没有实现我的需求哦
    Vegetable
        15
    Vegetable  
       2020 年 7 月 20 日
    @whatCanIDoForYou #14 奇数和奇数也是的,两个奇数相当于(1 or 1) and 1,结果也是 1
    pushback
        16
    pushback  
       2020 年 7 月 20 日
    @whatCanIDoForYou 没有,我只是重新罗列了一下,上面说按步长的情况在乱序数组里面不适用
    cigarzh
        17
    cigarzh  
       2020 年 7 月 20 日
    for (int j = 1; j <= 20 ; j=j+((~(i&1)&j&1)==1?2:1)) {

    初始化的 ij 不能都为偶数
    msg7086
        18
    msg7086  
       2020 年 7 月 20 日
    这不是 B 格高,这属于代码混淆,把原本思路清晰的代码改写成一个星期后的自己也看不懂的代码。
    whatCanIDoForYou
        19
    whatCanIDoForYou  
    OP
       2020 年 7 月 20 日
    @Vegetable #15 学习力一波 了解了 谢谢您 哈哈哈哈哈哈



    @msg7086 #18 对的,就是 无聊玩一玩 回忆回忆基础的小美好
    superJava
        20
    superJava  
       2020 年 7 月 20 日
    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)));
    });
    });
    }
    whatCanIDoForYou
        21
    whatCanIDoForYou  
    OP
       2020 年 7 月 20 日
    @superJava #20 1.8 新特性 good 谢谢您~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     780 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 18:40 PVG 02:40 LAX 10:40 JFK 13:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86