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.
Não use campos públicos para inserir dados no seu objeto!
Você valida os dados dentro do set.
Por exemplo:
privateStringnome;// nome deve ter no máximo 20 caracteres e não ser nulopublicvoidsetNome(Stringnome){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);elsethis.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??????????
privateStringnome;// nome deve ter no máximo 20 caracteres e não ser nulopublicvoidsetNome(Stringnome)throwsIllegalArgumentException{if(nome==null){thrownewIllegalArgumentException("Nome não pode ser nulo");}else{if(nome.length()>20)this.nome=nome.substring(0,21);elsethis.nome=nome;}}// agora onde vc usa o setNome...try{setNome("O nome vem aqui...");}catch(IllegalArgumentExceptionexc){// 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…
importjava.util.*;publicclassJogadores{/*#################################################################################### # Variaveis # #####################################################################################*/privateStringjogador1=null;publicvoidsetJogador1(){while(jogador1==null){System.out.println("Digite o nome do primeiro jogador:");Scannerjogador1=newScanner(System.in);if(jogador1==null){System.out.println("O campo nome não pode ser nulo!!!");}else{this.jogador1=jogador1;}}}