gpt4 book ai didi

java - 数据输入流困惑

转载 作者:行者123 更新时间:2023-12-01 06:04:07 26 4
gpt4 key购买 nike

为什么当这段代码运行时,如果你输入“3”作为输入,它不会将“Print”写入控制台,但“33”会写入“Print”?

public static void main(String[] args) throws Exception
{
DataInputStream input;
int any;

input = new DataInputStream(System.in);
any = input.readInt();
System.out.println("Print");
}

最佳答案

当提示输入时,按键盘上的 Enter 会附加换行符 \n。因此,输入 333 并按 Enter 会产生存储在 any 中的以下值:858993418

查看DataInputStream#readInt的源代码,我们看到以下内容:

public final int readInt() throws IOException {
int ch1 = in.read();
int ch2 = in.read();
int ch3 = in.read();
int ch4 = in.read();
if ((ch1 | ch2 | ch3 | ch4) < 0)
throw new EOFException();
return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));
}

因此,我们可以使用以下公式计算any:

('3' << 24) + ('3' << 16) + ('3' << 8) + '\n'

我不知道为什么你说 33 有效,因为仅输入 33 并按 Enter 不会提供 DataInputStream 有四个字节,因此它继续等待另一个字节。您可以按Enter两次,然后就会打印。您的 IDE 可能会添加回车符 \r 以及换行符 \r,因此为什么 33 适合您而不适合我在 Intellij 上。

关于java - 数据输入流困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49471829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com