Meu programa não salva os triangulos e so mostra 0.0 quando peço no menu

import java.util.*;
class Triangulo{
   private static double a;
   private static double b;
   private static double c;
   
   Triangulo(){   
      setLadoA(0);
      setLadoB(0);
      setLadoC(0);
   }    
   
   Triangulo(double a,  double b, double c){ 
      setLadoA(a);
      setLadoB(b);
      setLadoC(c);
   }
   
   
   public void setLados(double a,double b,double c){
   
      a = a;
      b = b;
      c = c;}
   public void setLadoA(double a){
   
      a = a;
   }//Fim setA()
   
   public void setLadoB(double b){
   
      b = b;
   }//Fim setB()
   
   public void setLadoC(double c){
   
      c = c;
   }//Fim setC()
        
   public static double getLadoA(){
      return a; }
   public static double getLadoB(){
      return b;}
   public static double getLadoC(){
      return c;}
  
   public void escreve(){
      System.out.println("\nLados: " + getLadoA() + ", " 
                                     + getLadoB() + ", "
                                     + getLadoC() );
      
      
   }
   public void escreveP(){
      System.out.println("Perimetro: " + perimetro() );}
    
   public static int Tipo(){
      
      getLadoA();
      getLadoB();
      getLadoC();
      
      if(a < b + c || b < a + c || c < a + b){
         if(a == b && b == c && a == c){
         
            return 1; 
         }
         else if(a == b || b == c || a == c){
         
            return 2;
         }
         else{
         
            return 3;
         }
         
      }
      else{
      
         return 0;
      }
   }     
   
   public void escreveTipo(){
      int x = Tipo();
      
      if(x == 1){ 
      
         System.out.println("Equilatero");
      }
      if(x == 2){ 
      
         System.out.println("Isoscele");
      }
      if(x == 3){ 
      
         System.out.println("Escaleno");
      }
      if(x == 0){
       
         System.out.println("Nao e triangulo");
      }   
   }
   public static boolean ehTriangulo(){
      getLadoA();
      getLadoB();
      getLadoC();
      
      if(a < b + c || b < a + c || c < a + b){
      
         return true;
      }
      else{
      
         return false;
      }
   }  
   
   public static double perimetro(){
      return getLadoA()+getLadoB()+getLadoC();}
      
   public void lelados(){
      Scanner s=new Scanner(System.in);
      System.out.print("Digite o valor dos lados do triangulo: ");
      System.out.print("Lado A: ");
      double setLadoA = (s.nextDouble());
      
      System.out.print("Lado B: ");
      double setLadoB = (s.nextDouble());
      
      System.out.print("Lado C: ");
      double setLadoC = (s.nextDouble());
      
      setLados(setLadoA,setLadoB,setLadoC);;
   }
   public static double maiorPerimetro(int i, Triangulo[] m){
      
      if(i <= 1) 
         return 0;
      
      if(m[i-1].perimetro() > maiorPerimetro(i-1, m)){
         return m[i-1].perimetro();
      }
      
      return maiorPerimetro(i-1, m);
   }
   
   public static void escreveTriangulosMaiores(int i, double maior, Triangulo[] m){
      
      if(i <= 0) 
         return;
      
      if(m[i-1].perimetro() == maior) System.out.println("Posicao: " + (i));
      
      escreveTriangulosMaiores(i - 1, maior, m);
   }   
}
   
