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.
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;
Legal!
Não tenho usado o </> pois teve duas vezes que bagunçou uma classe inteira que postei.
Mas vou testar mais!
E não seria mais coerente a variável se chamar posicao
ao invés de c
?
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!
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?
deixar fora neh
arrumei e a questão do maior perímetro consegue me ajudar?
ja consegui aki
Muito obrigado pela ajuda:+1: