Duvida na Classe main

10 respostas
henry.everton

Estou com uma dúvida de iniciante em desenvolvimento aqui, bom é o seguinte:

estou fazendo um jogo da velha com todos os atributos de minha classe private, que fazer encapsulamento. Mas fiquei com uma dúvida:
** Para voce inserir dos dados para os atributos private eu preciso valida-los e depois chamar o método set. Para isso eu teria que criar uma variável publica na classe main. Este conceito é correto? Digo, é correto voce ter variáveis publicas ou 1 unica variável publica que ira servir para a inserção de dados em um atributo private?

espero ter formulado a pergunta de forma que entendam.

Desde já agradeco

10 Respostas

davidbuzatto

Não use campos públicos para inserir dados no seu objeto!
Você valida os dados dentro do set.

Por exemplo:

private String nome;

// nome deve ter no máximo 20 caracteres e não ser nulo
public void setNome( String nome ) {
    if ( nome == null ) {
        this.nome = "Sem nome"; // ou pode lançar uma excessão...
    } else {
        if ( nome.length() > 20 )
            this.nome = nome.substring( 0, 21 );
        else
            this.nome = nome;
    }
}

Até mais!

neohacker

Porque você não faz a validação dentro do set.
Se estiver tudo ok, você realmente efetiva o set, se não pode dar algum aviso.

henry.everton

mas, assim que de uma excessão como voce ira pedir pro usuário digitar novamente?
digo como voce irá, chamar um objeto, validar o dado dentro dele e caso de errado retornar a pedir novamente?

Ou eu poderia fazer assim, toda solicitação de dados eu faço dentro do objeto, e utilizo a main só para instanciar o objeto para ser executado?

davidbuzatto

Dentro do main??????????

private String nome;

// nome deve ter no máximo 20 caracteres e não ser nulo
public void setNome( String nome ) throws IllegalArgumentException {
    if ( nome == null ) {
        throw new IllegalArgumentException( "Nome não pode ser nulo" );
    } else {
        if ( nome.length() > 20 )
            this.nome = nome.substring( 0, 21 );
        else
            this.nome = nome;
    }
}

// agora onde vc usa o setNome
.
.
.
try {
    setNome( "O nome vem aqui..." );
} catch ( IllegalArgumentException exc ) {
    // avisa o usuário que o valor está incorreto.
}
henry.everton

mas, assim que de uma excessão como voce ira pedir pro usuário digitar novamente?
digo como voce irá, chamar um objeto, validar o dado dentro dele e caso de errado retornar a pedir novamente?

Ou eu poderia fazer assim, toda solicitação de dados eu faço dentro do objeto, e utilizo a main só para instanciar o objeto para ser executado?

diego2005

Depende. Como você tá fazendo a entrada de dados?? Através de uma interface, ou pelo console???

T+

henry.everton

entao vou fazer via console!!!

diego2005

Então, tem várias maneiras de fazer isso. Uma é você controlar isso através de um loop, seria + - assim:

boolean dadosOk = false; while(!dadosOk) { try { // aqui você lê os valores // se não lançou nenhuma exceção, os dados estão ok dadosOk = true; } catch ( IllegalArgumentException exc ) { // avisa o usuário que o valor está incorreto. } }

henry.everton

ha esta era minha duvida…

é que lançar catch pra tudo nao sei como ficaria né, mas se tratando desta forma ficou legal…

somente seta os dados se o set for true.

henry.everton

eu poderia fazer desta forma certo?

main

public class Teste{
	public static void main(String args[]){
	
		Jogadores jogadores = new Jogadores();
		
		
		jogadores.setJogador1();
		}
	}

classe jogadores

import java.util.*;
public class Jogadores{
	
	/*####################################################################################
    	#	Variaveis                                                                    #
  	#####################################################################################*/
	
	private String jogador1 = null;
public void setJogador1(){
		while(jogador1 == null){
		System.out.println("Digite o nome do primeiro jogador:");
		Scanner jogador1 = new Scanner(System.in);
			if(jogador1 == null){
			System.out.println("O campo nome não pode ser nulo!!!");
			}
			else{
			this.jogador1 = jogador1;
			}
		}
		}
Criado 19 de julho de 2007
Ultima resposta 19 de jul. de 2007
Respostas 10
Participantes 4