0

我有一个方法,它将整数数组作为输入并输出一个字符串,说明如果参数长度为 3,它们形成哪种类型的三角形,否则输出“无效”。

    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语句“return”Error all the tests failed“;” 无法达到前面的 if 语句涵盖所有可能的输入。这会导致 Eclemma 显示缺少指令,但我无法将其取出,因为我收到一条错误消息,指出它必须返回字符串类型的结果。有没有办法让 Eclemma 忽略这个特定的声明或在我的测试中覆盖它?坦克斯

4

2 回答 2

0

您在 if 条件中匹配了所有可能的情况,并且它永远不会到达最终的 return 语句。

您可以在下面执行,而不是有多个 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;
} 
于 2016-06-13T02:57:27.303 回答
0

将您的算法更改为最后有一个返回语句。然后让每个 if 条件将其结果设置为将返回的字符串。如果您担心知道答案后会导致稍后的检查短路,请将它们转换为 else 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;
}  
于 2016-06-13T02:35:27.120 回答