public class factorial {
public static void main(String[] args)
{
System.out.println("Please enter a int number:");
int b = 0;
try
{
b =System.in.read();
}
catch(Exception ex)
{
ex.printStackTrace();
}

System.out.println(mathod(b));
} public static long mathod (int a)
{
if(a == 1)

return 1l;

else 
{
return a*mathod(a-1);
}
}
}
我处学者 写一个简单的递归程序 可以正常运行  就是运行结果看不出来个所以然来  清高手指点?
若注释
System.out.println("Please enter a int number:");
int b = 0;
try
{
b =System.in.read();
}
catch(Exception ex)
{
ex.printStackTrace();
}

这个会运行出来我想要的结果 错误结果的举例  假如输入5  输出为 -5270900413883744256请高手看看为什么会是这样的结果?

解决方案 »

  1.   

    import java.io.BufferedReader;
    import java.io.InputStreamReader;public class factorial {
        public static void main(String[] args)
        {
            System.out.println("Please enter a int number:");
            int b = 0;
            BufferedReader keyboard=new BufferedReader(new InputStreamReader(System.in));
            try
            {
            b =Integer.parseInt(keyboard.readLine());
            }
            catch(Exception ex)
            {
                ex.printStackTrace();
            }
            System.out.println(b);
            System.out.println(mathod(b));
        }        public static long mathod (int a)
            {
                if(a == 1)
                
                    return 1l;
                
                else 
                {
                    return a*mathod(a-1);
                }
            }
    }
      

  2.   

    System.in.read()这条语句默认读出的数据是char的,然后就转换成int数据,所以你的(int)转型不用都可以,写成:a=System.in.read(); 结果还是一样的。
      

  3.   

    read()每次读出的一个byte是对应8位ASCII码的
    5对应的码值是53
    53的阶乘就溢出了
      

  4.   

     System.out.println("Please enter a int number:");
            byte[] b =new byte[10];
            try
            {
            System.in.read(b);
            }
            catch(Exception ex)
            {
                ex.printStackTrace();
            }
            String str=new String(b);
            int num=Integer.parseInt(str.replace("\n\r", "").trim());         
            System.out.println(mathod(num));
    修改一下就可以了
      

  5.   

    JDK1.5以后应该用Scanner类读入数据,很方便,请参才Doc.
      

  6.   

            try
            {
            b =System.in.read()-'0'; // 换成数字0-9
            }
            catch(Exception ex)
            {
              
      

  7.   


    public class fac {    public static void main(String[] args) {
            System.out.println("Please enter a int number:");
            int b = 0;
            try {
                b = System.in.read();
                System.out.println(b);
                b = b - '0';
                System.out.println(b);
            } catch (Exception ex) {
                ex.printStackTrace();
            }        System.out.println(mathod(b));
        }    public static long mathod(int a) {
            return a == 1 ? 1 : a * mathod(a - 1);
        }
    }
      

  8.   

    return 1
    不是return 11