Java For循环中的逻辑错误

时间:2018-07-04 06:50:29

标签: java for-loop

我正在尝试使循环在此处继续执行,直到用户在键盘上键入字母S为止。似乎每次迭代给出三个输出,而不是一个。我在这里做错了什么

// Loop until an S is typed

public class ForTest {

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

        int i;

        System.out.println("Type S to stop.");

        for(i = 0; (char) System.in.read() != 'S'; i++) 
//          System.out.println("print");
            System.out.println("Pass # " + i);
//          System.out.println("print");


    }

}

如果我按'a',则会出现输出:

Type S to stop.
a
Pass # 0
Pass # 1
Pass # 2

3 个答案:

答案 0 :(得分:2)

InputStream.read方法块直到输入结束(在Windows操作系统上为控制字符CR LF(\ r \ n))。

这说明了为什么得到3个字符的原因。

亲自看看:

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

    int i;

    System.out.println("Type S to stop.");

    char c = (char) 0;
    for (i = 0; c != 'S'; i++) {
        c = (char) System.in.read();
        System.out.println("Pass # " + i);
        System.out.println("char intValue : " + (int) c);
    }
}

建议阅读: Java: How to get input from System.console()

答案 1 :(得分:1)

System.in将使用BufferedInputSteam一点一点地从控制台读取输入(包括换行符等)。在Mac系统中,每输入一个数字我就会得到2位。

使用Scanner读取所有字节并转换为String。

答案 2 :(得分:0)

我建议您避免以这种方式读取输入,而应使用Scanner。 您可以使用以下代码实现目标:

    int i = 0;
    Scanner scan = new Scanner(System.in);
    System.out.println("Type S to stop.");
    while( !scan.next().equals("S")) {
        i++;
        System.out.println("Pass # "+i);
    }