Ir ao conteúdo
  • Cadastre-se

Arraylist em POO


Posts recomendados

boa noite

Preciso de uma luz no exercicio abaixo:

1-Faça um programa no qual o usuario digite 3 valores inteiros para formar um triangulo. cada trainagulo informado pelo usuario deverara ser armazenado numa lista.

sabe- se ainda:

o triangulo escalendo poderá ter sua cor escolhida pelo usuario;

os triangulos isoceles poderá ser nomedos

 

o programa parará de coletar os dados de triangulo quando for informado o valor 0 para io primeiro lado e mostrarar:

a quantidade total de triangulos digitados;

a quantidade de triangulo por tipo;

a area de cada um dos triangulos equilateros;

imprrimir desenhar o tipo correspondente. dentro do triangulo tem que ter o nome ;

 

 

Tenho que usar Polimorfismo nessa questão.  minha dificuldade e a seguinte:

Apos ler os tres numeros, definir o tipo do triangulo e colocar dentro arrayList;

Imprimir esse arrayList;

Uso um metodo para cadastrar os numeros e outros para definir o tipo do triangulo. tentei colocar tudo dentro do mesmo metodo, mais nao sai nada!!
 

 

Ja usei o iterator, n formas e não imprimi a lista. Não entra dentro do laço pra definir o tipo de triangulo.

Alguem sabe como resolver? ou algum tutorial que possa me auxiliar???

 

 

Link para o comentário
Compartilhar em outros sites

@Aline Silva_686179 Boa noite

 

A resolução desse problema é relativamente simples.

 

Crie uma classe Triangulo

public class Triangulo {
 
  private int lado0;
  private int lado1;
  private int lado2;
  
  //Construtor
  //Getter e Setters
  
}

Crie um ArrayList desse tipo de objeto: 

List<Triangulo> listaTriangulos = new ArrayList<>();

 

Depois, crie uma classe para cada tipo de triângulo. Exemplo:

 

public class TrianguloIsosceles extends Triangulo{

	private String cor;

	//Construtor
	//Geters e Setters
}

 

Depois, faça os cálculos para saber que tipo de triângulo o usuário digitou com as medidas. Vamos supor que as medidas resultaram em um triângulo isósceles.

 

Atribua os valores digitados a um novo objeto do tipo TrianguloIsosceles()

 

TrianguloIsosceles triIs = new TrianguloIsosceles(lado0, lado1, lado2);

 

Depois disso, coloque um prompt e peça ao usuário para digitar a cor do seu triângulo isósceles.

 

Depois de capturar a cor:

 

triIs.setCor(corDigitada);

Agora que você tem todas as características desse triangulo, adicione ele a lista:

 

listaTriangulos.add(triIs);

Depois que o usuário terminar de inserir dados, totalize.

 

A quantidade de triângulos é

listaTriangulos.size();

Para contar para um deles:

 

int triangulosIsosceles = 0;
//siga com cada tipo de triangulo

//Depois faça um for

for (Triangulo tri : listaTriangulos) {
    if (tri instanceof TrianguloIsosceles) {
      triangulosIsosceles++;
    } else if (tri instanceof TrianguloEquilatero) {
      triangulosEquilateros++;
    }
}

Com isso você resolve facilmente o problema.

Link para o comentário
Compartilhar em outros sites

refiz o codigo baseado no que passou, porém ainda não consigo armazenar muitos dados dentro do arraylist.

quero que enquanto lado a for diferente de 0 ele continue o laço. porém quando digito o zero, finaliza o laço, mais só armazena dentro do arraylist o ultimo triangulo digitado

 

Link para o comentário
Compartilhar em outros sites

@Aline Silva_686179 Boa noite.

 

Seria mais fácil se você colocasse aqui o trecho do seu código com o laço.

 

Um ArrayList não tem limite teórico de tamanho. Se o laço está saindo quando digita zero, então está correto. O problema é que provavelmente você instanciou o objeto Triangulo apenas uma vez e fora do laço.

 

SEMPRE que você iniciar o laço do while, você sempre deve criar uma nova instância de Triangulo. Java trabalho com ponteiros.

 

Exemplo:

 

Triangulo tri = new Triangulo();
List<Triangulo> result = new ArrayList<>();

//Agora, entramos no seu laço
while (sua_condicao) {
 tri.setLado0(valor0_digitado); 
 tri.setLado1(valor1_digitado); 
 tri.setLado2(valor2_digitado); 
 result.add(tri);   
}

Neste exemplo,, se o seu laço for percorrido 10 vezes, TODOS os 10 objetos dentro da lista terão exatamente os mesmos valores. Porque? O objeto triângulo foi instanciado fora do laço apenas uma vez. Como Java trabalha com ponteiros, você atribuiu valores ás 3 variáveis do objeto Triangulo (tri) e adicionou ele na lista. Como o objeto é o mesmo (não existe outro new Triangulo()), cada vez que você altera os valores das variáveis no laço, os objetos já inseridos na lista serão atualizados para os valores do laço atual porque o objeto tri ainda possui a mesma referência em memória.

 

Mas como resolver isso?

 

Triangulo tri;
List<Triangulo> result = new ArrayList<>();

//Agora, entramos no seu laço
while (sua_condicao) {
 tri = new Triangulo();
 tri.setLado0(valor0_digitado); 
 tri.setLado1(valor1_digitado); 
 tri.setLado2(valor2_digitado); 
 result.add(tri);   
}

Perceba a diferença sutil. A cada nova iteração do seu laço, temos o

tri = new Triangulo();

Dessa forma, um novo objeto será criado em memória e seus dados não serão mais alterados depois de atribuídos. Assim, todos os objetos inseridos nessa lista terão os valores que o usuário digitou em cada laço.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...