Olá amigos,
Estou com um problema que não consigo resolver de jeito nenhum, por isso vim aqui!
Acho que ele é até simples, mas não tá saindo
Na hora que lanço uma exceção, gostaria que o programa não parasse (quando é digitado um valor inválido). Quando fosse inserido algo que a exceção pegue, ele volta com uma mensagem pedindo para o usuário digitar novamente… A questão é que já tentei colocar vários loops, e tudo sem sucesso.
Se alguem puder me ajudar, por favor, aprender na raça é teeenso!
Desde já agradeço!
Aqui está a parte do código, que me refiro:
[code]public static void cadastrarPessoa() throws CPFInvalidoException{
int opcao;
do{
System.out.print("Deseja cadastrar uma pessoa do tipo Fisica ou Juridica(Digite 1 para Fisica e 2 para Juridica)? ");
opcao = Integer.parseInt(scan.nextLine());
}while(opcao!=1&&opcao!=2);
if(opcao==1){
PessoaFisica pessoa = new PessoaFisica();
try {
System.out.print(PROMPT_NOME);
pessoa.setNome(scan.nextLine());
} catch(IllegalArgumentException e) {
System.out.print("O seguinte erro ocorreu: "+e.getMessage());
}
/*
* Bloco que serve para tratar a exceção do cpf
*/
try {
System.out.print(PROMPT_CPF);
pessoa.setCpf(scan.nextLine());
} catch (CPFInvalidoException e) {
System.out.print("Seguinte erro ocorreu: "+e.getMessage());}
[/code]
O cpf está validado da maneira que queria, só preciso mesmo é colocar um loop pra ele ver o erro, e aparecer “digite novamente o cpf”
Tentei colocar um ‘boolean testa = true’, mas sem sucesso.
Alguem poderia me dar uma luz?
A questão do boolean resolveu em partes!
Ele valida, e informa o erro, mas não volta pro usuário digitar a mensagem, ele continua executando o código com o cpf errado…
Mais alguma sugestão?
Coloca a captura do dado dentro do while.
Segue o exemplo do “Frantic Avenger” e coloca a captura em seguida a validação depois ajusta a variavel para true, caso a validação seja OK, vc continua caso gere a exceção ele volta no while novamente
Com isso, ele valida, tudo certinho… Mas não volta!
Informe o CPF: 221
Exception in thread "main" java.lang.IllegalArgumentException: CPF invalido
at PessoaFisica.setCpf(PessoaFisica.java:85)
at Teste.cadastrarPessoa(Teste.java:154)
at Teste.main(Teste.java:77)
Oque estou tentando fazer, é com que se digitarem errado, ele pede pra digitar novamente, aí quando for um algo válido, ele continue…
Com isso, ele valida, tudo certinho… Mas não volta!
Informe o CPF: 221
Exception in thread "main" java.lang.IllegalArgumentException: CPF invalido
at PessoaFisica.setCpf(PessoaFisica.java:85)
at Teste.cadastrarPessoa(Teste.java:154)
at Teste.main(Teste.java:77)
Oque estou tentando fazer, é com que se digitarem errado, ele pede pra digitar novamente, aí quando for um algo válido, ele continue…
Valeu![/quote]
Era para ele continuar no While quando vc digita errado.
O que extamente vc está validando no CPF?
Não visualizei esta mensagem " CPF invalido " em nenhuma excessão, devo estar com problema de vista ou não foi postado mesmo.
Pode postar o código completo para analisarmos?
Se não for um número com tantos digitos, e tais parametros, ele relata erro…
Quando eu coloco um cpf certo, ele não acusa nada e continua cadastrando.
O problema tá quando eu coloco algum errado.
Era pra ele perguntar, e continuar no while…
Não sei oque acontece! Diabos!
Por que então ao invés do seu validador gerar uma execessão ele não retorna somente um true ou false para seu while, desta forma você gera o loop e utiliza o seu validador como condição.
Eu fiz isto na minha aplicação… Segue o código abaixo.
(diga de passagem peguei o codigo aqui no forum)…
public boolean calculaCPF(String cpfNum) {
int[] cpf = new int[cpfNum.length()]; // define o valor com o tamanho da
// string
int resultP = 0;
int resultS = 0;
if (cpfNum.length() < 9) {
return false;
}
try{
// converte a string para um array de integer
for (int i = 0; i < cpf.length; i++) {
cpf[i] = Integer.parseInt(cpfNum.substring(i, i + 1));
}
}catch(NumberFormatException e){
e.printStackTrace();
return false;
}
// calcula o primeiro nmero(DIV) do cpf
for (int i = 0; i < 9; i++) {
resultP += cpf[i] * (i + 1);
}
int divP = resultP % 11;
// se o resultado for diferente ao 10 digito do cpf retorna falso
if (divP != cpf[9]) {
return false;
} else {
// calcula o segundo nmero(DIV) do cpf
for (int i = 0; i < 10; i++) {
resultS += cpf[i] * (i);
}
int divS = resultS % 11;
// se o resultado for diferente ao 11 digito do cpf retorna falso
if (divS != cpf[10]) {
return false;
}
}
// se tudo estiver ok retorna verdadeiro
return true;
}// fim do calcular cpf ==================================================
public boolean calculaCNPJ(String cnpjNum) {
int[] cnpj = new int[cnpjNum.length()];
int resultP = 0;
int resultS = 0;
int divP = 0;
int divS = 0;
if (cnpjNum.length() < 14) {
return false;
}
try {
// converte string para um array de integer
for (int i = 0; i < cnpjNum.length(); i++) {
cnpj[i] = Integer.parseInt(cnpjNum.substring(i, i + 1));
}
} catch (NumberFormatException e) {
e.printStackTrace();
return false;
}
int j = 6;
// calcula o primeiro div
for (int i = 0; i < 12; i++) {
resultP += cnpj[i] * j;
j++;
if (j > 9) {
j = 2;
}
}
divP = resultP % 11;
if (divP != cnpj[12]) {
return false;
} else {
j = 5;
// calcula o segundo div
for (int i = 0; i < 13; i++) {
resultS += cnpj[i] * j;
j++;
if (j > 9) {
j = 2;
}
}
divS = resultS % 11;
if (divS != cnpj[13])
return false;
}
return true;
}// fim do calcular CNPJ ==================================================
Mesmo sendo extenso, não há problema.
Não precisa postar todas as tuas classes, poste a que você efetua a validação do CPF, esta sim, faça o post completo do código
[quote=pmlm]Se tens um inteiro onde se usas 0 e 1 então deverias usar um boolean. [/quote]++
[quote=lleoaraujo]wellington.nogueira
Isso mesmo cara, fiz só um pouquinho diferente
não tinha visto sua resposta!
[=[/quote]
Legal que conseguiu, parabéns.