编译器在提供一个请求时返回语句

时间:2013-12-30 17:43:16

标签: java

这应该是结果,一个小程序找到等式的答案:

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作为返回类型。:

http://i41.tinypic.com/s62a06.jpg

3 个答案:

答案 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编辑器中内联编写而没有验证。