Ajuda com Array recebendo instâncias de objetos! [RESOLVIDO]

7 respostas
shyryu
public class AppStart {
	/**
	 * @author Pedro
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner input = new Scanner(System.in);

		Retangulo[] retangulo = (Retangulo[]) new Forma[2];
		Circulo[] circulo = (Circulo[]) new Forma[2];

		int escolha = 0;
		while (escolha < 5) {
			System.out.println("Faça uma escolha!");
			escolha = input.nextInt();
			switch (escolha) {
			case 1: {
				System.out.println("Digite o lado e altura do retangulo");
				System.out.println("Lado: ");
				float lado = input.nextFloat();
				System.out.println("Altura: ");
				float altura = input.nextFloat();

				Retangulo a = new Retangulo(lado, altura);
				retangulo[0] = a;
				System.out.println("Area: " + retangulo[1].calcularArea());

				break;
			}
			case 2: {
				System.out.println("Digite o lado e altura do retangulo");
				System.out.println("Lado: ");
				float lado = input.nextFloat();
				System.out.println("Altura: ");
				float altura = input.nextFloat();

				Retangulo b = new Retangulo(lado, altura);
				retangulo[1] = b;
				System.out.println("Perimetro: "
						+ retangulo[2].calcularPerimetro());

				break;
			}
			case 3: {
				System.out.println("Digite o Raio do Circulo");
				float raio = input.nextFloat();

				Circulo c = new Circulo(raio);
				circulo[0] = c;
				System.out.println("Area: " + circulo[0].calcularArea());

				break;
			}
			case 4: {
				System.out.println("Digite o Raio do Circulo");
				float raio = input.nextFloat();

				Circulo d = new Circulo(raio);
				circulo[1] = d;
				System.out.println("Circunferencia: "
						+ circulo[1].calcularPerimetro());

				break;
			}
			default: {
				break;
			}
			}
		}
	}

}

Bom pessoal, o professor do curso tecnico passou-nos um trabalho de polimorfismo, ate simples.
Com uma interface Forma, e duas Class implementando Forma: Retangulo e Circulo.
1 instancia seria para calcular area de retangulo, outra para Perimetro, outra para circunferencia do circulo e outra para a area do circulo.

Ele exigiu que as instancias estivessem em um array com quatro posições. so que quando eu crio o array e mando rodar o sistema ele gera um erro nas duas linhas que contém:
Retangulo[] retangulo = (Retangulo[]) new Forma[2]; Circulo[] circulo = (Circulo[]) new Forma[2];

queria ajuda de vocês. Agradeço !

7 Respostas

FacaNaCaveira

Fala ai shyryu

Seia uma boa vc copiar e colar o erro aqui no forum para podermos ajudar vc a soluciona ro problema.
Alias, se pudesse postar as demais classes, seria interessante.

Abração 8)
Max

juno.rr

Se não me engano Forma não é um retângulo, mas retângulo é uma forma.
Vc deveria fazer assim:

Forma[] rect = new Retangulo[2];
Forma[] circ = new Circulo[2];
ViniGodoy

Você não precisa fazer esse cast. Basta criar um array de Formas:

Cria um array para guardar quatro formas.

Forma[] formas = new Forma[4];

Como o círculo é uma forma e o retângulo também é uma forma, você pode guarda-los no seu array de formas:

formas[0] = new Circulo(2); formas[1] = new Retangulo(4,5);

E você pode perguntar a área e o perímetro das formas:

for (int i = 0; i < formas.length; i++) { System.out.printf("Forma[%d] - Área: %.2f %n", (i+1), formas[i].calcularArea()); System.out.printf("Forma[%d] - Perímetro: %.2f %n", (i+1), formas[i].calcularPerimetro()); }

A área e o perímetro serão calculadas corretamente, através do polimorfismo.

ajinfotec

mano Retangulo e Circulo inplementa a intefeice Forma certo é isso mesmo ne???

o casting que vc estar tentando fazer é impossivel. vc viu em tempo de execução
uma ClassCastExeception.

vc pode o inverso mas isso ai não:

Retangulo[] retangulo = (Retangulo[]) new Forma[2];  
   Circulo[] circulo = (Circulo[]) new Forma[2];

isso roda:

Forma[] formas = new Forma[4];

        formas[0] = new Retangulo();
        formas[1] = new Retangulo();
        formas[2] = new Circulo();
        formas[3] = new Circulo();

acredito que a interfeice Forma declare esses dois metodos pelo que entendi

public interface Forma {
       public abstract void calcularArea();
       public abstract void calcularPerimetro();
}

entam como Retangulo e Circulo implementam Forma eles tem uma implementação
desses dois metodos entam isso e valido:

Forma[] forma = new Retangulo[2];

mais isso não

Retangulo[] retangulo = new Forma[2]
shyryu

Obrigado pessoal, agredeço a vocês. Coisa simples mas que tava dando uma dor de cabeça ^^
Agora ta rodando direitinho! :smiley: :smiley:

AndreMendes

Objetos são instâncias de classes.
Você, na verdade, quer um “Array recebendo instâncias de classes”.
É bom se acostumar com os nomes corretos.

ViniGodoy

Por isso que eu disse, você vai criar um array de formas:

Forma formas[] = new Forma[4];

E não um array de retângulos ou círculos.

Como todo retângulo e círculo implementa a interface Forma, você pode coloca-los dentro do array de formas:

formas[0] = new Circulo(2); formas[2] = new Retangulo(3,5);

E perguntar a área e o perímetro das formas que estão dentro do array:

System.out.println(formas[0].calcularArea()); //Imprime 12,56 (3.14 * 2 * 2) System.out.println(formas[2].calcularArea()); //Imprime 15 (3 * 5)

Criado 13 de setembro de 2010
Ultima resposta 13 de set. de 2010
Respostas 7
Participantes 6