繁体   English   中英

如何减少此代码以仅使用一个while循环?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM