我为某些程序提交了我的Java作业。我的老师评论说这段代码存在一些问题。我不知道这是什么意思?有什么想法吗?
我提交的代码如下所示:
int FunctionOne(int a, int b) {
for(int x = a; x >= 0; x--) {
if (a % x == 0 && b % x == 0) {
return x;
}
}
return 1;
}
注意:他给了我一个程序,他没有提到它的作用,并告诉我修复这些行的错误。
我也试图找出它的作用。但我没有任何线索。
更新:有bug的原始代码如下所示:
integer FunctionOne(int a int b) {
for(float x = a; x >= 0; x--) {
if (a % x == 0 && b % x == 0) {
return x;
return x;
}
}
return 1;
}
答案 0 :(得分:2)
让我们查看您的代码。
integer FunctionOne(int a int b) {
什么是integer
?将其更改为int
。
坚持......逗号在哪里?在参数之间加上逗号
for(float x = a; x >= 0; x--) {
你为什么使用花车?使用int
。此外,一旦x
到达0
,% x
将导致除以零错误,; x > 0;
if (a % x == 0 && b % x == 0) {
return x;
return x;
不要重复退货声明...
}
}
return 1;
}
最终代码应为:
int FunctionOne(int a, int b) {
for(int x = a; x > 0; x--) {
if (a % x == 0 && b % x == 0) {
return x;
}
}
return 1;
}
(我假设这是一个GCD
函数)
如果这是GCD功能,请将其用于将来参考:
int GCD(int a, int b) {
while (true) {
if (b < a) {
int t = a; a = b; b = t;
}
if (a == 0) return b;
int t = a; a = b - a; b = a;
}
}
速度更快(Euclid算法)。
答案 1 :(得分:0)
integer FunctionOne(int a int b) {
for(float x = a; x >= 0; x--) {
if (a % x == 0 && b % x == 0) {
return x;
return x;
}
}
return 1;
}
我能想到的一些观点:
为什么要返回两次相同的值,只返回一次。
你正在使用float in for循环,你可以使用二进制搜索,for循环不适用于这些类型的东西。
我建议您使用二分搜索。
如果您想了解二进制搜索,可以使用此链接。
https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search
答案 2 :(得分:0)
int FunctionOne(int a, int b) {
for(int x = a; x >= 0; x--) {
if (a % x == 0 && b % x == 0) {
return x;
}
}
return 1;
}
是的,有一些问题:
for(int x = a; x > 0; x--)
return x
。你怎么编译这个来源?没门!