Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Polimorfismo

Estou fazendo esse exercicio: 4 - Crie uma classe Zoologico, com 5 jaulas (utilize um array) coloque em cada jaula um animal diferente, percorra cada jaula e emita o som e, se o tipo de animal possuir o comportamento, faça-o correr.

Segue as classes:

package animais;

public class Animal {
    private String nome;
    private int idade;



    public String getNome() {
        return nome;
    }



    public void setNome(String nome) {
        this.nome = nome;
    }



    public int getIdade() {
        return idade;
    }



    public void setIdade(int idade) {
        this.idade = idade;
    }



    public void emitirSom()
    {
        System.out.println("NHA NHA NHA!");
    }
}


package animais;

public class Cachorro extends Animal {



    public void emitirSom()
    {
        System.out.println("Auauauau");
    }

}
package animais;

public class Preguica extends Animal{


    public void emitirSom()
    {
        System.out.println("sei la!");
    }

}
package animais;

public class Jaula {

    private Animal[] animais;




    public Animal[] getAnimais() {
        return animais;
    }

    public void setAnimais(Animal[] animais) {
        this.animais = animais;
    }


}

Mas quando vou atribiur um animal na jaula, da erro. O que estou errando?

package teste;

import javax.swing.JOptionPane;

import animais.Animal;
import animais.Cachorro;
import animais.Jaula;


/* 4 - Crie uma classe Zoologico, 
 * com 5 jaulas (utilize um array) coloque em cada jaula um animal 
 * diferente, percorra cada jaula e emita o som e, se o tipo de animal 
 * possuir o comportamento, faça-o correr.
 */

public class Zoologico {

    public static void main(String[] args) {
        Jaula[] jauladosbicho  = new Jaula[5];

        for(int i=0;i<5;i++) {
            String nomedobicho = JOptionPane.showInputDialog("qual animal vc quer criar?");
            if(nomedobicho == "Cachorro") {
                Animal cachorro = new Cachorro();
                cachorro.setNome("bob");
                jauladosbicho[i]=cachorro;
            }
        }

    }

}
4 respostas

Qual o erro Lucas?

Estava falando que tinha que Criar um array do tipo Animal. ai eu fiz isso:

    public static void main(String[] args) {
        Animal[] jaula = new Animal[4];

        for(int i=0;i<4;i++) {
            String nome = JOptionPane.showInputDialog("qual o nome do bicho");
            if(nome == "cachorro") {
                Animal cachorro = new Cachorro();
                int idade = Integer.parseInt(JOptionPane.showInputDialog("Qual a idade"));
                cachorro.setIdade(idade);
                jaula[i]=cachorro;
            }
            else {
                int idade = Integer.parseInt(JOptionPane.showInputDialog("Qual a idade"));
                Animal gato = new Gato();
                gato.setIdade(idade);
                jaula[i]=gato;
            }

        }

        Zoologico zoo = new Zoologico();
        zoo.setAnimais(jaula);

        for(int i =0;i<4;i++) {
            JOptionPane.showMessageDialog(null,zoo.getAnimais()[i].som());
            JOptionPane.showMessageDialog(null,zoo.getAnimais()[i].getIdade());

        }



    }

}

Está certo? Ainda confundo isso de Array de objetos

solução!

Boa noite, Alguns pontos que notei em seu código:

1 - Quando você verifica o tipo (nome) do animal, você verifica se é cachorro se não, você cria um gato, mas nos objetos que você mandou o código não tem Gato.

2 - Você instância um objeto do tipo Zoologico e utiliza um método setAnimais, mas na classe Zoologico que você postou não tem esse método.

3 - Quando você percorre os animais e tenta mostrar o som, tem um erro, o JOptionPane espera que você passe uma String e se você notar, seu método emitirSom retorna Void.

public void emitirSom()
{
    System.out.println("NHA NHA NHA!");
}

Fiz umas melhorias e corrigi algumas coisas, qualquer duvida só perguntar:

1 - Mudei o nome da classe que contem o método Main de Zoologico para TesteZoologico

2 - Mudei o nome da classe de Jaula para Zoologico

3 - Na classe Zoologico removi o Array de Jaula e criei um array de Animal[] e também criei dois construtores diferentes um onde quem instância pode passar a quantidade de jaulas e um padrão que começa com 5 posições como diz o exemplo.

4 - Mudei o método emitirSom() na Classe Animal e Subclasses para retornar uma String

public class Preguica extends Animal {

public String emitirSom() {
    return "sei la!";
}

}

5 - Na classe TesteZoologico para comparar o nome utilizei o método equalsIgnoreCase() da classe String.

6 - Para percorrer os Animais da classe Zooligico utilizei o foreach acho mais fácil para você entender a notação de objeto ao invés de "zoo.getAnimais()[i].som()"

Segue classes:


public class Animal {
    private String nome;
    private int idade;

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getIdade() {
        return idade;
    }

    public void setIdade(int idade) {
        this.idade = idade;
    }

    public String emitirSom() {
        return "NHA NHA NHA!";
    }
}

public class Cachorro extends Animal {

    public String emitirSom() {
        return "Auauauau";
    }
}

public class Preguica extends Animal {

    public String emitirSom() {
        return "sei la!";
    }

}

import javax.swing.JOptionPane;

/* 4 - Crie uma classe Zoologico, 
 * com 5 jaulas (utilize um array) coloque em cada jaula um animal 
 * diferente, percorra cada jaula e emita o som e, se o tipo de animal 
 * possuir o comportamento, faça-o correr.
 */

public class TesteZoologico {

    public static void main(String[] args) {

        int quantidade = 2;

        // Declara um Array de Animal de 4 posições
        Animal[] jaulas = new Animal[quantidade];

        // Preenche o Array de acordo com a entrada do usuário
        for (int i = 0; i < quantidade; i++) {
            String nome = JOptionPane.showInputDialog("qual o nome do bicho");
            // O Objeto String tem esse método que compara ignorando a caixa utilizada, daí
            // se o cara digitar cachorro ou CACHORRO vai dá certo.
            if (nome.equalsIgnoreCase("cachorro")) {
                Animal cachorro = new Cachorro();
                int idade = Integer.parseInt(JOptionPane.showInputDialog("Qual a idade"));
                cachorro.setIdade(idade);
                jaulas[i] = cachorro;
            } else {
                Animal preguica = new Preguica();
                int idade = Integer.parseInt(JOptionPane.showInputDialog("Qual a idade"));
                preguica.setIdade(idade);
                jaulas[i] = preguica;
            }

        }

        // Cria um objeto Zoologico passando a quantidade de posições do Array de Animal
        // (jaula) que queremos.
        Zoologico zoologico = new Zoologico(quantidade);
        // Seta o atributo Jaulas com o Array populado no primeiro for
        zoologico.setJaulas(jaulas);

        // Percorre o array de Animais emitindo o som e exibido a idade de cada um
        for (Animal animal : zoologico.getJaulas()) {

            JOptionPane.showMessageDialog(null, animal.emitirSom());
            JOptionPane.showMessageDialog(null, animal.getIdade());
        }

    }

}

public class Zoologico {
    private Animal[] jaulas;

    public Zoologico(int quantidade) {
        this.jaulas = new Animal[quantidade];
    }

    public Zoologico() {
        this.jaulas = new Animal[5];
    }

    public Animal[] getJaulas() {
        return jaulas;
    }

    public void setJaulas(Animal[] jaulas) {
        this.jaulas = jaulas;
    }

}

Esqueci de colocar isso mesmo. Obrigado novamente eduardo