【问题标题】:Breaking out of an infinite loop after a user inputs a character用户输入字符后跳出无限循环
【发布时间】:2022-01-10 09:30:27
【问题描述】:

我想使消息无限循环并在用户输入字符(例如“x”)时停止它。但是它在 if 语句上出现错误,说它是一个无法访问的代码。谁能帮帮我。

import java.util.Scanner;
public class Loop {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        char y;

        while (true) {
            System.out.println("Good Morning!!!");
        }
        y = input.next().charAt(0);
        if (y == 'y') {
            break;
        }
    }   
}

【问题讨论】:

    标签: java loops input character


    【解决方案1】:

    您的if 语句不在while 循环内:

    import java.util.Scanner;
    public class Loop {
    
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            char y;
    
            while (true) {
                System.out.println("Good Morning!!!");
                y = input.next().charAt(0);
                if (y == 'y') {
                    break;
                }
            }
        }   
    }
    

    【讨论】:

    • 我试过了,但它只打印一次或只打印一个“早安”。
    • 它会打印一次,然后要求用户输入
    • 所以不可能无限打印或多次打印问候语然后在用户输入后停止?
    • Java 循环不是为制作动画而设计的。如果要添加多个“早安!!!”在屏幕上等待输入时,您需要使用 Timer。
    • @FrancisPutnam 不,有可能,看我的回答
    【解决方案2】:

    致谢

    线程是程序中的执行线程。 Java 虚拟机允许应用程序同时运行多个执行线程。 每个线程都有一个优先级。具有较高优先级的线程优先于具有较低优先级的线程执行。每个线程可能会也可能不会被标记为守护进程。当在某个线程中运行的代码创建一个新的 Thread 对象时,新线程的优先级最初设置为等于创建线程的优先级,并且当且仅当创建线程是守护进程时,它才是守护线程。

    当 Java 虚拟机启动时,通常有一个非守护线程(通常调用某个指定类的名为 main 的方法)。 阅读更多关于线程here

    解决方案

    因为输入和循环都阻塞了线程,你必须把它们放在单独的线程中。就像这样:-

    public class Demo {
        volatile static char input;
    
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            new Thread(new Runnable() {
                @Override
                public void run() {
                    while (input != 'y'){
                        System.out.println("Good morning !");
                    }
                }
            }).start();
    
            input = scanner.next().charAt(0);
        }
    }
    

    这将打印“早上好!”,直到input != 'y'。另一方面,我们正在读取用户的输入。当用户输入“y”时,条件变为假,循环停止。

    【讨论】:

      【解决方案3】:

      试试这个。

      public static void main(String[] args) throws IOException {
          InputStream input = System.in;
          while (true) {
              System.out.println("Good Morning!!!");
              if (input.available() > 0 && input.read() == 'y')
                  break;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-20
        • 1970-01-01
        • 2021-03-12
        • 1970-01-01
        • 1970-01-01
        • 2020-09-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多