如果else循环满足多个条件

时间:2019-01-29 06:28:12

标签: java loops

如果数字满足两个以上条件,如何返回两种类型?

到目前为止,我得到的输出是: 输入三个整数:8 8 8 <8,8,8>是等腰三角形

private Types getTypes ()
{
    int a = getA();
    int b = getB();
    int c = getC();

    if ((a+b) > c || (a+c) > b || (b+c) > a )
    {
        if (a==b || a==c || b==c)
        {
            return Types.Isosceles;
        }
        if (a == b && b == c && c==a)
        {
            return Types.Equilateral;
        }

        else
        {
            return Types.Scalene;
        }
    }
    else
        return Types.NoShape;
}

理想的输出为      输入三个整数:8 8 8      <8,8,8>是等边三角形      <8、8、8>是等腰三角形      <8,8,8>是一个三角形

4 个答案:

答案 0 :(得分:3)

您可以返回Set<Types>,因为一个集合可以容纳多个项目。在方法开始时,创建一个集合以添加所有类型。然后,您可以在其余方法中添加它。

private Set<Types> getTypes() {
    Set<Types> set = EnumSet.noneOf(Types.class);
    int a = getA();
    int b = getB();
    int c = getC();

    if ((a+b) > c || (a+c) > b || (b+c) > a) {
        if (a==b || a==c || b==c) {
            set.add(Types.Isosceles);
        }
        if (a == b && b == c && c==a) {
            set.add(Types.Equilateral);
        } else {
            set.add(Types.Scalene);
        }
    }
    if (set.isEmpty()) {
        set.add(Types.NoShape);
    }
    return set;
}

答案 1 :(得分:0)

在Java中无法返回两个单独的变量。

解决此问题的最简单方法是声明一个Array并返回需要在Array中返回的两个变量。例如。

Types[] ret = new Types[2];
ret[0] = Types.equilateral;
ret[1] = Types.isosceles;
return ret;

这将返回数组中等边和等腰的两个值。对于Types数组,这应该是正确的语法。

答案 2 :(得分:0)

您也可以使用StringBuilder由您选择的分隔符分隔存储结果,然后拆分得到的线,让你多个结果。

private static String getTypes ()
    {
        int a = getA();
        int b = getB();
        int c = getC();

        Types  [] answer = new Types[4];
        StringBuilder sb = new StringBuilder("");


        if ((a+b) > c || (a+c) > b || (b+c) > a )
        {
            if ((a==b || a==c || b==c))
            {
                sb.append(Types.Isosceles)
                sb.append(DELIMITER); // DELIMITER is a character of you choice... 

            }
            if (a == b && b == c && c==a)
            {
                sb.append(Types.Equilateral);
                sb.append(DELIMITER);
            } else {
                sb.append(Types.Scalene);
                sb.append(DELIMITER);
            }
        }
        else{
            sb.append(Types.NoShape);
            sb.append(DELIMITER);
        }

        return sb.toString();
    }

答案 3 :(得分:0)

代替某种类型的集合的另一种可能性是,您可以制作一个简单的对象,例如

class ShapeInfo {
    private final boolean isosceles;
    private final boolean equilateral;
    private final boolean scalene;
    public ShapeInfo(int a, int b, int c) {
        if (a + b > c || a + c > b || b + c > a) {
            equilateral = a == b && a == c && b == c;
            isosceles = a == b || a == c || b == c;
            scalene = !equilateral && !isosceles;
        } else {
            equilateral = false;
            isosceles = false;
            scalene = false;
        }
    }
    @Override
    public String toString(){
        // TODO your print method here using the private instance variables
    }
    // add getters if you need them

}

通过这种方式,构造函数可以处理对象的属性,并且代码易于移植(此处包含自身)。

ShapeInfo shapeInfo = new ShapeInfo(8, 8, 8);
System.out.println(shapeInfo);