Если еще циклы для удовлетворения нескольких условий - PullRequest
0 голосов
/ 29 января 2019

Как вернуть 2 типа, если числа удовлетворяют более чем двум условиям?

Вывод, который я до сих пор получил: введите три целых числа: 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 голосов
/ 29 января 2019

Еще одна возможность вместо некоторой коллекции - создать простой объект, такой как

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);
0 голосов
/ 29 января 2019

Вместо этого вы можете вернуть 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;
}
0 голосов
/ 29 января 2019

Вы также можете использовать 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();
    }
0 голосов
/ 29 января 2019

Нет способа вернуть две отдельные переменные в Java.

Самый простой способ решить эту проблему - объявить массив и вернуть две переменные, которые вам нужно вернуть в массиве.Например,

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

Это вернет два значения равносторонние и равнобедренные в массиве.Это должен быть правильный синтаксис для массива Types.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...