Dúvida, chamar método outra classe

10 respostas
C

Galera,
to com um probleminha…

Tenho uma classe Dado, uma Jogador, e um Main

no main coloquei assim

Jogador1.Jogadado();

jogador1 = objeto da classe jogador
e jogadado = método classe dade…

mas o eclipse acusa erro, o que ser?

10 Respostas

walissongpi

[quote=.com]Galera,
to com um probleminha…

Tenho uma classe Dado, uma Jogador, e um Main

no main coloquei assim

Jogador1.Jogadado();

jogador1 = objeto da classe jogador
e jogadado = método classe dade…

mas o eclipse acusa erro, o que ser?[/quote]

Onde se encontra o método jogadado(); ? Qual erro o eclipse apresenta?

C
public class Dado {

	    private int quantidadeLados;
	    private String cor;

	    public Dado(int qntLados, String cor){
	        this.quantidadeLados = qntLados;
	        this.cor = cor;
	    }

	    public int getQuantidadeLados(){
	        return this.quantidadeLados;
	    }
	    
	    public String getCor(){
	        return this.cor;
	    }
	   
	    public void setQuantidadeLados(int qntLados){
	        this.quantidadeLados = qntLados;
	    }   
	    
	    public void setCor(String cor){
	        this.cor = cor;
	    }
	    
	   //Método para jogar o dado retorna o valor da jogada
	    public int jogaDado(){
	        return (int) (Math.random() * quantidadeLados + 1);
	    }
}
Na Classe Main
Teclado t = new Teclado();
    String jogador1 = t.leString("Informe o nome do Jogador 1: ");
    String jogador2 = t.leString("Informe o nome do Jogador 2: ");
    
    //Criando os jogadores
    Jogador a = new Jogador(jogador1, 0, dadoBranco, dadoVermelho);
    Jogador b = new Jogador(jogador2, 0, dadoBranco, dadoVermelho);

    a.JogaDados();
walissongpi
.com:
public class Dado {

	    private int quantidadeLados;
	    private String cor;

	    public Dado(int qntLados, String cor){
	        this.quantidadeLados = qntLados;
	        this.cor = cor;
	    }

	    public int getQuantidadeLados(){
	        return this.quantidadeLados;
	    }
	    
	    public String getCor(){
	        return this.cor;
	    }
	   
	    public void setQuantidadeLados(int qntLados){
	        this.quantidadeLados = qntLados;
	    }   
	    
	    public void setCor(String cor){
	        this.cor = cor;
	    }
	    
	   //Método para jogar o dado retorna o valor da jogada
	    public int jogaDado(){
	        return (int) (Math.random() * quantidadeLados + 1);
	    }
}
Na Classe Main
Teclado t = new Teclado();
    String jogador1 = t.leString("Informe o nome do Jogador 1: ");
    String jogador2 = t.leString("Informe o nome do Jogador 2: ");
    
    //Criando os jogadores
    Jogador a = new Jogador(jogador1, 0, dadoBranco, dadoVermelho);
    Jogador b = new Jogador(jogador2, 0, dadoBranco, dadoVermelho);

    a.JogaDados();
Hum... legal. esse método (jogaDados) existe dentro da classe Jogador? O que tem dentro deste método? Ele é publico, private, protected?
C

O jogadados é public

mas ele tá na classe dado.

yatta

Qual o erro que o eclipse acusa??

Põe a classe jogador ai tambem para analisarmos.

^^

walissongpi

[quote=.com]O jogadados é public

mas ele tá na classe dado.[/quote]
então vc está chamando um metodo de um objeto Dado atravéz de um objeto jogador…

Acho q seria isso:

a.dadoBranco.JogaDados();
a.dadoVermelho.JogaDados();

como disse o amigo acima, vc deve colocar a sua classe jogador para podermos visualizar o seu problema.

C

[/code]A classe jogar

