如何正确使用System.in.read()获取用户输入的整数值
问题根因
System.in.read()的设计逻辑是单次读取输入流中的单个字节,返回值为对应字符的ASCII编码数值:- 第一次输出50的原因:输入"24"时,第一个被读取的字符是'2',其ASCII编码的十进制值就是50,直接输出int类型的返回值就会得到50,剩余的'4'、换行符都还留在输入缓存中未被读取。
- 第二次输出2的原因:将读取到的int值强转为char,只是把ASCII码50转成了对应的字符'2',本质还是只读取了第一个输入字符,不会自动读取后续的数字字符,因此只能输出2。
正确实现方案
Java中处理控制台输入优先使用java.util.Scanner工具类,会自动处理多字符输入、类型转换的逻辑,无需手动编码处理:
import java.util.Scanner; public class AgeInputTest { public static void main(String[] args) { System.out.println("Hallo " + args[0]); System.out.println("Wie alt bist du?"); // 绑定控制台输入流 Scanner inputScanner = new Scanner(System.in); // 直接读取输入的整数值,自动识别连续数字字符 int alter = inputScanner.nextInt(); System.out.println("Du bist " + alter + " Jahre alt."); inputScanner.close(); } }
如果有读取整行文本的需求,可以调用inputScanner.nextLine()方法,会读取输入的整行内容,自动过滤末尾的换行符。
内容的提问来源于stack exchange,提问作者BigChicken97
相关产品推荐
相关产品推荐

