这应该是结果,一个小程序找到等式的答案:
a*x + b*y + c*z = d
我还在研究算法,但是当我有一个算法时,它要求我给出一个返回语句。或者编译器是否说过,因为当if-condition的求值为false时,可能没有执行return语句?
public static String zoekAlleOplossingen(int a, int b, int c, int d,
int begingrens, int eindgrens) {
int y = begingrens, z = begingrens;
for (int x = begingrens; x < eindgrens; ++x) {
if (((a*x) + (b*y) + (c*z)) == d) {
return "" + a + "*" + x + " + " + b + "*" + y + " + " + c + "*" + z
+ " = " + d + "";
}
}
}
对于那些询问我为什么使用退货的人(有人请嵌入图片)。这是一个UML图,您可以清楚地看到本练习中期望在此方法中使用String作为返回类型。:
答案 0 :(得分:3)
“或编译器是否说过,因为当if-condition的评估为false时,可能无法执行return语句?”
正确,即使条件失败,编译器也希望总是有一些return语句。这就是你得到这个编译问题的原因。
答案 1 :(得分:0)
如果您的if
语句未评估为true,那么您将无法获得return语句。当if
语句的计算结果为false时,您需要添加一个处理该案例。
public static String zoekAlleOplossingen(int a, int b, int c, int d, int begingrens, int eindgrens){
int y=begingrens,z=begingrens;
for (int x=begingrens;x<eindgrens;++x){
if ( ((a*x)+(b*y)+(c*z))==d){
return ""+a+"*"+x+" + "+b+"*"+y+" + "+c+"*"+z+" = "+d+"";
}
return "Didn't Work"; //Add a default return string here
}
}
答案 2 :(得分:0)
你有一个return语句但它只在满足if条件时执行。因此,有时执行将导致无法返回。编译器注意到并且不会让你做错。试试这个:
public static String zoekAlleOplossingen(int a, int b, int c, int d, int begingrens, int eindgrens){
int y=begingrens,z=begingrens;
String output="";
boolean isFirst=true;
for (int x=begingrens;x<eindgrens;++x){
if ( ((a*x)+(b*y)+(c*z))==d){
if(isFirst){
isFirst=false;
}else{
output+="\n";
}
output+= ""+a+"*"+x+" + "+b+"*"+y+" + "+c+"*"+z+" = "+d+"";
}
}
return output;
}
这是你问题的简单答案。现在提示。
一般来说,从你的方法中获得一条出路是明智之举。它减轻了调试的痛苦。因此,即使您看到其他程序员的代码具有多个返回,请尝试避免它。
如果要连接字符串。使用StringBuilder,因为它表现更好。
StringBuilder buffer=new StringBuilder();
buffer.append(a)
.append("*")
.append(x)
.append("+")
.append(b)
.append("*")
.append(y)
.append("+")
.append(c)
.append("*")
.append(z)
.append("=")
.append(d);
我猜你是想在单一视线中注意到,也许是因为你正在打印字符串,条件得到满足。我会按如下方式编写方法并在外面执行for循环。
public static String zoekAlleOplossingen(int a, int b, int c, int d, int begingrens, int eindgrens){
int y=begingrens,z=begingrens;
StringBuilder buffer=new StringBuilder();
buffer.append(a)
.append("*")
.append(x)
.append("+")
.append(b)
.append("*")
.append(y)
.append("+")
.append(c)
.append("*")
.append(z)
.append("=")
.append(d);
buffer.append("; is ").append((a*x)+(b*y)+(c*z)==d));
return buffer.toString();
}
最后,这段代码可能不仅仅是用于测试。当你有空闲时间看看JUnit。你不必再打印出来。
注意:对于所有代码,请检查格式良好,我已经在stackoverflow编辑器中内联编写而没有验证。