基于键盘输入条件的循环

时间:2017-01-28 18:07:28

标签: java

class Example2{
    public static void main(String args[])
        throws java.io.IOException {
            int i;
            System.out.println("Press S to Stop!");
            for(i=0 ; (char) System.in.read() != 'S' ; i++){
                System.out.print(i+" ");
            }
        }
    }

我认为它会显示如下数字: 1 2 3 4 五 6 7 ....直到我按下S.但它没有显示任何东西,除了第一个println表达式。为什么会发生这种情况?

3 个答案:

答案 0 :(得分:1)

for循环以下列方式工作:

for(initialization; termination; increment) statement

请参阅java nutsandbolts

initialization在首次运行statement之后运行,increment运行后运行termination并在每次运行statement之前进行评估。

在您的示例中termination(char) System.in.read() != 'S',这意味着在每次重复中,程序都会从​​System.in中读取另一个字符。现在System.in的缓冲区不包含任何字符,因此程序将等待用户输入它可以处理的任何内容。每次重复循环都会发生这种情况。

因此,您的程序会等待用户输入任何内容,并且在此之前不会终止。

答案 1 :(得分:1)

它不起作用,因为您在每次迭代时等待并读取输入。因此,它每次都等待你的键盘输入..

相反:

  1. 只要输入流中没有字符,您就可以循环System.in.available()

  2. 然后,您仅在输入字符时读取输入System.in.read();

  3. 完整代码:

    int i=0;
    System.out.println("Press S to Stop!");
    char car = ' ';
    while (car != 'S') {
        while (System.in.available() == 0) {
            System.out.print(i++ + " ");
            Thread.sleep(1000);
        }
        car = (char) System.in.read();
    }
    

    我添加了Thread.sleep(1000);因为它太快了...删除它,你会看到。

答案 2 :(得分:0)

程序等待输入,

如果你希望它一直运行,直到你写下" S"你可以使用线程

这样的事情会起作用:

class MainClass{

     static boolean toStop;

     public static void main(String args[])
         throws java.io.IOException {
            toStop = false;
            thread R1 = new thread("ThreadName");
            R1.start();
            int i = 0;
            while(!toStop){
                System.out.print(i+" ");
                i++;
            }
         }
}

class thread implements  Runnable {
    private Thread t;
    private String threadName;

    thread( String name) {
        threadName = name;
        System.out.println("Creating " +  threadName );
    }

    @Override
    public void run() {
      char input;
        try {
            System.out.println("Press S to Stop!");
            input = (char) System.in.read();
            while(input != 'S'){
                input = (char) System.in.read();
            }
            MainClass.toStop = true;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void start () {
              System.out.println("Starting " +  threadName );
              if (t == null) {
                 t = new Thread (this, threadName);
                 t.start ();
              }
    }
}