一个java小疑问

[复制链接]
查看11 | 回复4 | 2009-4-9 23:14:43 | 显示全部楼层 |阅读模式
class A
{

public int f(int a,int b)

{

int t=a>b? b:a;

int i;

for(i=t;i>=1;i--)

if(b%i==0&&a%i==0)

return i;

}
}
请看这个类,f是求最大公约数的方法,我这样写编译的时候会提示缺少返回语句,请问这是怎么回事,感觉没什么问题的呀?
如果写成
class A
{

public int f(int a,int b)

{

int t=a>b? b:a;

int i;

for(i=t;i>=1;i--)

if(b%i==0&&a%i==0)

break;

return i;

}
}
就可以通过了,第一种写法有问题吗?
呵呵,知道了,谢谢各位,我在c++里写类似这种“没有返回值”的程序时是可以通过的,看来java还是要比c++严谨呀

回复

使用道具 举报

千问 | 2009-4-9 23:14:43 | 显示全部楼层
有问题,第一种写法是有条件返回,但是java编译要求是函数必须有相对应的返回,就是假设if为false就没有返回.所以应该再加一个return就对了这样也是对的:class A { public int f(int a,int b) { int t=a>b? b:a; int i; for(i=t;i>=1;i--) if(b%i==0&&a%i==0) {return i;} return 0;} } 第二种因为你的return在外面,所以无论if如何都会 返回i 就不会出错....
回复

使用道具 举报

千问 | 2009-4-9 23:14:43 | 显示全部楼层
f 要返回一个int型的数,第一个不能保证一定返回一个数...
回复

使用道具 举报

千问 | 2009-4-9 23:14:43 | 显示全部楼层
if为ture的时候有返回值,false的时候么有...
回复

使用道具 举报

千问 | 2009-4-9 23:14:43 | 显示全部楼层
如果你把你的if语句用{}起来. 则可以不用break不然i就会跟着你的i循环了多少次就会输出多少次..-...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行