用键断开连续循环

时间:2013-10-21 08:01:49

标签: java

如何打破无限循环,如下所示:

while(true){

    if(???){
         break;
    }
}

每次循环并请求输入时,Whitout会中断它吗?循环必须循环,直到用户破坏它。

修改

我想用键输入来打破它。

3 个答案:

答案 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");
}