[code]
public class Jogador {
//atributos da classe
private String nome;
private int qntPontos;
private Dado dado;
private Dado dado2;

//Construtor, inicializar os atributos
public Jogador(String nome, int qntPontos, Dado dado, Dado dado2){
this.nome = nome;
this.qntPontos = 0;
this.dado = dado;
this.dado2 = dado2;
}
}

Tentei o
a.dadoBranco.JogaDados();
a.dadoVermelho.JogaDados();
mas no eclipse diz "Syntax error on token "jogaDado", identifier expected after this tokenn

ai aii aii

walissongpi

Esse erro aparece quando o eclipse não concegue reconhecer o token (nesse caso o nome do método digitado). Teoricamente isso é algum erro de digitação ou a opção q te disse acima. Eu compilei aqui e modifiquei um pouquinho (sem tirar seu mérito). :D
veja:

na classe Jogador adicionei o método jogaDados();
public class Jogador {
//atributos da classe
private String nome;
private int qntPontos;
private Dado dado;
private Dado dado2;

//Construtor, inicializar os atributos
public Jogador(String nome, int qntPontos, Dado dado, Dado dado2){
this.nome = nome;
this.qntPontos = 0;
this.dado = dado;
this.dado2 = dado2;
}

public void jogaDados(){//esse aqui.
    int n=dado.jogaDado();
    int n2=dado2.jogaDado();
    System.out.println("dado "+dado.getCor()+": "+n);
    System.out.println("dado "+dado2.getCor()+": "+n2);
}
}
A classe Dado permanece intacta.
public class Dado {

        private int quantidadeLados;
        private String cor;

        public Dado(int qntLados, String cor){
            this.quantidadeLados = qntLados;
            this.cor = cor;
        }

        public int getQuantidadeLados(){
            return this.quantidadeLados;
        }

        public String getCor(){
            return this.cor;
        }

        public void setQuantidadeLados(int qntLados){
            this.quantidadeLados = qntLados;
        }

        public void setCor(String cor){
            this.cor = cor;
        }

       //Método para jogar o dado retorna o valor da jogada
        public int jogaDado(){
            return (int) (Math.random() * quantidadeLados + 1);
        }
}

e criei uma classe main separada (fica mais bonito e limpo).

public class Main {

  
    public static void main(String[] args) {
    String jogador1 = "walisson";
    String jogador2 = "outraPessoa";
    Dado dadoBranco = new Dado(6,"branco");
    Dado dadoVermelho = new Dado(6,"vermelho");

    //Criando os jogadores
    Jogador a = new Jogador(jogador1, 0, dadoBranco, dadoVermelho);
    Jogador b = new Jogador(jogador2, 0, dadoBranco, dadoVermelho);

    a.jogaDados();
    b.jogaDados();
    }

}

Ein me responda uma coisa: Isso é pra que mesmo? 8)

C

bah cara funcionou mesmo…

valeu , só não entendi mto bem o pq ter um jogaDados na classe jogador,
entendi o que o método faz e tudo mais… mas pq não pode acessar o jogaDado da classe Dado
desde já, valeuuu!

walissongpi

[quote=.com]bah cara funcionou mesmo…

valeu , só não entendi mto bem o pq ter um jogaDados na classe jogador,
entendi o que o método faz e tudo mais… mas pq não pode acessar o jogaDado da classe Dado
desde já, valeuuu![/quote]

Vamos recapitular. A sua classe Jogador (antiga) não possui o método jogaDados();. Ela possui dois objetos Dados. O método jogaDados() está declarado na classe Dado, logo vc não pode chamar este método a partir de um objeto Jogador, como vc tinha feito acima -> a.JogaDados();

A maneira que te falei também não funcionaria pq os dois objetos Dados na classe jogador são privados, não podendo acessar a partir de outra classe. -> a.dado.jogaDados().

Outra maneira de fazer isso funcionar seria vc criar os métodos getDado() e getDado2(). Assim vc poderia chamar os métodos referentes aos dados.

-> a.getDado().jogaDados();

-> a.getDado2().jogaDado();
Criado 2 de maio de 2010
Ultima resposta 3 de mai. de 2010
Respostas 10
Participantes 3