输出的是1的acsii码吧,当作字符了
解决方案 »
- java.net.SocketException: java.net.ConnectException: Connection refused:connect
- java 程序爷们 有会 ocx的吗
- 自定义标签嵌套,父标签怎么访问自标签中的属性?
- 关于花生壳的使用!用过的朋友指点下!
- spring+jpa例子子出错,请教高手
- Extjs4表单提交问题????
- hibernate中文文档6.5节的问题
- 找工作前提问
- weblogic的部署描述符ejb-jar.xml与weblogic-ejb-jar.xml有什么区别?
- 十万火急:关于applet的疑问!!!
- 求j2ee的程序下载地址
- 学习J2EE,给一点建议吧!来者有分
输入2回车再输入2是822751754
输入11回车是825298186
好象在编译器中调试和在dos中运行结果还不一样,每次输入一个还不行,要输入两次才可以我把程序该成了如下: DataInputStream s = new DataInputStream(System.in);
int g=9;
try
{
g=s.readInt();
}
catch(Exception e)
{
System.out.println("wrong");
}
System.out.println(g);
}
可以肯定一点
g=s.readInt();
是不会报错得,int是4个字节,你输入一个字符才2个字节,也可能久是因为这个,我要连续输入两次(才凑上4个字节),他才出现结果。不知道是不是这样,请高人指点
非常明显,输入的是按字符的ascii码进入。如果不足四字节,认为读取没有完成。读取四个字节后,用这个四个字节组成int的byte.因此会有这样的结果,回车: 0xOA,1:0x31,.......
我输入:12,然后回车,buffer里面存储了四个数,为49,50,13,10,于是你可以发现这正是
"12"在加上回车的ascii码
getInt意思是说读取buffer里面的四个字节数,假如里面的数不够的话,比如你第一次
输入:1在加回车,那么buffer里面的数据只有三个有效:49,13,10,0;但是他是先读取字符数据,
所以读到0结束,因此此时位数不够4,那么还是readInt继续阻塞,直到读到四个字节数据为止。