View Full Version : [Java] Ajuda a verificar se é numero


Sky_Boy_
04-03-2008, 12:49
Boas ppl...

Tou aqui com uma dificuldade neste prog...espero que alguem me possa ajudar..... o k kero verificar e se ao introduzir um codigo postal, os 4 caracteres a eskerda do hifen e os 3 a direita sao numeros.....

Obrigado desde ja a tods os que puderem ajudar

while(cp.length() != 8){
System.out.println("Código Postal: ");

try{
cp = teclado.readLine().trim();
}
catch(IOException ioe) {
System.err.println("Erro ao ler o teclado");
}
if (cp.length() == 8) {
if (cp.charAt(4) == '-') {
System.out.println("Temos hifen");
}
else{
cp="";
}
}

for(n=0; n<=3; n++){

if (cp.charAt(n) != isNumeric ) {
System.out.println("Introduza apenas caracteres numericos");
}

/*TODO: verificar se as restantes posições de
* código postal são algarismos...
*/

}
}


(Eu sei k isso ta mal mas colokei o isNumeric pa n m eskecer do k tenho de fazer.... :S)

Cumps

m00s
04-03-2008, 12:57
nao sei se há alguma função pra isso mas podes fazer a verificao deste modo:

(cp.charAt(n) >= '0' && cp.charAt(n) <= '9')

...atenção, não sei se o operador é &&.


cump's

Mavors
04-03-2008, 14:33
O operador é &&, mas estás é fazer uma condição de uma String com outra String, e ela não sabe o valor numérico, portanto não te vai retornar grande coisa.

Mas podes fazer assim:

if(Character.isDigit(cp.charAt(n)))
System.out.println("Está tudo ok");
else
System.out.println("Introduza apenas caracteres numericos");

ou podes usar a library de RegEx.

reise
04-03-2008, 14:39
Faz um parseInt e apanha a excepção NumberFormatException





String num_str = cp.substring(0,3)

try {
Integer.parseInt(num_str);
} catch (NumberFormatException ex) {
System.out.println("Not a number");
}

Mr. Brightside
04-03-2008, 14:43
Usa expressões regulares que é o mais simples nesta situação. :)

rj123
04-03-2008, 14:44
boolean cpValido = true;

do{
System.out.println("Código Postal: ");
try{
cp = teclado.readLine().trim();
}
catch(IOException ioe) {
System.err.println("Erro ao ler o teclado");
}
}while(cp.length() != 8);

if (cp.charAt(4) != '-') {
System.out.println("Não foi encontrado hifen");
cp="";
cpValido = false;
}

for(n=0; cpValido && n<=3 ; n++){
if (cp.charAt(n) <= '0' && cp.charAt(n) >= '9') {
System.out.println("Introduza apenas caracteres numericos");
cpValido = false;
}
}

for(n=5 ; cpValido && n<=8 ; n++){
if (cp.charAt(n) <= '0' && cp.charAt(n) >= '9') {
System.out.println("Introduza apenas caracteres numericos");
cpValido = false;
}
}



ps: usa a tag ["code"]["/code"] (sem "")

arkannis
04-03-2008, 16:09
Usa expressões regulares que é o mais simples nesta situação. :)

Wise post :x2:


Como substituir esses km de linha que aí puseram por uma só! :


//codPostal é a String com o codigo postal
boolean match = codPostal.matches("(\\d{4}-\\d{3})");
Sim, é só isto! :D

reise
04-03-2008, 16:33
Por acaso não me lembrei de expressões regulares! Muito bem.
Já em muitas vezes me pouparam resmas de código.

Sky_Boy_
04-03-2008, 16:57
boolean cpValido = true;

do{
System.out.println("Código Postal: ");
try{
cp = teclado.readLine().trim();
}
catch(IOException ioe) {
System.err.println("Erro ao ler o teclado");
}
}
while(cp.length() != 8);

if (cp.charAt(4) != '-') {
System.out.println("Não foi encontrado hifen");
cp="";
cpValido = false;
}

for(n=0; cpValido && n<=3 ; n++){
if (!(cp.charAt(n) <= '0' && cp.charAt(n) >= '9')) {
System.out.println("Introduza apenas caracteres numericos");
cpValido = false;
}

}

for(n=5 ; cpValido && n<=7 ; n++){
if (!(cp.charAt(n) <= '0' && cp.charAt(n) >= '9')) {
System.out.println("Introduza apenas caracteres numericos");
cpValido = false;


}
}

Ele assim faz o k eu kero...o problema e que nao consigo ke ele volte a pedir o cod postal, avançando logo para a localidade.....

obgd dd ja a tds pela ajuda

reise
04-03-2008, 17:45
não achas mais fácil assim?

do{
System.out.println("Código Postal: ");
try{
cp = teclado.readLine().trim();
} catch(IOException ioe) {
System.err.println("Erro ao ler o teclado");
}
}
while(cp.length() != 8);

boolean cpValido = cp.matches("(\\d{4}-\\d{3})");

Quanto à outra dúvida não percebi o que queres fazer.

Sky_Boy_
04-03-2008, 17:48
é assim eu kero k ele kando ñ introduzo correctamente o código postal me volte a pedir para o introduzir...

Sky_Boy_
04-03-2008, 19:14
não achas mais fácil assim?

do{
System.out.println("Código Postal: ");
try{
cp = teclado.readLine().trim();
} catch(IOException ioe) {
System.err.println("Erro ao ler o teclado");
}
}
while(cp.length() != 8);

boolean cpValido = cp.matches("(\\d{4}-\\d{3})");

Quanto à outra dúvida não percebi o que queres fazer.



Corrige-me se estiver em erro....mas essa condição nao reconhece se se introduz numeros ou letras.... por exemplo.... se introduzir aaaa-aaa ou 1111-111 ele corre na mm...

Mr. Brightside
04-03-2008, 19:18
Corrige-me se estiver em erro....mas essa condição nao reconhece se se introduz numeros ou letras.... por exemplo.... se introduzir aaaa-aaa ou 1111-111 ele corre na mm...
http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html

"\d" apenas aceita algarismos. ;)

Sky_Boy_
04-03-2008, 19:26
pois mas o meu prob e k mm ke eu insira AAAA-AAA ele passa a frente....n devia :S

arkannis
04-03-2008, 19:44
pois mas o meu prob e k mm ke eu insira AAAA-AAA ele passa a frente....n devia :S

Epá, eu testei a expressao regular que ali pus e funcionou para todos os casos possiveis!
Já agora, não estou a perceber bem para que é que queres esse codigo todo para ler do teclado.

Olha aqui a sugestao muito mais simples e bonita:


String codPostal = "";
Scanner sc = new Scanner(System.in);
do {System.out.print("Insira o código postal: ");
codPostal = sc.nextLine();
} while(!codPostal.matches("(\\d{4}-\\d{3})"));


Tenho quase a certeza que isto faz tudo o que tu queres.

Sky_Boy_
04-03-2008, 19:53
Qd vieres a coimbra pago-te um copo xD

Problema resolvido

Obgd a todos