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表达式。为什么会发生这种情况?
答案 0 :(得分:1)
for循环以下列方式工作:
for(initialization; termination; increment) statement
initialization
在首次运行statement
之后运行,increment
运行后运行termination
并在每次运行statement
之前进行评估。
在您的示例中termination
是(char) System.in.read() != 'S'
,这意味着在每次重复中,程序都会从System.in
中读取另一个字符。现在System.in
的缓冲区不包含任何字符,因此程序将等待用户输入它可以处理的任何内容。每次重复循环都会发生这种情况。
因此,您的程序会等待用户输入任何内容,并且在此之前不会终止。
答案 1 :(得分:1)
它不起作用,因为您在每次迭代时等待并读取输入。因此,它每次都等待你的键盘输入..
相反:
只要输入流中没有字符,您就可以循环:System.in.available()
。
然后,您仅在输入字符时读取输入:System.in.read();
:
完整代码:
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 ();
}
}
}