为何调用System.in.read()输入数字却得到不同输出数值?
关于System.in.read()输出“不同数字”的解惑
嘿,作为Java初学者碰到这个问题真的太常见啦!我来给你掰扯清楚为啥输入数字却得到另一个数字~
首先先看你的代码(我帮你格式化了下):
import java.io.IOException; public class MainClass { public static void main(String[] args) { int inChar; System.out.println("Enter a Character:"); try { inChar = System.in.read(); System.out.print("You entered "); System.out.println(inChar); } catch (IOException e){ System.out.println("Error reading from user"); } } }
核心原因:System.in.read()读取的是字符的ASCII码值
你输入的“数字”其实是字符形式的数字(比如你敲键盘输入的'5'是一个字符),而System.in.read()方法会读取这个字符对应的ASCII编码值,而不是字符本身代表的数字。
举几个直观的例子:
- 当你输入字符
'0',它的ASCII码是48,所以程序会输出48 - 输入
'5',ASCII码是53,输出就是53 - 输入
'9',ASCII码是57,输出就是57
这就是为啥你觉得“输入一个数字,输出另一个不同数字”的原因啦!
怎么得到你真正想要的数字?
如果你的目标是获取输入的数字本身(比如输入'5'就得到整数5),有两种简单的办法:
方法1:把ASCII码转换成对应数字
因为字符'0'到'9'的ASCII码是连续的(48到57),所以用读取到的ASCII值减去'0'的ASCII值就行:
// 在读取inChar之后加这行 int actualNumber = inChar - '0'; System.out.println("实际数字是:" + actualNumber);
比如输入'5'时,53 - 48 = 5,就能得到你想要的数字啦。不过这个方法只适用于输入单个数字字符的情况哦。
方法2:用更易用的Scanner类(推荐给初学者)
Java提供了Scanner类来更方便地处理用户输入,它可以直接读取整数、字符串等类型,不用自己处理ASCII码:
import java.util.Scanner; public class MainClass { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Enter a number:"); try { int number = scanner.nextInt(); System.out.println("你输入的数字是:" + number); } catch (Exception e) { System.out.println("请输入有效的数字哦!"); } finally { scanner.close(); } } }
这个方法更适合初学者,也能处理多位数的输入~
额外小知识点:System.in.read()的其他特性
- 它一次只能读取一个字节,如果你输入了多字符(比如"123"),第一次调用只会读取第一个字符'1'的ASCII码49
- 当你输入完按回车时,回车符(ASCII 13)和换行符(ASCII 10)也会被留在输入流里,如果后续再调用
System.in.read(),会读到这些控制字符哦
内容的提问来源于stack exchange,提问作者learner101
相关产品推荐
相关产品推荐

