Como validar um campo numérico?

0 respostas
M

Amigos, para aprendizado, desenvolvi um código, onde formulo uma conta para um controle que preciso, , baseado na entrada de algums dados, como dia, mes, hora, minutos, ano, código de usuário, ( chave ) é um numero gerado pelo meu programa ) ( comando ) também um numero gerado pelo meu programa e ( licencas ) também gerado pelo meu programa. bom, entro com esses dados, e para validar um campo numérico, se foi preenchido ou não, , estou tratando com try catch, mas, por exemplo, o que aprendi foi, não se deve usar o try em RunTimeException. ou, não se trata erros em tempo de execução com try/catch . o que quero saber,
entendi errado ? estou falando besteira ? como poderia tratar por exemplo, tratar isto, em um campo usando o while, for, ou outra maneira.

classe codigoAcesso

import javax.swing.*;
public class codigoAcesso {
	
	int dia, mes, hora, minutos , minuto, ano, codigoUsuario, comando, chave, licencas , 
		totalSomaDia , divisaoAnoChave , somaChave, somaGeral , somaLicenca ;
	
	String DIA, MES , HORA , MINUTOS , ANO , CODIGOUSUARIO, COMANDO , CHAVE , LICENCAS ;
	
	codigoAcessoErros aviso ;
	codigoAcessoErros numero ;
	
	JOptionPane mensagem = new JOptionPane();
	
	
		
		public codigoAcesso() {
			
			aviso = new codigoAcessoErros();
			numero = new codigoAcessoErros();
			
			
			DIA = "" ;  MES = "" ; HORA = "" ; MINUTOS = "" ; ANO = "" ; 
			CODIGOUSUARIO = "" ; CHAVE = "" ; LICENCAS = "" ; COMANDO = "" ; 
			
			dia = '0';	mes = '0';	hora = '0';	minutos = '0';	ano = '0';	
			codigoUsuario = '0'; chave = '0'; licencas = '0'; comando = '0';
			
		}
		
		public void dadosCodigoAcesso() {
		    setDia();
 			setMes();
			setHora();
			setMinutos();
			setcodigoUsuario();
			setAno();
			setcomando();
			setChave();
			setLicencas();
			
		}
		
		public void setDia() {
			
			dia = numero.solicitaNumeroReal("Digite o dia");
			
		}
		
		public void setMes() {
			mes = numero.solicitaNumeroReal("Digite o mês");
			
		}
		
		public void setHora() {
			hora = numero.solicitaNumeroReal("Digite a Hora");
			
		}
		
		public void setMinutos() {
			minutos = numero.solicitaNumeroReal("Digite os Minutos");
				if ((minutos > 0) && (minutos < 9))
					minutos = 0 ;
				else
					minuto = minutos-(minutos%10);
		}
		
		public void setAno() {
			ano = numero.solicitaNumeroReal("Digite o Ano");
			
		}
		
		public void setcodigoUsuario() {
			codigoUsuario = numero.solicitaNumeroReal("Digite o código de usuário");
			CODIGOUSUARIO = Integer.toString(codigoUsuario);
			codigoUsuario = Integer.parseInt(CODIGOUSUARIO.substring(1,CODIGOUSUARIO.length()));
			
		}

		public void setcomando() {
			comando = numero.solicitaNumeroReal("Digite o comando");
			
		}
		
		public void setChave() {
			chave = numero.solicitaNumeroReal("Digite a chave");
			
		}
		
		public void setLicencas() {
			licencas = numero.solicitaNumeroReal("Quantidade de licencas");
			
		}
		
		public int getLicencas() {
			licencas = licencas * 2 ;
			return licencas;
		
		}
		
		public int getComando() {
		//	comando = Integer.parseInt(COMANDO); não converter se o JOptPane ja receber em inteiro, o setComando = numero.solicitaNumeroReal
			return comando;
		
		}
		
		
		public int getcodigoUsuario () {
			//codigoUsuario = codigoUsuario ;
			return codigoUsuario;
		
		}
		
		public int getAno() {
			return ano;
		
		}
		
		public int getHora() {
			return hora;
		
		}
		
		public int getMinutos() {
			 minutos = minuto ;
			return minutos;
			
		}
		
		
		public int getDia() {
		//	DIA = Integer.toString(dia);
			return dia;
			
		}
		
