Java 试图通过条件语句返回整数值将导致错误
我刚完成一项作业,我一直遇到下面代码的错误。“此方法必须返回int类型的结果。”根据我所做的研究,这是因为编译器需要一个默认的返回值,即使它不可能达到,但是如果我这样做,它与调用下面方法的方法冲突。此外,我还遇到了一个帖子,有人建议我扔掉它,我也尝试了例外,但它并没有给我带来任何运气Java 试图通过条件语句返回整数值将导致错误,java,Java,我刚完成一项作业,我一直遇到下面代码的错误。“此方法必须返回int类型的结果。”根据我所做的研究,这是因为编译器需要一个默认的返回值,即使它不可能达到,但是如果我这样做,它与调用下面方法的方法冲突。此外,我还遇到了一个帖子,有人建议我扔掉它,我也尝试了例外,但它并没有给我带来任何运气 public int CompareTo(HugeInteger h) { if(h.HugeInteger.length() > this.HugeInteger.length()) {
public int CompareTo(HugeInteger h) {
if(h.HugeInteger.length() > this.HugeInteger.length()) {
return -1;
}
else if(h.HugeInteger.length() < this.HugeInteger.length()) {
return 1;
}
else if(h.HugeInteger == this.HugeInteger) {
return 0;
}
else {
for(int i = 0; i < h.HugeInteger.length(); i++) {
if(h.HugeInteger.charAt(i) > this.HugeInteger.charAt(i)) {
return -1;
}
else if(h.HugeInteger.charAt(i) < this.HugeInteger.charAt(i)) {
return 1;
}
else {
throw new IllegalArgumentException("Something just went really wrong.....");
}
}
}
}
public int CompareTo(HugeInteger h){
if(h.HugeInteger.length()>this.HugeInteger.length()){
返回-1;
}
else if(h.HugeInteger.length()this.HugeInteger.charAt(i)){
返回-1;
}
else if(h.HugeInteger.charAt(i)操作符检查实例是否相等。如果您有两个具有相同数据的类实例,它将返回false
即使使用equals
方法,如果没有执行for循环(或者如果删除throw
语句,如果所有字符都相同),编译器也会检测到该方法可以在没有返回类型的情况下结束。因此,您必须在方法末尾添加一个return
或throw
语句
要解决您的问题,您应该添加返回0代码>在方法的末尾,如果两个实例相等,就会到达。for循环将不会执行超过一次。这很简单,在方法声明中,您已经声明您的方法返回一个int,因此您必须兑现该承诺。如果要抛出异常,请在任何循环或If/else之外的最末端执行clause@Snowy_1803我刚刚意识到了这一点,并取消了投掷。但是,问题仍然存在。如果两个实例相等,而不是同一个实例,会发生什么情况?@JoakimDanielson好的,这是有道理的,我刚刚想到了一种使用默认返回实现方法的方法,谢谢!!但这并不是为什么会发生此编译器错误。发生此错误是因为编译器认为该方法可以在没有返回类型的情况下结束,如注释中所述。我的回答可能不清楚……这与==
vs.equals
无关,所以你的回答毫无意义。我是在回答OP的最后一条评论。问题只与编译器进行的结构分析有关。给定显示的代码(length()
就编译器而言可能为零),for循环的循环体可能执行0次或更多次,因此存在一个不会返回值也不会突然结束(抛出异常)的执行路径,因为它从未进入循环体。