If-else encadeados/aninhados

Olá pessoal
Preciso de ajuda com umcódigo que deve testar se um triângulo é equilátero, esósceles ou escaleno, porém, ao rodar o código, o resultado só mostra a última condição: ‘Não forma um triângulo’.
Vocês poderiam me ajudar? Principalmente se puderem me passar links de aulas e exercícios sobre if-else aninhados ou encadeados.

package sandra.puga;
 
import java.util.Scanner;
 
public class Puga_ex61
{
    public static void main(String[] args) {
         
    int a = 0;
    int b = 0;
    int c = 0;
     
      Scanner scanner = new Scanner(System.in);
       
      System.out.println
      ("Programa que avalia o tipo de triângulo");
      
      System.out.println("medida lado a");
      a = scanner.nextInt();
       
      System.out.println("medida lado b");
      a = scanner.nextInt();
       
      System.out.println("medida lado c");
      a = scanner.nextInt();
       
      if (a != 0 && b != 0 && c != 0){
      if (a + b > c && a + c > b && b + c > a){
      if (a != b && a != c && b != c){
      System.out.println("Triangulo escaleno");  
      }
      else
      {
      if (a == b && b == c)
          {
      System.out.println("Triangulo equilátero");  
      }
      else {
      System.out.println("Triângulo isósceles");  
      }
     }
    }  
      else{
           System.out.println("Não forma um triângulo");  
      }
      }
      else{
           System.out.println("Não forma um triângulo");  
       }
      }
    }

Todas as suas 3 linhas que leem os lados do triângulo estão preenchendo a variável a. As variáveis b e c estão ficando como zero. Isso faz com que o primeiro if retorne false e vá para a mensagem de que não é um triângulo:

      System.out.println("medida lado a");
      a = scanner.nextInt();
       
      System.out.println("medida lado b");
      a = scanner.nextInt(); // aqui deveria ser a variável b
       
      System.out.println("medida lado c");
      a = scanner.nextInt(); // aqui deveria ser a variável c

Fora isso, os if em si parecem corretos. Talvez seja possível melhorar a organização, mas o código parece ok.

Dica geral: prefira nextLine em vez de nextInt (e outros), pra evitar algumas surpresas. Leia neste tópico pra saber porquê : Scanner (nextLine()) - #2 por staroski

Abraço;

2 curtidas

Além do que já foi dito (vc está sempre lendo a variável a, enquanto as outras continuam com o valor zero), seguem mais algumas dicas.

Algo que pode ajudar é sempre formatar/identar corretamente o código. Isso facilita a leitura e fica mais simples entender qual if corresponde a qual else, o que está dentro do que, etc. No seu caso, ficaria assim:

if (a != 0 && b != 0 && c != 0) {
    if (a + b > c && a + c > b && b + c > a) {
        if (a != b && a != c && b != c) {
            System.out.println("Triangulo escaleno");
        } else {
            if (a == b && b == c) {
                System.out.println("Triangulo equilátero");
            } else {
                System.out.println("Triângulo isósceles");
            }
        }
    } else {
        System.out.println("Não forma um triângulo");
    }
} else {
    System.out.println("Não forma um triângulo");
}

Dito isso, dá pra simplificar um pouco. Se um dos valores for zero ou negativo, a condição (a + b > c && a + c > b && b + c > a) será falsa, então não precisa verificar se os valores são zero, é redundante. Poderia ficar assim:

if (a + b > c && a + c > b && b + c > a) {
    if (a != b && a != c && b != c) {
        System.out.println("Triangulo escaleno");
    } else if (a == b && b == c) {
        System.out.println("Triangulo equilátero");
    } else {
        System.out.println("Triângulo isósceles");
    }
} else {
    System.out.println("Não forma um triângulo");
}
2 curtidas

Olá meu amigo, desculpe ter demorado um pouco p/ lhe dar um feedback.

Obrigado pelas dicas quanto à organização do código e à sugestão de usar o nextLine. Valeu também pelo link onde o colega Staroski dá uma ótima explicação sobre as diferenças de uso entre o nextInt e o nextLine.


Olá Hugo, desculpe também a te enviar um feedback, mas tô de volta.

Valeu pela observação onde você diz que, no caso de valores negativos ou valendo zero, a condição if (a + b > c && a + c > b && b + c > a){ seria falsa, e consequentemente, o próximo if - que testa valores sendo zero, seria redundante.
Nesta sua sugestão, o código ficou mais econômico e inteligível.


Grato - Job