You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:35:48