		public int getMes() {
		//	MES = Integer.toString(mes);
			return mes ;
			
		}
		
		public int getChave() {
			return chave;
			
		}
		
		
		public int getSoma() {
			int soma = dia + mes + hora + minutos ;
			totalSomaDia = soma * soma ;
			divisaoAnoChave = chave / ano ;
			somaChave = divisaoAnoChave + chave ;
			somaLicenca = licencas * 2 ;
			somaGeral = totalSomaDia + somaLicenca + somaChave + comando + ano ;
			
			 
			return soma ;
			
		}
		
		public void mostraCodigoAcesso() {
			
		    mensagem.showMessageDialog(null, " Dia : " +getDia() + " Mês : " + getMes() + " Hora : " + getHora() + " Minutos : " + getMinutos()
		    		 					   + " \n Ano : " +getAno() + " Código do Usuário : " + getcodigoUsuario() + " Comando : " + getComando()
		    		 					   +  "\n Licencas: " + getLicencas() + " Chave : " + getChave() + "\n\n SOMA É : " +getSoma()
		    		 					   +  "\n Código de Acesso é : " +somaGeral); 
			
		}
	

}

a classe que trata os erros.

import javax.swing.JOptionPane;

public class codigoAcessoErros {
	
	private String aviso;
	private int numero;

	JOptionPane erro = new JOptionPane();
	
		
	public codigoAcessoErros() {
		numero = 0;
	}
	
	public String getString() {
		return aviso;
		
	}
	
	public int getNumero() {
		return numero;
		
	}
	
	public String solicitaString(String mensagem) {
		
		for (;;) {
			try {	
				
				aviso = JOptionPane.showInputDialog(mensagem) ; // caso a string seja diferente de vazio, interrompe o laço
				 if (!aviso.trim().equals(""))
					break;
				JOptionPane.showMessageDialog(null, "Preenchimento obrigatório, o campo \nnão pode ficar em branco !!" +
													"","Mensagem de erro", JOptionPane.ERROR_MESSAGE );
				} catch ( java.lang.NumberFormatException e) {
					
					aviso = JOptionPane.showInputDialog(null,"Outro erro,!\nDigite novamente !",JOptionPane.ERROR_MESSAGE);
			}
		}
		return aviso;
	}
	
	
	public int solicitaNumeroReal (String mensagem) {
		for(;;) { //laço infinito, somente o break para
			int selecionado;
			Object[] options = {"OK","CANCELAR"};
			
			try {
				numero = Integer.parseInt(solicitaString(mensagem)); 				// JOptionPane.showInputDialog(null,numero);
				
				break; 
				} catch ( NumberFormatException e) {
					JOptionPane.showMessageDialog(null, "incorreto, entre com um \nvalor numérico válido !!" 
							+ "","Mensagem de erro", JOptionPane.ERROR_MESSAGE );
					
					erro.showOptionDialog(null, "Incorreto, entre somente\n com um valor numérico !!","Mensagem de erro",
										 JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,null, options, options[0]);
				
				} catch ( NullPointerException e) {
							JOptionPane.showMessageDialog(null, "o programa sera finalizado !!" 
									+ "","Mensagem de erro", JOptionPane.ERROR_MESSAGE );
							System.exit(0);
			}
		}
		return numero;
	}
}

 // desta forma esta errado, não fazer try em run time exception.

/*
int selecionado;
Object[] options = {"OK","CANCELAR"};
				/*
				selecionado = JOptionPane.showOptionDialog(null,"Clique OK para Continuar", "aviso",JOptionPane.DEFAULT_OPTION, 
						  JOptionPane.WARNING_MESSAGE,null, options, options[0]);
			
				if ( selecionado == 0)
					JOptionPane.showMessageDialog(null," clicou no ok ");

					 else {
					JOptionPane.showMessageDialog(null," clicou no cancelar ");
					 return aviso;					
				}
				*/

a classe TesteCodigoAcesso

public class testeCodigoAcesso {

	public static void main(String[] args) {
		
		codigoAcesso codigo = new codigoAcesso();
		
			codigo.dadosCodigoAcesso();
			codigo.mostraCodigoAcesso();
		
	}
	
}
Criado 25 de agosto de 2011
Respostas 0
Participantes 1