2016-06-13 18 views
0

Ich habe eine Methode, die ein Array von Ganzzahlen als Eingabe verwendet und eine Zeichenfolge ausgibt, die besagt, welche Art von Dreieck Sie bilden sich, wenn das Argument die Länge 3 hat und andernfalls "ungültig" ausgegeben wird.Eclemma: wenn Anweisungen in einer Methode alle möglichen Eingaben abdecken, aber eclemma die return-Anweisung am Ende kennzeichnet, die nie erreicht wird

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"; 
     }   
    } 

Das Problem ist, dass die endgültige Return-Anweisung "zurück" Fehler alle Tests fehlgeschlagen ";" kann nicht erreicht werden, da die vorherigen if-Anweisungen alle möglichen Eingaben abdecken. Dies führt dazu, dass Eclemma fehlende Anweisungen anzeigt, aber ich kann es nicht herausnehmen, da ich eine Fehlermeldung bekomme, dass es ein Ergebnis vom Typ String zurückgeben muss. Gibt es eine Möglichkeit, Ecmelma dazu zu bringen, diese spezifische Aussage zu ignorieren oder sie in meinen Tests zu behandeln? Tahnks

Antwort

0

Ändern Sie Ihren Algorithmus, um am Ende eine einzelne Return-Anweisung zu haben. Dann müssen alle If-Bedingungen ihr Ergebnis in den String setzen, der zurückgegeben wird. Wenn Sie besorgt über sind Kurzschließen später überprüft, wenn Sie die Antwort wissen, machen sie zu sonst, wenn

Zum Beispiel:

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

Sie haben alle möglichen Fälle in der, wenn die Bedingung passenden und erreichen nie die endgültige Rückkehr Aussage.

Statt mehr return-Anweisung zu haben, können Sie unter

tun
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; 
}