【问题标题】:Entering a integer value using DataInputStream使用 DataInputStream 输入整数值
【发布时间】:2012-07-22 07:07:30
【问题描述】:

在使用 DataInputStream 输入任何值时,我必须按两次 Enter 键,如果我输入任何一位数字......并且在下面写的代码 sn-p 中

public void print()
   {
       DataInputStream in = new DataInputStream(System.in);
       try
       {
           System.out.println("Enter a digit");
           int n=in.readInt();
           System.out.println(n);
        }
        .
        .
        .
        .

在打印 n 的值时,它通常会显示一些意想不到的值...使用 BufferedReader 不会导致同样的问题...

当输入的值为 233 时,它显示 842216202 作为输出...代码中可能出现的错误是什么...需要帮助...

【问题讨论】:

  • SO 上的一个常见错误来源是不检查类是用于二进制还是文本,或者尝试将它们混合在一起。

标签: java datainputstream


【解决方案1】:

DataInputStream 读取二进制数据。当您输入[2, 3, 3, \n] 时,它等于[0x32, 0x33, 0x33, 0x0A](大端),0x3233330A842216202(十进制格式)。

更改为Scanner,它读取文本并具有将字符转换为(例如)整数的说服方法,您的示例使用Scanner

Scanner in = new Scanner(System.in);
try {
    System.out.println("Enter a digit");
    int n = in.nextInt();
    System.out.println(n);
} ...

【讨论】:

    【解决方案2】:

    根据the Javadocs for DataInputStreamreadInt() 方法将从底层输入流中准确读取四个字节。如果您输入的数字长度小于四个字节(例如一位数),则读取将继续,直到它读取四个字节。这意味着它将包括您在按下“enter”键时输入的换行符,其 Unicode 编码值将被解释为整数。这可能是您的错误的根源。

    【讨论】:

      猜你喜欢
      • 2013-06-23
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 2023-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多