Boa tarde, no algoritmo abaixo, eu tenho que verificar se o CPF contém somente números. Ocorre que se eu digitar o CPF errado como por exemplo: 123K5678901, o algoritmo verificar que não contém somente número mas não volta a solicitá-lo novamente, pois é essa a intenção. No primeiro IF que onde se verifica que o CPF deve ter 11 dígitos, funcionou perfeitamente, ou seja, se eu digito um CPF com menos ou mais de 11 dígitos, o algoritmo solicita novamente até eu preencher corretamente a quantidade. Poderiam me ajudar?
import javax.swing.JOptionPane;
public class CPF {
public static void main(String[] args) {
String cpf = "";
while (true) {
cpf = JOptionPane.showInputDialog("Informe seu CPF");
byte i=0;
if (cpf == null || cpf.trim().length() == 0)System.exit(0);
if (cpf.length() < 11 || cpf.length() > 11) {
JOptionPane.showMessageDialog(null, "CPF inválido");
continue;
}else {
for (cpf.charAt(i); i<11; i++) {
if ((byte)cpf.charAt(i) < 47 || (byte)cpf.charAt(i) > 58){
JOptionPane.showMessageDialog(null, "Só pode ter números");
continue;
}
}
}
break;
}
JOptionPane.showMessageDialog(null, cpf);
System.exit(0);
}
}
Eu não entendi o papel do while(true) e um break no final. Se vai quebrar na primeira execução, não precisa do while
Eu não entendi por que você tem um for
Você quer validar o CPF por algum algoritmo mais completo (ex: Validar CPF) ou só quer verificar se ele só possui números?
Um jeito simples é remover pontos e traços da String e tentar convertê-la pra Long. Se a conversão falhar, é porque há caracteres que não são numéricos. Ex:
Obrigado. No meu FOR a única maneira que pensei era varrendo carácter por carácter, o que deu certo, embora, assim como o algoritmo de conversão para long removendo pontos e traços deu certo, também achei muito bom esse seu jeito. Não sabia inclusive que poderia utilizar o FOR dessa maneira (ainda estou aprendendo).
Vou rever o conceito de CONTINUE e BREAK nesse final de semana. Pois a intenção é continuar a mostrar “Informe o CPF” enquanto não tiver 11 caracteres e enquanto não tiver somente números.
Eu até digito o CPF com uma letra por exemplo, ele me mostra a mensagem de erro, mas sai da estrutura de repetição WHILE, ou seja, o CONTINUE não funciona.