某些循环的java for循环实现问题

时间:2017-09-26 02:11:30

标签: java

我为某些程序提交了我的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;
}

3 个答案:

答案 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;
}

是的,有一些问题:

  1. 当X变为0 =&gt; throw ArithmeticException =&gt;必须更改为for(int x = a; x > 0; x--)
  2. 在最好的实践中,你不会在方法中多次回归。您应该为结果创建一个承载对象,然后在方法结束时返回。 =&GT;易于维护/明确代码
  3. 重复return x。你怎么编译这个来源?没门!