用于双重工作的Java循环

时间:2015-05-24 15:21:57

标签: java loops for-loop

我写了一个循环,但它没有用。它应该问我4次a和每a它应该写0到3之间的数字。但是在询问后写了两个数字。错误在哪里?

我的代码是

package hra1;

public class Hra1 {

    public static void main(String args[]) throws java.io.IOException
    {
        char a;
        int i;

        for (i = 0; i < 4; i++)
        {
            a = (char) System.in.read();               
            System.out.println(i);
        } 
    }
}

以下是输出示例:

l
0
1
l
2
3

5 个答案:

答案 0 :(得分:1)

当您键入一个字符然后按Enter键(&lt; - |)时,系统会向您的程序提供两个字符;因此在输入第一个&#39;之后打印0和1。输入第二个&#39; l&#39;之后的2和3。

您可以打印读取字符的代码点,例如

for (int i = 0; i < 4; i++){
    char a = (char) System.in.read();
    System.out.println( Character.getNumericValue( a ) );
}

在循环中看看发生了什么。

答案 1 :(得分:1)

您的代码也在阅读newline character('\n'),因为您在每enter key('\n')('1','2','3'等)后点击input

如果您输入一个字符并按Enter键,System.in.read()将读取两个字符,因为它还会读取换行符。

重新考虑你的代码。 在一行中输入所有值(在输入所有值之前,请勿按Enter键)。这将解决您的问题。

for (i = 0; i < 4; i++)
{
       a = (char)System.in.read();

       System.out.println(a);
 }

输入4567

输出

4
5
6
7

ideone代码链接在这里http://ideone.com/IYcjyX。希望它有所帮助。

答案 2 :(得分:0)

输入密钥 - &gt; “\ n”
所以,你的输入1 \ n

答案 3 :(得分:0)

当您在终端中输入数字时,实际上正在提供两个正在读取的输入。首先,你的整数(例如'1'),然后是你点击回车键时的换行符('\ n')。

实现所需目标的另一种方法是使用Scanner类,如下所示:

package hra1;

public class Hra1 {

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

        Scanner scanner = new Scanner(System.in);

        for (i = 0; i < 4; i++)
        {
            // Scan the next token of input as an integer
            int a = scanner.nextInt();

            System.out.println(i);
        }

    }  
}

答案 4 :(得分:0)

System.in是一个InputStream - read()只读取一个字节。您的直接输入不止一个字节,因此在第一个输入中直接读取这两个值。 程序将尝试再次运行for循环以读取输入的下一个字节。这就是为什么当你给出一个超过1个字节的输入时,系统会尝试读取其他字节,system.out.println将被执行超过1次。