public class TP1{
   public static void main(String[] args){
      Scanner s=new Scanner(System.in);
      
      Triangulo[]t= new Triangulo[100];
      int menu;
      
      do{
         System.out.print("Digite uma opcao do menu a seguir\n"+  
                   "1. Ler um novo triangulo.\n "+  
                   "2. Listar todos os triangulos criados.\n "+  
                   "3. Escrever o triangulo posicionado na posicao k do arranjo, sendo k um valor lido.\n" +  
                   "4. Verificar o tipo de um triangulo armazenado na posicao k do arranjo.\n" +  
                   "5. Verificar o perimetro de um triangulo armazenado na posicao k do arranjo.\n" +  
                   "6. Listar todos os triangulos do arranjo, seguido de seu perimetro e de seu tipo.\n" +  
                   "7. Listar todos os triangulos cujos valores dos lados precisam ser corrigidos por não atender à sua condicação de existeência.\n"+
                   "8. Triangulos com maior períimetro.  \n"+
                   "0.Sair: \n");
         menu =s.nextInt();
         int c=0;
         switch( menu )
         {
         
            case 1:
               t[c] = new Triangulo();
               t[c].lelados();
               c++;
               break;
            case 2:
               System.out.println("Triangulos do arranjo: ");
               for(int i = 0; i < t.length; i++){
                 
                  if(t[i] != null){   
                  
                     t[i].escreve();   
                  }
               }
               System.out.print("\n");
               break;
            case 3: 
               int q;
               System.out.println("Digite a posiçcao: ");
               q=s.nextInt();
               t[q].escreve();
               t[q].escreveTipo();
               t[q].escreveP();
               break;
            case 4: 
               int z;
               System.out.println("Digite a posiçcao: ");
               z=s.nextInt();
               t[z].escreveTipo();
               break;
            case 5:
               int y; 
               System.out.println("Digite a posiçcao: ");
               y=s.nextInt();
               t[y].escreveP();
                
                
               break;
            case 6: 
            
               System.out.println("Triangulos do arranjo: ");
               for(int i = 0; i < t.length;i++){
               
                  if(t[i] != null){
                     t[i].escreve();
                     t[i].escreveP();
                     t[i].escreveTipo();
                    }
               }
            
               
               break;
            case 7: 
               for(int i =0;i < c;i++){
                  
                  if(t[i].ehTriangulo() == false){
                  
                     t[i].lelados();
                  }
                  else{
                  
                     System.out.println("Nao tem triangulos a serem corrigidos");
                  }
               }
                
               break;        
            case 8: 
               double maior = Triangulo.maiorPerimetro(c,t);
             
               Triangulo.escreveTriangulosMaiores(c,maior,t);   
               System.out.println(maior);
               break;
            case 0:
               System.out.println("Acabou o programa!");
               break;
            default:
               System.out.println("Valor errado.");          
         }
      
      
      }while(menu!=0); 
   }

1º - os atributos a, b e c da classe Triangulo não devem ser estáticos

2º - nos seus métodos setLadoA, setLadoB e setLadoC o parâmetro recebido tem o mesmo nome do atributo, então quando você faz a = a; você está atribuindo o parâmetro a ele mesmo, o correto é atribuir o parâmetro ao atributo: this.a = a;

Nessa sua postagem aqui, a classe Triangulo estava implementada da forma certa.

1 curtida

agora mudei ta funcionando … So não esta salvando e mostrando mais de um triangulo so mostra o da posição 0

Posta o código completo de cada uma de suas classes entre as tags

[code] e [/code]

Acredito que você não chegou a executar a solução que foi postada aqui e provavelmente ainda está com um código bagunçado usando atributos estáticos.

import java.util.*;
class Triangulo{
   private double a;
   private double b;
   private double c;
   
   public double getLadoA(){
      return this.a; }
   public double getLadoB(){
      return this.b;}
   public double getLadoC(){
      return this.c;}
   public void setLadoA(double a){
   
      this.a = a;
   }
   
   public void setLadoB(double b){
   
     this.b = b;
   }
   
   public void setLadoC(double c){
   
     this.c = c;
   }
        
   
   Triangulo(){   
     this.setLadoA(0);
     this.setLadoB(0);
     this.setLadoC(0);
   }    
   
