输出的是1的acsii码吧,当作字符了

解决方案 »

  1.   

    输入1回车再输入1是822751498
    输入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个字节),他才出现结果。不知道是不是这样,请高人指点
      

  2.   

    825298186->0x31310D0A  ascii码的"11"+回车换行的ascii码符
      

  3.   

    不是吧。我在jbuilder下,输入11后要按两次回车才出现825297418,即0x31,0x31,0x0A,0x0A
    非常明显,输入的是按字符的ascii码进入。如果不足四字节,认为读取没有完成。读取四个字节后,用这个四个字节组成int的byte.因此会有这样的结果,回车: 0xOA,1:0x31,.......
      

  4.   

    其实你完全可以使用debug工具跟踪一下,这是我跟踪出来的结果:
    我输入:12,然后回车,buffer里面存储了四个数,为49,50,13,10,于是你可以发现这正是
    "12"在加上回车的ascii码
    getInt意思是说读取buffer里面的四个字节数,假如里面的数不够的话,比如你第一次
    输入:1在加回车,那么buffer里面的数据只有三个有效:49,13,10,0;但是他是先读取字符数据,
    所以读到0结束,因此此时位数不够4,那么还是readInt继续阻塞,直到读到四个字节数据为止。
      

  5.   

    我想要说的一点是,不论我们从键盘上输入什麽,输入的字符都将以本地形式的编码(对于我们而言是GBK,而GBK对ascii字符以单字节编码)进入输入流,所以,若只输入两个数字加一个回车符,只有三个字节进入输入流,但是在JDK下,DataInputStream.readInt()确实可在只输入两个数字和加一个回车符的情况下完成读取四个字节的任务。这是为什麽啊?