import java.util.HashSet;
import java.util.Set;
public class Triangle {
private double side1;
private double side2;
private double side3;
public Triangle(double side1, double side2, double side3) throws TriangleException {
this.side1 = side1;
this.side2 = side2;
this.side3 = side3;
if (allSidesAreZero() || hasImpossibleSides() || violatesTriangleInequality()) {
throw new TriangleException();
}
}
public TriangleKind getKind() {
int uniqueSides = getNumberOfUniqueSides();
if (uniqueSides == 1) {
return TriangleKind.EQUILATERAL;
}
if (uniqueSides == 2) {
return TriangleKind.ISOSCELES;
}
return TriangleKind.SCALENE;
}
private boolean allSidesAreZero() {
return side1 == 0 && side2 == 0 && side3 == 0;
}
private boolean hasImpossibleSides() {
return side1 < 0 || side2 < 0 || side3 < 0;
}
private boolean violatesTriangleInequality() {
return side1 + side2 <= side3 || side1 + side3 <= side2 || side2 + side3 <= side1;
}
public int getNumberOfUniqueSides() {
Set<Double> sides = new HashSet<>();
sides.add(side1);
sides.add(side2);
sides.add(side3);
return sides.size();
}
}