Duvida com Classes [RESOLVIDO]

6 respostas
L

Galera meu prof de java passou 1 trabalho aqui... vo botar parte dele 1 pedaço eu fiz qria saber se esta certo ^^ a outra parte eu n sei como fazer se alguem puder me dar umas dicas

Implementar uma classe Elemento e as classes filhas Papel, Pedra e Tesoura; todas no pacote exercicio.poo.regras. A classe Elemento deve ser declarada como abstrata [public abstract class Elemento()] - leia o artigo sobre classes abstratas, disponível no Moodle.

Criar um método abstrato combate, que retorne um int, e receba um Elemento como parâmetro. Este método será implementado pelas classes filha, onde testarão se o próprio elemento em combate com o passado por parâmetro, gera sua vitória ou derrota. Por ex: uma classe pedra recebe o elemento e testa, se ele for papel, pedra perde e retorna -1, se tesoura, pedra ganha e retorna 1, se pedra ocorre um empate, retornando 0.

public abstract class Elemento {
	public abstract void combate(int Elemento);
	
}

public abstract class Pedra extends Elemento {
	public void combate(){
		fight();
	}
	private void fight(){
		
	}
}
o papel e tesoura ja estao feitos eu sei q esta certo ^^

agora como fazer isso? alguem me da uma dica?
Este método será implementado pelas classes filha, onde testarão se o próprio elemento em combate com o passado por parâmetro, gera sua vitória ou derrota.Por ex: uma classe pedra recebe o elemento e testa, se ele for papel, pedra perde e retorna -1, se tesoura, pedra ganha e retorna 1, se pedra ocorre um empate, retornando 0.

6 Respostas

Roger75

Pode usar instaceof? Se puder acho que é por aí…

L

Na vdd eu tava pensando em fazer com if mais o prof falou q fica mto complicado… alguem tem 1 jeito + facil de resolver?

augustocolom
lisianoe:
Galera meu prof de java passou 1 trabalho aqui... vo botar parte dele 1 pedaço eu fiz qria saber se esta certo ^^ a outra parte eu n sei como fazer se alguem puder me dar umas dicas

Implementar uma classe Elemento e as classes filhas Papel, Pedra e Tesoura; todas no pacote exercicio.poo.regras. A classe Elemento deve ser declarada como abstrata [public abstract class Elemento()] - leia o artigo sobre classes abstratas, disponível no Moodle.

Criar um método abstrato combate, que retorne um int, e receba um Elemento como parâmetro. Este método será implementado pelas classes filha, onde testarão se o próprio elemento em combate com o passado por parâmetro, gera sua vitória ou derrota. Por ex: uma classe pedra recebe o elemento e testa, se ele for papel, pedra perde e retorna -1, se tesoura, pedra ganha e retorna 1, se pedra ocorre um empate, retornando 0.

public abstract class Elemento {
	public abstract void combate(int Elemento);
	
}

public abstract class Pedra extends Elemento {
	public void combate(){
		fight();
	}
	private void fight(){
		
	}
}
o papel e tesoura ja estao feitos eu sei q esta certo ^^

agora como fazer isso? alguem me da uma dica?
Este método será implementado pelas classes filha, onde testarão se o próprio elemento em combate com o passado por parâmetro, gera sua vitória ou derrota.Por ex: uma classe pedra recebe o elemento e testa, se ele for papel, pedra perde e retorna -1, se tesoura, pedra ganha e retorna 1, se pedra ocorre um empate, retornando 0.

Cara,
Quando você cria uma classe abstrata, deve criar dentro dela os métodos abstratos que serão usados pelas suas subclasses. Isso torna obrigatório a implementação dos métodos...

caio_ferreira

amigo, sua classe abstrata está errada, uma classe abstrata pode ter metodos abstratos e metodos não abstratos, mas os metodos abstratos não tem corpo, eles são feitos para as classes que estende a classe abstrata implementar. No seu caso está quase certo, mas vc passou como parametro um “int” e no caso vc deveria passar um “Elemento”, e retornar um “int”, mas no caso vc não retornou nada, pq declarou void.

metodo abstrato correto para a classe abstrata Elemento

public abstract int combate(Elemento elemento);

aqui está a classe Pedra, pra vc ter uma idéia, as outras vc implementa sozinho, é td a mesma coisa

public class Pedra extends Elemento {

    public int combate(Elemento elemento)// aqui vc ta implementando o metodo abstrato declarado na classe Elemento
    {
        if(elemento instanceof Papel) //a palavra reservada "instanceof" verifica se a variavel de referência é do tipo da classe do lado direito do instanceof, no caso a classe Papel
        {
            System.out.println("Pedra perdeu"); // se o elemento passado for um papel, então ele ganha da pedra, e retorna -1
            return -1;
        }
        else
            System.out.println("Pedra ganhou"); // se o elemento passado não for um papel então ele é uma tesoura, no caso a Pedra ganha e retorna 1
            return 1;

    }

}

ai no caso vc pode melhorar a classe e fazer mais um teste, para ver se o elemento é do mesmo tipo da classe, que no caso vai dar empate.

espero ter ajudado
luizalbsilva

Tem que ser usando class ou vc pode usar ENUM (que técnicamente tbm é uma classe)?

Tipo:

public enum JaKemPo {
	PEDRA, PAPEL, TESOURA;
	
	public static int compare(JaKemPo j1, JaKemPo j2){
		if (j1 == j2)
			return 0;
		if (j1==PEDRA) return (j2==PAPEL?1:-1);
		else if (j1==PAPEL) return (j2==TESOURA?1:-1);
		return j2==PEDRA?1:-1;
	}
}

Tipo de uso:

public class Teste{
	public static void main(String[] args) {
		System.out.println(JaKemPo.compare(PEDRA, PEDRA)); // Empare, deve retornar 0
		System.out.println(JaKemPo.compare(PAPEL, PEDRA));  // Elemento da esquerda ganha, retorna -1
		System.out.println(JaKemPo.compare(TESOURA, PEDRA)); // Elemento da direita ganha, retorna 1
	}
}

Como a quantidade de elementos dentro deste jogo é fixo, sem alterações, é a cara de usar uma enumeração.

L

Brigadao galera vcs sao 10! :smiley: vo terminar o negocio aqui :slight_smile:

Criado 29 de maio de 2010
Ultima resposta 30 de mai. de 2010
Respostas 6
Participantes 5