日期:2014-05-20  浏览次数:20723 次

关于System.in的标准输入的问题
Java 的输入输出太烦了,像C++,加iostream .h 头文件后,cin、cout就直接可以输入输出,如对于输入的变量,自动转换成所定义的格式。

  int a ;
  cin>>a;
  直接,所输入的数就是a的值。如输入123,则a的值为123.
而对于java,对于标准输出流还好,System.out.print();就可以输出所需要输出的;但对于标准输入流,就是在太麻烦了。
  byte[] a = new byte[];
  System.in.read(a);
得到的a是字节数组,均是ascii编码的数值,如果我想输入数字123,只能先使字节数组为
“1”“2”“3”“ENTER”的ascii码,“1”的ascii码是30,得到{30,31,32,10},然后把字节数组转成字符数组{‘1’,‘2’,‘3’};字符数组再转换成String字符串 “123”;再转成Integer对象,new Integer(String) ,最后使用Integer.intValue()方法把它转成数字。
  实在是太麻烦了
大家有没有什么好方法?


------解决方案--------------------
你用System.in构造一个ObjectInputStream,然后调用readInt试试看。
------解决方案--------------------
用Integer.parseInt(String s)能少转化一步……
------解决方案--------------------
可能因为Java本来就不适合做命令行程序的原因吧?不过java 1.5可以用Scanner,还是很方便的:
Java code

// 需import java.util.Scanner;
Scanner scanner = new Scanner(System.in);
scanner.nextInt();  // 读int
scanner.nextDouble();  // 读double
scanner.nextLine(); // 读一行

------解决方案--------------------
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
//读取数据速度快

------解决方案--------------------
探讨
貌似不行

Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: 340A0D0A
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:783)
at java.io.ObjectInputStream. <init>(ObjectInputStream.java:280)
at javaio.main(javaio.java:13)


------解决方案--------------------
随便问一下,为什么在输入int,double,String型的字符的时候,用空格隔开和用回车隔开,结果不相同
------解决方案--------------------
LZ你用的是最低层的字节流啊,当然难用了。。。
我觉得如果是简单的小程序的输入的话,直接使用Scanner比较方便,他支持任何数据的输入;
而大一点的应用的话,用io流,感觉用得比较多的是DataInputStrean,BufferedReader
等来封装System.in;