我写了一个循环,但它没有用。它应该问我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
答案 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次。