以下是我做的一个课后题,可是为什么读入的数不是输入的数呢?
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));
   }
}

解决方案 »

  1.   

    read读的是一个byte,
    用readline吧
      

  2.   

    出错的原因很简单,你用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);
    }
      

  3.   

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

  4.   

    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));
       }
    }
    楼主把那段异常代码注销掉
    得到的应该是你想要的结果吧
      

  5.   

    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();就完全可以了,^_^。
     
        祝你成功!
      

  6.   

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