gpt4 book ai didi

Java - 收到丢失返回错误

转载 作者:行者123 更新时间:2023-11-30 07:10:19 27 4
gpt4 key购买 nike

我上周开始学习 Java 类(class),我的作业之一是创建一个程序,利用我们迄今为止在类里面学到的知识来获取两个数字的 GCD(所以我的程序可能不是最有效的) 。这是我的程序。

import java.util.*;
public class Program {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
System.out.print("Enter an integer");
int num1 = console.nextInt();
System.out.print("Enter an integer");
int num2 = console.nextInt();
int gcd = factor(num1, num2);
System.out.println("The GCD is " + gcd);
}

public static int factor(int num1, int num2) {
int big = Math.max(num1, num2);
int small = Math.min(num1, num2);
int bigabs = Math.max(Math.abs(num1), Math.abs(num2));
int smallabs = Math.min(Math.abs(num1), Math.abs(num2));

if (smallabs == 0) {
return bigabs;
}
if ((bigabs == 1) || (smallabs == 1)) {
return 1;
}
for (int i = smallabs ; i >= 1; i--) {
if ((num1 % i == 0) && (num2 % i == 0)) {
return i;
}
}
// This is where I need a return statement
}
}

它无法编译,因为它缺少 return 语句。我相信这是因为需要返回类型的方法必须为该方法中的每个可能的分支声明一个返回语句(如果我错了,请纠正我)。我知道在任何情况下数字都会通过 for 循环的 if 语句,但该方法不知道这一点。所以我的问题是我应该放置什么返回语句?真的有关系吗?有人可以向我详细解释一下吗,因为我还没有学到很多东西。

最佳答案

我认为这里的“教训”不是直接的,如果你应该返回1;或者进一步修改你的循环。

这里的关键元素是您所写的:我知道在任何情况下数字都会通过 for 循环的 if 语句,但该方法不知道这一点。

但重点是:你的程序是算法的表达。该程序中的每一条语句都必须具有“绝对”意义。是的,有时编程语言是受到限制的;你必须写下一些东西才能让编译器满意。但这通常是一个坏兆头。这意味着您可能应该花更多时间思考您的代码。换句话说:任何程序都应该读起来尽可能“自然”。您只在程序中做有意义的事情。

因此,如果您了解您的方法必须在某个时刻从循环语句返回,并且永远不会到达方法的末尾,那么解决方案如下

public int whatever() {
... for ( ... {
return x;
}

throw new RuntimeException("will never be reached");

}

告诉“每个人”发生了什么事:编译器有办法处理丢失的返回;人类读者也很容易理解这个结构的目的。

关于Java - 收到丢失返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39323474/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com