package org.test;import java.io.IOException;public class nFactorial {
long f = 0;
long ff(int n) {
if(n<0) System.out.printf("n<0,input error");
else if(n==0||n==1) f=1;
else f=ff(n-1)*n;
return f;
}

public static void main(String[] args) {
nFactorial nf = new nFactorial();
try {
System.out.println(nf.ff(System.in.read()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}这是一个计算阶乘的递归算法,经过调试发现,当输入为2的时候n=50;当输入为4的时候n=52。这是为什么呢?
System.in.read()这个方法没怎么用过,是这个问题吗?

解决方案 »

  1.   

    是你的输入的第一个字符的getBytes()值。并且取第一个字节。如果第一个字节不是0-255,转换到0-255。
    你可以用-1和中国来测试。
    所以2 getBytes()是50……
      

  2.   


    package org.test;import java.io.IOException;public class nFactorial {
        long f = 0;
        long ff(int n) {
            if(n<0) System.out.printf("n<0,input error");
            else if(n==0||n==1) f=1;
            else f=ff(n-1)*n;
            return f;
        }
        
        public static void main(String[] args) {
            nFactorial nf = new nFactorial();
            java.util.Scanner s = new java.util.Scanner(System.in);
            try {
                System.out.println(nf.ff(s.nextInt()));
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
      

  3.   

    System.in.read();的工作就是依次从这个缓冲区中读取下一个字符的ascii码!