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
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");
}
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.