2016-06-13 49 views
0

我有一个方法,它将一个整数数组作为输入并输出一个字符串,说明哪种类型的三角形如果参数的长度为3,则它们形成,否则输出“无效”。Eclemma:如果方法中的语句覆盖了所有可能的输入,但eclemma标记了永远不会到达的结尾处的返回语句

public class Triangle { 
     public String typeOf(int[] args) { 
      if (args.length < 3) return "invalid"; // invalid 
      if (args[0] == args[1] && args[1] == args[2]) return "equilateral"; 
      if (args[0] == args[1] && args[0] != args[2]) return "isosceles"; 
      if (args[0] == args[2] && args[0] != args[1]) return "isosceles"; 
      if (args[1] == args[2] && args[0] != args[1]) return "isosceles"; 
      if (args[0] != args[1] && args[0] != args[2] && args[1] != args[2]) return "scalene"; 
      return "Error all the tests failed"; 
     }   
    } 

问题是最终返回语句“return”错误所有的测试都失败了“;”因为前面的陈述涵盖了所有可能的输入,因此无法达到。这导致Eclemma显示丢失的指令,但我不能把它拿出来,因为我得到一个错误,说它必须返回字符串类型的结果。有没有办法让Eclemma忽略这个特定的陈述或在我的测试中覆盖它的方法? Tahnks

回答

0

改变你的算法在最后有一个返回语句。然后让每个if条件将其结果设置为将返回的字符串。如果您担心短路后的检查,一旦你知道答案,把它们变成否则,如果

例如:

public String typeOf(int[] args) { 
    String result = "Error all the tests failed"; 
    if (args.length < 3) result = "invalid"; // invalid 
    else if (args[0] == args[1] && args[1] == args[2]) result = "equilateral"; 
    // ..skipping a few.. 
    else result = "scalene"; 
    return result; 
} 
0

你把所有可能的情况中,如果条件匹配,它永远不会到达最终回报声明。

而是有多个return语句,你可以做以下

public String typeOf(int[] args) { 
    String str = "isosceles"; 
    if (args.length < 3) 
     str = "invalid"; // invalid 
    else if (args[0] == args[1] && args[1] == args[2]) 
     str = "equilateral"; 
    else if (args[0] != args[1] && args[0] != args[2] && args[1] != args[2]) 
     str = "scalene"; 
    return str; 
}