如何打破无限循环,如下所示:
while(true){
if(???){
break;
}
}
每次循环并请求输入时,Whitout会中断它吗?循环必须循环,直到用户破坏它。
修改
我想用键输入来打破它。
答案 0 :(得分:1)
我认为你最好的选择是使用另一个线程控制的标志。你可以这样做:
private volatile boolean keepRunning = true;
public synchronized void stopRunning() {
keepRunning = false;
}
public void someProcess() {
new Thread() {
public void run() {
try (Scanner scanner = new Scanner(System.in)) {
keepWaiting = true;
while(keepWaiting) {
String userInput = scanner.next();
if("s".equals(userInput)) {
stopRunning();
keepWaiting = false;
}
}
}
}
}.start();
while(keepRunning){
doWork();
}
}
循环应该一直运行,直到用户输入“s”。当然,这是一个非常基本的实现,但你明白了。
另外,你真的不需要“stopRunning()”方法,线程可以直接访问该标志,但如果你想从其他地方运行该线程,则需要它。
答案 1 :(得分:0)
您可以将循环放在一个单独的线程中。
import java.*;
import java.io.*;
class Main {
public static void main(String[] args) throws IOException {
Thread t = new Thread(new Runnable() {
public void run() {
int cnt = 0;
while (true) {
System.out.println(cnt);
++cnt;
}
}
});
t.start();
System.in.read();
t.stop();
}
}
让我们逐行分析;首先是进口:
import java.*;
import java.io.*;
class Main {
然后我们需要声明 main 抛出IOException,因为我们将处理IO调用;一个更好的选择显然是正确处理异常,但这只是一个简单的测试。
public static void main(String[] args) throws IOException {
然后我们创建一个执行无限循环的线程;我们不会从这个线程做IO调用。在我们调用 Thread.start()之前,线程才会启动,直到我们调用 Thread.stop()为止。
Thread t = new Thread(new Runnable() {
public void run() {
int cnt = 0;
while (true) {
System.out.println(cnt);
++cnt;
}
}
});
现在我们启动线程;此调用后的行将继续与线程同时执行,因此我们将能够等待用户输入并停止该线程。
t.start();
System.in.read();
t.stop();
}
}
答案 2 :(得分:-2)
最好使用它。
boolean doLoop = true;
while(doLoop){
if(userTerminates()){ //user terminates it?
doLoop = false;
}
}
private boolean userTerminates(){
Scanner scanner = new Scanner(System.in);
//If you want that user terminates it with 'c' char
return scanner.nextLine().equals("c");
}