在java中读取DataInputStream中的Integer用户输入?

时间:2013-06-26 17:43:56

标签: java datainputstream

我正在尝试使用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 个答案:

答案 0 :(得分:18)

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

  

读取四个输入字节并返回一个int值。设a-d为读取的第一到第四个字节。返回的值是:

(((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并查看它是否是您需要的。

答案 1 :(得分: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。根据{{​​3}}

但是,您应该查看 java docs

答案 2 :(得分:0)

更好的方法是使用Scanner

    Scanner sc = new Scanner(System.in);
    System.out.println("Enter your Age :\n");
    int i=sc.nextInt();
    System.out.println(i);

答案 3 :(得分: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);
}