   Triangulo(double a,  double b, double c){ 
      this.setLadoA(a);
      this.setLadoB(b);
      this.setLadoC(c);
   }
   
   
   public void setLados(double a,double b,double c){
   
      this.a = a;
      this.b = b;
      this.c = c;}
   
  
   public void escreve(){
      System.out.println("\nLados: " + this.getLadoA() + ", " 
                                     + this.getLadoB() + ", "
                                     + this.getLadoC() );
      
      
   }
   public void escreveP(){
      System.out.println("Perimetro: " + this.perimetro() );}
    
   public int Tipo(){
      if(ehTriangulo()== true){
         if(this.getLadoA()==this.getLadoB() && this.getLadoB()==this.getLadoC()){
            return 1;}
         else if(this.getLadoA()!=this.getLadoB() && this.getLadoB()!=this.getLadoC() && this.getLadoA()!=this.getLadoC()){
            return 3;}
         else {
            return 2;}
      }else {
         return 0;}
   }     
   
   public void escreveTipo(){
      int x = Tipo();
      
      if(x == 1){ 
      
         System.out.println("Equilatero");
      }
      if(x == 2){ 
      
         System.out.println("Isoscele");
      }
      if(x == 3){ 
      
         System.out.println("Escaleno");
      }
      if(x == 0){
       
         System.out.println("Nao e triangulo");
      }   
   }
   public boolean ehTriangulo(){
       if(this.getLadoA()< this.getLadoB() + this.getLadoC() || this.getLadoB() < this.getLadoA() + this.getLadoC() || this.getLadoC()< this.getLadoA() + this.getLadoB()){
      
         return true;
      }
      else{
      
         return false;
      }
   }  
   
   public double perimetro(){
      return this.getLadoA()+this.getLadoB()+this.getLadoC();}
      
   public void lelados(){
      Scanner s=new Scanner(System.in);
      System.out.print("Digite o valor dos lados do triangulo: ");
      System.out.print("\nLado A: ");
      double setLadoA = (s.nextDouble());
      
      System.out.print("Lado B: ");
      double setLadoB = (s.nextDouble());
      
      System.out.print("Lado C: ");
      double setLadoC = (s.nextDouble());
      
      this.setLados(setLadoA,setLadoB,setLadoC);
   }
   public static double maiorPerimetro(int i, Triangulo[] m){
      
      if(i <= 1) 
         return 0;
      
      if(m[i-1].perimetro() > maiorPerimetro(i-1, m)){
         return m[i-1].perimetro();
      }
      
      return maiorPerimetro(i-1, m);
   }
   
