我试图在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);
}
}
}
}
您如何编码一个循环,该循环将仅在用户输入单词以停止程序之前连续打印变量的内容?
答案 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);
}
}
}