Если операторы не работают правильно в программе, чтобы определить тип треугольника - PullRequest
1 голос
/ 27 марта 2019

У меня есть задание написать программу, которая использует метод triangleType, который я должен написать, чтобы получить три ввода типа int от пользователя и вывести тип треугольника.В этом методе мне сначала нужно отсортировать целые числа в порядке возрастания, чтобы сравнения, которые я должен использовать, работали правильно.Я знаю, что правильно выполнил сортировку в коде, потому что я тестировал ее еще до того, как попытался определить тип треугольника.Я должен использовать эти сравнения, чтобы найти тип треугольника: «если A + B <= C, то стороны не представляют допустимый треугольник. Если A = C (все стороны должны быть одинаковой длины), то треугольникEQUILATERAL., Если A = B или B = C, то треугольник равен ISOSCELES, в противном случае треугольник равен SCALENE.Неверный треугольник "плюс другие выходы, независимо от того, какие целые числа я ввожу. </p>

package trianglemethod;

import javax.swing.JOptionPane;


public class TriangleMethod
{


    public static void main(String[] args)
    {
        String wordaA, wordbB, wordcC, answer;

        do 
        {
           System.out.println("Please enter all 3 side lengths of the triangle in any order.");
           wordaA = JOptionPane.showInputDialog("Enter side 1:");
           wordbB = JOptionPane.showInputDialog("Enter side 2:");
           wordcC = JOptionPane.showInputDialog("Enter side 3:");
           int aA = Integer.parseInt(wordaA);
           int bB = Integer.parseInt(wordbB);
           int cC = Integer.parseInt(wordcC);
           triangleType(aA,bB,cC);
           System.out.println("Would you like to enter another triangle?");
           answer = JOptionPane.showInputDialog("Would you like to enter another triangle?");
        } while (answer.equalsIgnoreCase("yes"));

    }

    static void triangleType(int aA, int bB, int cC) {
        int a=0, b=0, c=0;

        if (aA > bB && aA > cC)
        {
            if (bB > cC)
            {
              a = cC;
              b = bB;
              c = aA;
            }
            else if (cC > bB)
            {
              a = bB;
              b = cC;
              c = aA;
            }
        }
        if (bB > aA && bB > cC)
        {
            if (aA > cC)
            {
              a = cC;
              b = aA;
              c = bB;
            }
            else if (cC > aA)
            {
              a = aA;
              b = cC;
              c = bB;
            }
        }
        if (cC > aA && cC > bB)
        {
            if (aA > bB)
            {
              a = bB;
              b = aA;
              c = cC;
            }
            else if (bB > aA)
            {
              a = aA;
              b = bB;
              c = cC;
            }
        }

        if (a+b<=c)
        {
            JOptionPane.showMessageDialog(null,"Invalid Triangle");
        } if (a==c) {
               JOptionPane.showMessageDialog(null,"Triangle is Equilateral"); 
        } if (a==b || b==c){
                JOptionPane.showMessageDialog(null, "Triangle is Isosceles");
        } 
        else {
            JOptionPane.showMessageDialog(null,"Triangle is Scalene");
        }    
    }
}

Ответы [ 3 ]

1 голос
/ 27 марта 2019

У вас есть три различных оператора if, которые оцениваются отдельно.Вместо этого, из описания проблемы звучит так, как будто вам нужен один оператор if с несколькими ветвями условий (например, else if предложения):

if (a+b<=c)
{
    JOptionPane.showMessageDialog(null,"Invalid Triangle");
} else if (a==c) {
       JOptionPane.showMessageDialog(null,"Triangle is Equilateral"); 
} else if (a==b || b==c){
        JOptionPane.showMessageDialog(null, "Triangle is Isosceles");
} else {
    JOptionPane.showMessageDialog(null,"Triangle is Scalene");
}    
0 голосов
/ 27 марта 2019

Я в замешательстве, почему ты не можешь просто сделать

        if (a == b && b == c) {
            JOptionPane.showMessageDialog(null,"Triangle is Equilateral");
        } else if ((a == b && a != c) || (a == c && a != b) || (b == c && b != a)) {
            JOptionPane.showMessageDialog(null, "Triangle is Isosceles");
        } else if (a != b && a != c && b != c){
            JOptionPane.showMessageDialog(null,"Triangle is Scalene");
        } else {
            JOptionPane.showMessageDialog(null,"Invalid Triangle");
        }
0 голосов
/ 27 марта 2019

На самом деле есть 2 вопроса.

  1. Допустим, a = 5, b = 5 и c = 5.То, как ваш код работает сейчас, он проверяет:
    if (a==c)
    
    , что верно, поэтому он печатает «Треугольник равносторонний».Затем он проверяет:
    if (a==b || b==c)
    
    , что также верно, поэтому он печатает «Треугольник - равнобедренный».

    Чтобы не допустить проверки следующего оператора if, как только он найдет искомый результат, все последующие операторы if должны быть операторами «else if».Окончательный код «else» будет выполняться, если все остальные операторы if, если он выше, ложны.В вашем случае, он будет работать до тех пор, пока ваш третий, если утверждение ложно.
  2. Также, как указал Андроник, переменные a, b и c останутся равными 0, если любая сторона будет равна другой, поскольку ваш код проверяет только неравенства

    Вот рабочий код для сортировки:
    if(aA>=bB && aA>=cC){
        a = aA;
        if(bB >= cC){
            b = bB;
            c = cC;
        } else {
            b = cC;
            c = bB;
        }
    } else if (bB >= aA  && bB >= cC){
        a = bB;
        if(aA >= cC){
            b = aA;
            c = cC;
        } else {
            b = cC;
            a = aA;
        }
    } else {
        a = cC;
        if(cC >= aA){
            b = cC;
            c = aA;
        } else {
            b = aA;
            c = cC;
        }
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...