令人头痛的结果

wanghua623 2007-12-28 09:58:45
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

请高手看看为什么会是这样的结果?


...全文
146 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghua623 2008-01-01
  • 打赏
  • 举报
回复
楼上我的是 return 1L
CHR_WHY 2007-12-30
  • 打赏
  • 举报
回复
return 1
不是return 11
waterborn 2007-12-29
  • 打赏
  • 举报
回复

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);
}
}
oliveyuganfei 2007-12-29
  • 打赏
  • 举报
回复
楼上方法不可取.大于9不就完了?
wanghua623 2007-12-29
  • 打赏
  • 举报
回复
谢谢楼上大侠的指点
老紫竹 2007-12-29
  • 打赏
  • 举报
回复
        try
{
b =System.in.read()-'0'; // 换成数字0-9
}
catch(Exception ex)
{
powerfulzyh 2007-12-28
  • 打赏
  • 举报
回复
JDK1.5以后应该用Scanner类读入数据,很方便,请参才Doc.
只爱西瓜 2007-12-28
  • 打赏
  • 举报
回复
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));
修改一下就可以了
dracularking 2007-12-28
  • 打赏
  • 举报
回复
read()每次读出的一个byte是对应8位ASCII码的
5对应的码值是53
53的阶乘就溢出了
梅小西Echo 2007-12-28
  • 打赏
  • 举报
回复
System.in.read()这条语句默认读出的数据是char的,然后就转换成int数据,所以你的(int)转型不用都可以,写成:a=System.in.read(); 结果还是一样的。
梅小西Echo 2007-12-28
  • 打赏
  • 举报
回复
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);
}
}
}

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