在用户输入时停在任何一点?

时间:2014-04-06 22:00:48

标签: java loops

我需要编写一个自动运行的Java程序,但可以在用户输入时随时停止。 例如:

for (int i=0;i<1000000;i++){
   System.out.println(i);
}

当用户输入exit时,程序应该停止,怎么做?

2 个答案:

答案 0 :(得分:1)

如果输入等于do-while,您可以使用"exit"循环检查每次迭代:

String input = "";
Scanner sc = new Scanner(System.in); // for input

do {
    input = sc.nextLine();
    // ...
} while (!input.equals("exit")) // if input is "exit", the loop finishes:

答案 1 :(得分:0)

您可以通过多种方式完成此操作。我已经概述了一些应该涵盖你可能想要的大部分内容。

  1. 具有2个线程的多线程程序,其中一个用于执行某些任意功能,另一个用于检测用户是否键入了“exit”。这非常粗糙,用户必须按回车。
  2. JFrame通过以下两种方式之一检测JTextField的用户输入:
    • 用户在输入“exit”
    • 后点击进入
    • 用户只需键入“退出”
    • 即可
  3. 在步骤2中交换JFrame / Console功能。以某种方式在JFrame中显示任意函数,并在用户在控制台中键入“exit”时停止它。用户必须按Enter键。
  4. 将控制台设置为原始模式,然后检测用户是否输入了“退出”而无需输入。有几种方法可以做到这一点,所有这些方法都涉及外部库。有关您的确切from this answer here的更多信息以及此处的一些不同解决方案的类似问题:Detecting and acting on keyboard direction keys in Java

  5. 解决方案1:

    public class MultithreadedUserInput
    {
        public static void main(String[] args)
        {
            InputDetector detector = new InputDetector();
            detector.start();
    
        for (int i = 0; i < 1000000; i++)
        {
            System.out.println(i);
    
            if (detector.getInput().equals("exit"))
            {
                break;
            }
        }
    
        //do something after user types exit
        }
    }
    

    import java.util.Scanner;
    
    public class InputDetector implements Runnable
    {
        private Thread thread;
        private String input;
        private Scanner scan;
    
        public InputDetector()
        {
            input = "";
            scan = new Scanner(System.in);
        }
    
        public void start()
        {
            thread = new Thread(this);
            thread.start();
        }
    
        @Override
        public void run()
        {
            while (!(input.equals("exit")))
            {
                input = scan.nextLine();
            }
        }
    
        public String getInput()
        {
            return input;
        }
    }
    

    解决方案2&amp; 3:

    下面有if个条件将解决方案2与解决方案3分开。if语句之前的break;调用检查input的{​​{1}}的方法{1}}。 InputFrame仅在用户按Enter后更新。另一个input语句调用的方法只是检查if中的文本。

    JTextField

    import javax.swing.JFrame;
    
    public class JFrameInput
    {
        public static void main(String[] args)
        {
            InputFrame iFrame = new InputFrame();
            iFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            iFrame.pack();
            iFrame.setVisible(true);
    
            for (int i = 0; i < 1000000; i++)
            {
                System.out.println(i);
                if ((iFrame.getInput().equals("exit")))
                //if (iFrame.checkInput("exit"))    //use to exit without pressing enter
                {
                    break;
                }
            }
            //do something after user types exit
        }
    }