循环,奇怪的结果

Eur*_*oco 1 java

我正在学习Java"Java:A Beginner's Guide"一书.这本书展示了for循环的这个例子:

// Loop until an S is typed
class ForTest {
    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.println ("Pass #" + i);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

Press S to stop.
s
Pass #0
Pass #1
Pass #2
d
Pass #3
Pass #4
Pass #5
S
Run Code Online (Sandbox Code Playgroud)

我不明白为什么每次按下不同的键盘键时,它会写三次Pass#.我认为它应该只写一次Pass#.谢谢.

Jon*_*eet 6

你按下s然后返回.这种"回归"产生的两个大字- \r\n(我假设你在Windows上).那些然后返回System.in.read().

这是一个更清晰的例子:

class ForTest {
    public static void main (String args[]) throws java.io.IOException {

        int i;

        System.out.println ("Press S to stop.");
        char c;
        for (i = 0; (c = (char) System.in.read()) != 'S'; i++) {
            System.out.println ("Pass #" + i + "; c=" + (int) c);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Press S to stop.
a
Pass #0; c=97
Pass #1; c=13
Pass #2; c=10
b
Pass #3; c=98
Pass #4; c=13
Pass #5; c=10
S
Run Code Online (Sandbox Code Playgroud)

\r是Unicode字符13,\n是10.