如何将这两个while循环合并为一个?
如何将这两个while循环合并为一个?
我有两个while循环,其中一个循环在50到100之间取奇数,另一个循环在相同的50到100之间取偶数。它打印出来很好,也能正常工作,但我的教授希望我将其转换为一个while循环,而不是两个。我遇到了麻烦,因为我之前使用了print语句,以便使其适应数字进入时的情况。
int e = 50; int o = 51; System.out.print("50到100之间的偶数:50,"); while (e <= 100) { if (e % 2 == 0) { System.out.print(e + ","); } e += 2; } System.out.print("\n50到100之间的奇数:51,"); while (o <= 99) { if (o % 2 != 0) { System.out.print(o + ","); } o += 2; }
当前输出的结果如上所示,但我需要能够只使用一个循环来完成。
如何将这两个while循环合并为一个?
这个问题的产生是因为在原始代码中,使用了两个独立的while循环来分别判断奇数和偶数,并将它们分别存储在两个字符串构建器中。这种方法虽然能够达到预期的结果,但是代码冗余且不够简洁。因此,提出了将这两个while循环合并为一个的解决方法。
解决方法如下:
int count = 50; StringBuilder odds = new StringBuilder(); StringBuilder evens = new StringBuilder(); while (count <= 100) { if (count % 2 == 0) { evens.append(count).append(","); } else { odds.append(count).append(","); } count++; } evens.setLength(evens.length() - 1); odds.setLength(odds.length() - 1); System.out.println("The even numbers are: " + evens.toString()); System.out.println("The odd numbers are: " + odds.toString());
在这个解决方法中,我们将两个while循环合并为一个。通过在循环中使用if语句来判断奇数和偶数,并将它们分别附加到相应的字符串构建器中。最后,我们删除字符串的末尾逗号,并打印出结果。
另外,这个解决方法中使用了StringBuilder来构建字符串,这比使用+=的方式更高效。StringBuilder是可变的,可以在不创建新的字符串对象的情况下进行修改和附加操作。具体可以参考Java官方文档中的链接:https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html
另外,注意到原始代码中的while循环条件是count<=100,但实际上结果中包含了100,因此修改了循环条件。
有人提出了使用StringBuilder的必要性。事实上,使用StringBuilder在性能上更加高效,因为它避免了创建大量的中间字符串对象。然而,最终选择使用StringBuilder还是String是由个人决定的。
这里的问题是如何将两个while循环合并为一个。其中一个while循环用于打印偶数,另一个用于打印奇数。
解决方法是将两个while循环合并为一个,并在循环中使用条件语句来判断当前数字是偶数还是奇数。以下是合并后的代码:
int e = 50; while (e <= 98) { if (e%2 == 0) { System.out.println("even :" + e); } else { System.out.println("odd :" + e); } e++; }
这段代码将从50开始递增,直到达到98。在每次循环中,使用条件语句判断当前数字e是否为偶数,如果是,则打印"even :"和数字e,否则打印"odd :"和数字e。然后,e的值增加1,继续下一次循环,直到e的值达到98为止。
通过将两个while循环合并为一个,我们可以更简洁和高效地打印出50到98之间的奇偶数。
如何将这两个while循环合并为一个?
如果你只想要一个while循环,且分行显示,你应该先构建字符串,然后再将其打印出来。
像这样:
StringBuilder odds = new StringBuilder(); StringBuilder evens = new StringBuilder(); i = 50; while(i<100) { if(i%2 == 1) { odds.append(i).append(","); } else { evens.append(i).append(","); } i++; } // 注意,odds和evens现在可能以一个','结尾,你需要将其删除掉 odds.removeCharAt(odds.size()); evens.removeCharAt(evens.size()); // 或者你可以像下面这样处理: //odds.append(" and nothing more!"); //evens.append(" and nothing more!"); System.out.println("奇数是:"); System.out.println(odds); System.out.println("偶数是:"); System.out.println(evens)
我一直在想它是否真的有帮助,而且编译器是否已经对字符串构建进行了优化。但是没错!你是对的!我懂什么呢... stackoverflow.com/questions/11942368/…
如果我能找到这个链接,我会将它添加到这个评论中的。但是我记得每次循环迭代时,使用+来拼接字符串实际上会使用字符串构建器,但是它是一个新的对象。所以它肯定会更慢。
是的,我也找到了 🙂
如果有人感兴趣,我在repl.it上做了一个快速的模拟。我写了两个循环,将数字0到99999追加到一个字符串中,一个使用字符串,一个使用StringBuilder。使用字符串的实现需要32.395368秒来拼接这些数字,而StringBuilder则只需要0.003023秒来拼接这些数字并运行其toString()方法。在一个较小的范围内,即0到99,字符串需要0.000337秒,而StringBuilder只需要0.000060秒。