[英]How can I reduce this code to use only one while loop?
到目前为止,这是我的代码:
public class EvenOdd
{
public static void main(String[]args)
{
System.out.print("Even numbers between 50 and 100: ");
int e = 50;
while (e <= 100) {
System.out.print(" " + e);
e += 2;
}
System.out.print("\nOdd numbers between 50 and 100: ");
int i = 51;
while (i <= 100) {
System.out.print(" " + i);
i += 2;
}
}
}
如何将这两个while循环减少到一个while循环?
将数字存储在两个StringBuilder
,一个存储为奇数,另一个存储为偶数:
public class EvenOdd
{
public static void main(String[]args)
{
StringBuilder even = new StringBuilder();
StringBuilder odd = new StringBuilder();
int e = 50;
while (e <= 100) {
if (e%2 == 0)
even.append (" " + e);
else
odd.append (" " + e);
e++;
}
System.out.print("Even numbers between 50 and 100: " + even.toString());
System.out.print("\nOdd numbers between 50 and 100: " + odd.toString());
}
}
public static void main(String[]args)
{
StringBuilder evenString = new StringBuilder("Even numbers between 50 and 100: ");
StringBuilder oddString = new StringBuilder("Odd numbers between 50 and 100: ");
int e = 50;
while (e <= 100) {
if((e % 2) == 0)
{
evenString.append(" " + e);
}
else
{
oddString.append(" " + e);
}
e++;
}
System.out.println(evenString);
System.out.println(oddString);
}
使用两个StringBuilder存储要显示的字符串,然后在完成循环后将其写出。 每个循环都进行模块化除法(%),以查看其偶数还是奇数。 如果余数为0,那么即使不是,也很奇怪。 只是基于哪一个附加到适当的StringBuilder。
减少代码重复通常是一件好事。 Java提供的最基本的工具是方法,因此您可以提取方法中循环的行为并编写等效的程序:
public class EvenOdd
{
public static void main(String[]args)
{
System.out.print("Even numbers between 50 and 100: ");
printEverySecondNumber(50, 100);
System.out.print("\nOdd numbers between 50 and 100: ");
printEverySecondNumber(51, 100);
}
public static void printEverySecondNumber(int start, int end){
int current = start;
while (current <= end) {
System.out.print(" " + current);
current += 2;
}
}
}
请注意,此程序的行为相同:循环将被执行两次,但不会在代码中重复。
使用清单。 他们打印得很好。
public class EvenOdd
{
public static void main(String[]args)
{
List<String> even = new ArrayList<String>();
List<String> odd = new ArrayList<String>();
int e = 50;
while (e <= 100) {
if (e%2 == 0)
even.add(String.valueOf(e));
else
odd.add(String.valueOf(e));
e++;
}
System.out.print("Even numbers between 50 and 100: " + even);
System.out.print("\nOdd numbers between 50 and 100: " + odd);
}
}
这是不存储数字的解决方案
public static void main(String[] args) {
int i = 0;
System.out.print("Even numbers between 50 and 100: ");
while (i <= 50) {
if (i == 26) {
System.out.print("\nOdd numbers between 50 and 100: ");
}
if (i <= 25) {
System.out.print (" " + (2 * i + 50));
} else {
System.out.print (" " + (2 * (i - 25) + 49));
}
i++;
}
}
如果确定要进行单循环
int n = 50;
System.out.print("Even numbers between 50 and 100:");
while(n < 151){
if(n <= 100)
System.out.print(" " + n);
else
System.out.print(" " + (n-50));
if(n != 100)
n = n + 2;
else{
System.out.print("\nOdd numbers between 50 and 100:");
n = n + 1;
}
}
这样做的好处是您不需要构建任何不必要的对象,也不必真正管理n以外的任何东西。
如果您的目标是减少循环迭代
StringBuilder evenString = new StringBuilder();
StringBuilder oddString = new StringBuilder();
int n = 50;
while(n <= 100){
evenString.append(" " + n);
if(n != 100)
oddString = oddString.append(" " + (n + 1));
n = n + 2;
}
System.out.println("Even numbers between 50 and 100:" + evenString);
System.out.print("Odd numbers between 50 and 100:" + oddString);
需要注意的是, this cuts your iterations in half over using a single while with if statements
。
只需通过重新设置计数器来重新开始迭代:
public class EvenOdd
{
public static void main(String[]args)
{
int e = 0;
while (1) {
if (e==0) {
System.out.print("Even numbers between 50 and 100:");
e = 50;
}
else
if (e==102) {
System.out.print("\nOdd numbers between 50 and 100:");
e = 51;
}
else
if (e==101) {
System.out.print("\n");
break;
}
System.out.print(" " + e);
e += 2;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.