为什么在方法中使用数学函数时返回语句会抛出错误

des4xlb0  于 2021-07-08  发布在  Java
关注(0)|答案(3)|浏览(267)

为什么return语句在方法中使用数学函数时抛出错误。

public class HCF_1 {

    static int hcf(int a, int b)
    {
        int res = Math.max(a,b);
        while(true)
        {
            if(res%a==0 && res%b==0)
                return res;
            else res++;
        }
        return res;
    }
    public static void main(String[] args) {

        System.out.println(hcf(5,25));
    }
}
sczxawaw

sczxawaw1#

public class HCF_1 {

        static int hcf(int a, int b)
        {
            int res = Math.max(a,b);
            while(true)
            {
                if(res%a==0 && res%b==0)
                    return res;
                else res++;
            }
            return res; //last line of the method hcf is unreachable
        }
        public static void main(String[] args) {

            System.out.println(hcf(5,25));
        }
    }

while循环是一个永无止境的循环,只在if块中提到的条件下转义,if块是一个 return 声明而不是 break 声明。因此,最后一行的方法hcf return res; 在任何情况下都无法到达。

gwbalxhn

gwbalxhn2#

这可能有帮助,也可能没有帮助,但是 while(true) 语句是真正的代码味道。您可以将此方法重写为:

public class HCF_1 {

   static int hcf(int a, int b)
   {
       int res = Math.max(a,b);
       while(res % a != 0 || res % b != 0)
           res++;
       return res;
   }
   public static void main(String[] args) {
       System.out.println(hcf(5,25));
   }
}

现在只有一个return语句,没有快捷方式。
注意操作 !(res % a == 0 && res % b == 0) 与…相同 res % a != 0 || res % b != 0 ,由于布尔逻辑的特性: ~(A AND B) == ~A OR ~B .

quhf5bfb

quhf5bfb3#

你的代码在 if-else 你生命中最后一行无法到达的原因 return res ,所以你必须做两件事:
拆下内部的回路 if 加上休息时间。
返回方法的最后一行 return res; ```
public class HCF_1 {

static int hcf(int a, int b) {
    int res = Math.max(a, b);
    while (true) {
        if (res % a == 0 && res % b == 0)
            break;
        else
            res++;
    }
    return res;
}

public static void main(String[] args) {

    System.out.println(hcf(5, 25));
}

}

相关问题