9

我正在尝试使用DataInputStream. 但这会显示一些垃圾整数值而不是给定值。

这是代码:

import java.io.*;
public class Sequence {
    public static void main(String[] args) throws IOException {
    DataInputStream dis = new DataInputStream(System.in);
    String str="Enter your Age :";
    System.out.print(str);
    int i=dis.readInt();
    System.out.println((int)i);
    }
}

输出是

输入您的年龄:12

825363722

为什么我会得到这个垃圾值以及如何更正错误?

4

4 回答 4

21

问题是它的readInt行为不像您预期​​的那样。它不是读取字符串并将字符串转换为数字;它将输入读取为 * bytes

读取四个输入字节并返回一个 int 值。让 ad 成为读取的第一个到第四个字节。返回的值为:

(((a & 0xff) << 24) | ((b & 0xff) << 16) |  
((c & 0xff) << 8) | (d & 0xff))

该方法适用于读取接口DataOutput的writeInt方法写入的字节。

在这种情况下,如果您在 Windows 中输入12然后输入,则字节为:

  • 49 - '1'
  • 50 - '2'
  • 13 - 回车
  • 10 - 换行

算一算,49 * 2 ^ 24 + 50 * 2 ^ 16 + 13 * 2 ^ 8 + 10 得到 825363722。

如果您想要一种简单的方法来读取输入,请检查Scanner并查看它是否是您需要的。

于 2013-06-26T17:47:25.867 回答
1

为了从中获取数据,DataInputStream您必须执行以下操作 -

        DataInputStream dis = new DataInputStream(System.in);
        StringBuffer inputLine = new StringBuffer();
        String tmp; 
        while ((tmp = dis.readLine()) != null) {
            inputLine.append(tmp);
            System.out.println(tmp);
        }
        dis.close();

readInt()方法返回此输入流的下四个字节,解释为 int。根据java文档

但是,您应该看看Scanner

于 2013-06-26T17:47:23.943 回答
0

更好的方法是使用Scanner

    Scanner sc = new Scanner(System.in);
    System.out.println("Enter your Age :\n");
    int i=sc.nextInt();
    System.out.println(i);
于 2013-06-26T18:00:46.657 回答
0
public static void main(String[] args) throws IOException {
DataInputStream dis = new DataInputStream(System.in);
String str="Enter your Age :";
System.out.print(str);
int i=Integer.parseInt(dis.readLine());
System.out.println((int)i);
}
于 2013-12-05T17:15:56.277 回答