CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

JAVA学习中....有个问题大家给点帮助!

楼主hotstud(灰色吉它手)2005-09-22 22:48:45 在 Java / J2SE / 基础类 提问

以下是我做的一个课后题,可是为什么读入的数不是输入的数呢?  
  i=System.in.read();  
  为什么读的不是输入的数???  
  class   Chapter32  
  {  
      static   int   ternary(int   x)  
      {  
      return   x<10   ?   x*100:x+10;  
      }  
      static   int   alternative(int   x)  
      {  
      if   (x<10)  
            return   x*100;  
      else  
            return   x+10;        
      }  
      public   static   void   main(String[]   args)  
      {  
      int   i=10;  
      try  
      {i=System.in.read();  
      }catch   (Exception   e){};  
      System.out.println("x="+i);  
      System.out.println("ternary:"+ternary(i));  
      System.out.println("alternative:"+alternative(i));  
      }  
  } 问题点数:20、回复次数:8Top

1 楼believefym(feng)回复于 2005-09-22 23:06:50 得分 0

read读的是一个byte,  
  用readline吧Top

2 楼liwenchao()回复于 2005-09-22 23:09:06 得分 5

出错的原因很简单,你用int   n=(int)System.in.read()所读取是字符的ASCII码值,而不是实际的整数值,故出现了错误,两个问题都是这个情况!  
  建议你先把它们读入一个buf中,而后再进行转换!譬如:  
  public   static   void   main(String   args[])   throws   IOException  
  {  
                                  int   n;  
                                  byte[]   buf=new   byte[20];  
                                  System.out.println("Please   the   value   of   n:");  
                                  System.in.read(buf);  
                                  int   n=Integer.parseInt(new   String(buf).trim());  
                                  System.out.println("n="+n);  
  }Top

3 楼wanghao233(啊!飞碟)回复于 2005-09-22 23:11:49 得分 0

学习。Top

4 楼rainly1985(不在彷徨)回复于 2005-09-22 23:12:54 得分 0

读入的是字符,你要把它转换成int   啊Top

5 楼yunjixiaoxiang(被鱼抛弃的猫)回复于 2005-09-23 01:29:02 得分 5

import   java.io.*;  
  class   Chapter32  
  {  
      static   int   ternary(int   x)  
      {  
      return   x   <   10   ?   x*100   :   x   +   10;  
      }  
      static   int   alternative(int   x)  
      {  
      if   (x   <   10)  
            return     x   *   100;  
      else  
            return     x   +   10;        
      }  
      public   static   void   main(String[]   args)  
      {  
      int   i=10;  
      /**try  
      {  
      i=System.in.read();  
      }  
      catch   (IOException   e){}  
      */  
      System.out.println("x="+i);  
      System.out.println("ternary:"+ternary(i));  
      System.out.println("alternative:"+alternative(i));  
      }  
  }  
  楼主把那段异常代码注销掉  
  得到的应该是你想要的结果吧Top

6 楼buleleaf01()回复于 2005-09-23 12:23:49 得分 0

i=System.in.read();这是得到的是数字,因为java为了发展其全球性,字符使用的是16位的char型,范围是0~65535,和int型(32位)兼容。也就是经常说得Unicode编码,这就能支持世界上所有的文字,所以无论你在键盘上输入什么数字,其到达计算机内依旧是数字,而且是Unicode编码的数字。  
          比方说,如果你在键盘输入1,那么如果用System.out.print输出的话,将得到49,因为1在Unicode中的编码是49,所以如果你想得到你要的准确结果的时候,一定要造型。  
          本例中你需要得到准确的数字,因为是数字,又和int兼容所以如果你的这句改成这样:  
               
                      i=(int)System.in.read();  
   
  就完全可以了,^_^。  
     
          祝你成功!Top

7 楼buleleaf01()回复于 2005-09-23 12:27:49 得分 10

不,上面还有错误  
  应该是:  
   
  i=(char)System.in.read()//这是造型得到输入的字符  
  (int)i;  
  然后就可以了  
  不好意思Top

8 楼xiaomu528(小木)回复于 2005-09-23 12:36:14 得分 0

学习中.....Top

相关问题

  • 请高手帮助指导一下学习JAVA的方法与经典书籍
  • JAVA学习
  • java学习
  • 学习Java
  • 给我一个学习Java的理由
  • 给点java的学习建议
  • 各个高手看看这个问题!本人第一次学习java所以要各位高手的帮助。。
  • java技术群13134848,拒绝初学者。大家尽情的讨论和学习、帮助
  • java技术群13134848,拒绝初学者。大家尽情的讨论和学习、帮助
  • java技术群13134848,拒绝初学者。大家尽情的讨论和学习、帮助

关键词

  • 是输入的数

得分解答快速导航

  • 帖主:hotstud
  • liwenchao
  • yunjixiaoxiang
  • buleleaf01

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo