【发布时间】:2021-10-12 09:26:46
【问题描述】:
我尝试使用 System.in.read() 来获取用户的年龄。我的问题是,如果我写“24”,它会给我输出“你 50 岁”。我搜索了一下,发现它与编码有关。所以 24 映射到 50。
有人建议将整数转换为字符。所以它应该工作。但这次我输入 24 时,我得到的答案是“你 2 岁”。
我想要的是,我得到“你 24 岁”的答案。我该怎么做?
我的代码如下: 第一次尝试
public static void main(String[] args) throws IOException {
System.out.println("Hallo " + args[0]);
System.out.println("Wie alt bist du?");
int alter = System.in.read();
System.out.println("Du bist " + alter + " Jahre alt.");
}
输出:“你已经 50 岁了。”
第二次尝试:
public static void main(String[] args) throws IOException {
System.out.println("Hallo " + args[0]);
System.out.println("Wie alt bist du?");
char alter = (char) System.in.read();
System.out.println("Du bist " + alter + " Jahre alt.");
}
输出:“你 2 岁。”
小注:“Alter”在德语中表示年龄。
我希望有人可以帮助我并理解这个问题。如果我可以改进一些东西,请告诉我。将不胜感激。
【问题讨论】:
-
是否必须使用
System.in.read()?因为在我看来还有其他更好、更容易获得用户输入的方法,比如使用扫描仪。 -
不,但我想用 'System.in.read()' 试试。只是出于好奇。
-
我同意@OHGODSPIDERS 的观点,认为有更好的方法,我只是不认为
Scanner是其中之一 ;-)System.in.read读取单字节数据,因为System.in是InputStream。InputStream用于读取二进制数据(或者如果您不关心数据是什么,而只想将其从一个地方移动到另一个地方)。要阅读文本(例如用户输入的内容),您应该使用Reader。 -
字符“2”的 ASCII 或 Unicode 值为 50。您正在寻找字符串中的行输入。我建议尝试Console,而不是更频繁地将 System.in 包装在 Scanneer 中的解决方案。请注意,您可能必须在命令行中运行应用程序,而不是 IDE。
-
啊。现在我看到了问题。当我输入 24 时,它只读取 2 而不是整数。所以这个方法不是为了做我想做的。
标签: java encoding integer character system.in