   public static void escreveTriangulosMaiores(int i, double maior, Triangulo[] m){
      
      if(i <= 0) 
         return;
      
      if(m[i-1].perimetro() == maior) System.out.println("Posicao: " + (i));
      
      escreveTriangulosMaiores(i - 1, maior, m);
   }   
}
   
public class TP1{
   public static void main(String[] args){
      Scanner s=new Scanner(System.in);
      
      Triangulo[]t= new Triangulo[100];
      int menu;
      
      do{
         System.out.print("Digite uma opcao do menu a seguir\n"+  
                   "1. Ler um novo triangulo.\n "+  
                   "2. Listar todos os triangulos criados.\n "+  
                   "3. Escrever o triangulo posicionado na posicao k do arranjo, sendo k um valor lido.\n" +  
                   "4. Verificar o tipo de um triangulo armazenado na posicao k do arranjo.\n" +  
                   "5. Verificar o perimetro de um triangulo armazenado na posicao k do arranjo.\n" +  
                   "6. Listar todos os triangulos do arranjo, seguido de seu perimetro e de seu tipo.\n" +  
                   "7. Listar todos os triangulos cujos valores dos lados precisam ser corrigidos por não atender à sua condicação de existeência.\n"+
                   "8. Triangulos com maior períimetro.  \n"+
                   "0.Sair: \n");
         menu =s.nextInt();
         int c=0;
         switch( menu )
         {
         
            case 1:
               t[c] = new Triangulo();
               t[c].lelados();
               c++;
               break;
            case 2:
               System.out.println("Triangulos do arranjo: ");
               for(int i = 0; i < t.length; i++){
                 
                  if(t[i] != null){   
                  
                     t[i].escreve();   
                  }
               }
               System.out.print("\n");
               break;
            case 3: 
               int q;
               System.out.print("Digite a posicao do triangulo que deseja: "); 
              q = s.nextInt();
              t[q].escreve();
               break;
            case 4: 
               int j;
              
              System.out.print("Digite qual triangulo deseja verificar o tipo: ");
              j = s.nextInt();
              
              if(t[j] != null){
              
              t[j].ehTriangulo();
              
              if(t[j].ehTriangulo() == true){

              t[j].Tipo();
              t[j].escreveTipo();
              }
              }
               break;
            case 5:
               int y; 
               System.out.println("Digite a posiçcao: ");
               y=s.nextInt();
               if(t[y] != null){
               t[y].escreveP();}
               break;
            case 6: 
            
               System.out.println("Triangulos do arranjo: ");
               for(int i = 0; i < t.length;i++){
               
                  if(t[i] != null){
                     t[i].escreve();
                     t[i].escreveP();
                     t[i].escreveTipo();
                    }
               }
            
               
               break;
            case 7: 
               for(int i =0;i < c;i++){
                  
                  if(t[i].ehTriangulo() == false){
                  
                     t[i].lelados();
                  }
                  else{
                  
                     System.out.println("Nao tem triangulos a serem corrigidos");
                  }
               }
                
               break;        
            case 8: 
               double maior = Triangulo.maiorPerimetro(c,t);
             
               Triangulo.escreveTriangulosMaiores(c,maior,t);   
               System.out.println(maior);
               break;
            case 0:
               System.out.println("Acabou o programa!");
               break;
            default:
               System.out.println("Valor errado.");          
         }
      
      
      }while(menu!=0); 
   } 
}

Cada vez que você reitera seu do-while, você está atribuindo zero ao c.

Só uma pergunta, o que significa c?

seria a primeira posiçao dos triangulos que vo digitar na primeira opção do menu

Na verdade tem no menu a opção de código que é
#</>

Selecione o texto e clique no ícone representado logo acima:

int i = 0
int b = 0

Uma linha pode dar um espaço da margem de 4 tabs que também funciona (na verdade funcione para múltiplas linhas, mas, como tem o ícone responsável não vejo motivo para não usar):

int i = 0;
2 curtidas

Legal!
Não tenho usado o </> pois teve duas vezes que bagunçou uma classe inteira que postei.
Mas vou testar mais! :smiley:

1 curtida

E não seria mais coerente a variável se chamar posicao ao invés de c? :wink:

Lembre-se, um bom programador escreve códigos para pessoas lerem.

Sim ,irei mudar .Fica melhor mesmo.

Mas ate então tudo esta funcionando e lendo o que pede e digita menos a opção 8 de achar o maior perímetro e o programa só salva o triangulo da posição 0 e preciso que ele suporte ate 100 triângulos.

É porque sempre que volta pro início do laço você está atribuindo zero à essa variável c.

Cada Triangulo novo que você está criando, você está colocando na posição zero, matando o Triangulo criado na iteração anterior.

como posso mudar isso

Não atribuindo zero pra ele quando você entra no laço! :expressionless:

Hoje seu código está assim:

do {
    int posicao = 0;
    System.out.println(posicao);
    posicao++;
} while (condicao);

Pensa um pouquinho:
Como fazer para que posicao não seja zerada cada vez que entra no laço?

1 curtida

deixar fora neh

1 curtida

arrumei e a questão do maior perímetro consegue me ajudar?

ja consegui aki :sweat_smile:
Muito obrigado pela ajuda:+1: :v:

1 curtida