为什么Number lower than 9
在我的控制台中打印两次,在下面的代码示例中?
public static void main(String[] args) throws java.io.IOException {
System.out.println("Input from keyboard should be '49'");
char e;
for (int a = 0; ; a++) {
e = (char) System.in.read();
if (e == 49)
break;
else
System.out.println("Use number lower than 9");
}
}
输入除数字1以外的任何内容时,这是输出:
run:
Input from keyboard should be '49'
2
Number lower than 9
Number lower than 9
基本上,我试图从控制台获取输入并将其存储在char e
中。输入1
后我得到的是值49
。这就是我在e == 49
上面的代码中使用的原因。我不知道如何只检索字符1
。接下来的事情是我使用无限循环强制输入请求特定字符,直到它正确的字符。
答案 0 :(得分:2)
当您在命令行中输入2
时,实际输入2\n
(\n
为换行符),当您按 Enter确认输入时或返回。
System.in.read()
在第一个循环周期中返回2
,在第二个循环周期中返回换行符,每次在标准输出上打印消息。
您可以通过跳过换行符来解决此问题:
for (int a = 0; ; a++) {
e = (char) System.in.read();
if (e == '\n')
continue;
if (e == 49)
break;
else
System.out.println("Use number lower than 9");
}
但是还有一些问题:你想要实现什么目标?如果比较基于字符的级别上的输入,49
等于不是数字49,而是等同于代码49的字符,即字符'1'
。
其次,如果你正在建立一个无限循环,你也应该这样写。 for循环会给出印象,循环将基于int a
而保留,但事实并非如此。要写一个无限循环,你可以写:
while (true) {
// do something
if (checksomething())
break;
}
答案 1 :(得分:0)
public static void main(String[] args) throws java.io.IOException {
System.out.println("Input from keyboard should be '49'");
char e;
Scanner s=new Scanner(System.in);
for (;;) {
e = s.next().charAt(0);
if (e == 49){
System.out.println("Yay");
break;
}else{
System.out.println("Use number lower than 9");
}
}
}
您可以只扫描字符串,但如果您需要字符,则上面的代码可以正常工作
答案 2 :(得分:0)
您的程序输出显示低于9的数字,因为它System.in.read()
返回输入的第一个字符的ASCII值,即'2',而不是49,它是50。
如果您想将整数作为输入,则可以使用此代码int i = new Scanner(System.in).nextInt();
答案 3 :(得分:0)
read()不读取数字,它读取一个字节并返回其值 作为一个int。如果你输入一个数字,你会得到48 +那个数字,因为 数字0到9在ASCII中具有值48到57 编码
for (;;) {
int e = System.in.read(); // char e = (char)System.in.read();
if (e == 49) // if (e == '1')
break;
else
System.out.println("You entered something else than character 1");
}
Enter 被计为一个字符,因此另一个字符条目。
如果你想存储只是字符1
,那就没有意义了。
if (e == 49) {
//Presume that is character `1` and do what operation you want as it is.
System.out.println("You enter number 1");
}
相反,您应该检查输入是否正确,然后将其转换为字符。您可以通过检查输入是否在48
和57
之间来检查输入,如果我在引号中写的是。 请记住,如果您输入例如57被计为两个输入(5和7)。
char ch; int e;
if (e >= 49 && e <= 57) {
ch = (char)e;
System.out.println("You enter number " + ch);
}
这一切都可以通过Scanner.nextInt()
轻松完成,正如其他人提到的那样,并轻松找到下一个int数字,但要小心,{{1以不同的方式工作,它检查标记而不是字符,这意味着分隔符默认为空格(Scanner
)。因此,如果您输入" "
(并按 Enter ),则会将其转换为数字57
。
方便的是,如果您输入57
(并按 Enter ),它仍会作为输入dogs 57
获取并跳过57
。另一个方便的方法是dogs
,因此您可以在hasNextInt()
循环中使用它来获取多个数字输入。
您还可以更改分隔符while
,如果要获取分隔符,请将其设置为useDelimiter()
空字符串。