到达匹配数字时结束while循环

时间:2019-10-21 03:09:42

标签: java

当它达到匹配的数字(例如88、77等)时,我需要结束while循环。

import java.util.Scanner;

public class LabProgram {
   public static void main(String[] args) {
      Scanner scan = new Scanner(System.in);
      int userNum = scan.nextInt();
      if ((userNum >= 20) && (userNum <= 98)){
         System.out.print(userNum + " ");
         while ((userNum != 11) || (userNum != 22) || (userNum != 33) || (userNum != 44) || (userNum != 55) || (userNum != 66) || (userNum != 77) || (userNum != 88) || (userNum != 99)){
         userNum = userNum - 1;
           System.out.print(userNum + " ");  
         }

      }
      else{
         System.out.print("Input must be 20-98");
      }
      System.out.print("\n");
   }
}

但是,当它运行时,它永远不会离开循环,即使该数字达到了while循环中我拥有的匹配数之一。请帮忙。

5 个答案:

答案 0 :(得分:3)

if(userNum != 11) || (userNum != 22) || (userNum != 33) || (userNum != 44) || (userNum != 55) || (userNum != 66) || (userNum != 77) || (userNum != 88) || (userNum != 99)

将始终为真,因为userNum不能一次成为所有这些值。将||替换为&&

if(userNum != 11) && (userNum != 22) && (userNum != 33) && (userNum != 44) && (userNum != 55) && (userNum != 66) && (userNum != 77) && (userNum != 88) && (userNum != 99)

使用模运算符可以使此操作更容易:

if(userNum % 11 != 0)

答案 1 :(得分:2)

问题出在这一行。 if(userNum != 11) || (userNum != 22) || (userNum != 33) || (userNum != 44) || (userNum != 55) || (userNum != 66) || (userNum != 77) || (userNum != 88) || (userNum != 99)

如果userNum为任意数字,则不能一次为11、22、33、44、55、66、77、88和99,这意味着您的程序将继续运行。正如@Carcigenicate所说,您需要&&(和)运算符。

答案 2 :(得分:2)

您可以使用以下代码在使用数组达到匹配数字时结束while循环。

public class stopWhileTest{
    public static void main(String arg[]) {
        int[] number = {11, 22, 33, 44, 55, 66, 77, 88};
        Scanner scan = new Scanner(System.in);
        int userNum = scan.nextInt();
        if ((userNum >= 20) && (userNum <= 98)){
            System.out.print(userNum + " ");
            while(!contains(number,userNum)){
                userNum = userNum - 1;
                System.out.print(userNum + " ");
            }
        }
        else{
            System.out.print("Input must be 20-98");
        }
        System.out.print("\n");
        scan.close();
    }

    public static boolean contains(final int[] array, final int v) {
        boolean result = false;
        for(int i : array){
            if(i == v){
                result = true;
                break;
            }
        }
        return result;
    }
}

希望此解决方案有效。

答案 3 :(得分:1)

尝试在此处使用&&运算符代替OR

import java.util.Scanner;

public class LabProgram {
   public static void main(String[] args) {
      Scanner scan = new Scanner(System.in);
      int userNum = scan.nextInt();
      if ((userNum >= 20) && (userNum <= 98)){
         System.out.print(userNum + " ");
         while (userNum != 11 && userNum != 22&& userNum != 33 && userNum != 44 && userNum != 55 && userNum != 66 && userNum != 77&& userNum != 88 && userNum != 99){
         userNum = userNum - 1;
           System.out.print(userNum + " ");  
         }

      }
      else{
         System.out.print("Input must be 20-98");
      }
      System.out.print("\n");
   }
}

答案 4 :(得分:1)

您的代码似乎正在搜索11的倍数,因此我希望测试11的余数。另外,您可以使用x--代替x = x - 1。最后,使用do-while循环可以使它更简洁。喜欢,

Scanner scan = new Scanner(System.in);
int userNum = scan.nextInt();
if (userNum >= 20 && userNum <= 98) {
    do {
        System.out.print(userNum + " ");
        userNum--;
    } while (userNum % 11 != 0);
    System.out.println();
}