创建一个循环,持续输出输出,直到用户键入一个单词以停止该过程为止

时间:2018-06-27 19:54:48

标签: java

我试图在Java中创建一个代码,该代码每10毫秒连续显示x变量是多少,直到用户输入打破循环的String为止。我想知道如何编码..我现在有以下内容。该代码当前正在运行,并且只是停止在扫描仪应该扫描下一行的位置,而不是连续打印出变量x是什么。

public static void show() {
    while (true) {
        if (showWatch.elapsedTime1() > 10) {
            System.out.println(x);
            showWatch.start();
            x = x + 1;
            wait(1000);
        }
        else if (showWatch.elapsedTime1() < 10) {
            while (showWatch.elapsedTime1() < 10) {
                response = scan.nextLine();
            }
            if (response.equalsIgnoreCase("STOP")) {
                break;
            }
            else if (showWatch.elapsedTime1() > 10) {
                System.out.println(x);
                showWatch.start();
                x = x + 1;
                wait(1000);
            }
        }
    }
}

您如何编码一个循环,该循环将仅在用户输入单词以停止程序之前连续打印变量的内容?

1 个答案:

答案 0 :(得分:0)

如果在键入过程中打印了某些内容,则扫描仪将无法工作。但是,如果间隔足够大,则可以正常工作。我使用信号量,以便打印机线程只要没有票证就可以入睡。

public class Printer extends Thread {

    public Semaphore stopped = new Semaphore(1);
    private int x;

    @Override
    public void run() {
        while (true) {
            try {
                stopped.acquire();
                System.out.println(++x);
                stopped.release();
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public static void main(String[] args) throws InterruptedException {
        Printer printer = new Printer();
        printer.start();

        Scanner scan = new Scanner(System.in);
        while(true) {
            String command = scan.nextLine();
            if ("BREAK".equals(command)) {
                printer.stopped.acquire(1);
            } else if ("RESTART".equals(command)) {
                printer.stopped.release(1);
            }
        }
}