Autor Tema: Java código que evalue número de teléfono (validación) split crear array números  (Leído 4026 veces)

cris0710

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 17
    • Ver Perfil
Hola, este es un proyecto en el que he estado trabajando. Quiero realizar un código que lea una cadena introducida y te compruebe que esa cadena introducida sean todos números, que la cadena introducida tenga una longitud de 10 digitos y por último que compruebe que la cadena introducida siempre inicie con 322. Estuve revisando algunos ejemplos para la comprobación de que sean numéricos todos los datos pero no lo entendí muy bien y no me funciona. Tal vez hay una solución más simple que la que estoy poniendo en mi código. Espero y puedan ayudarme Saludos.

Código: [Seleccionar]
import java.util.*;// importa todas las librerias de utilidad para leer en teclado

public class Numeros {
 
  public static void main(String[] args) {
        Scanner scn = new Scanner(System.in);
        String cadena ="";
 
        while (!cadena.equals("salir")){
            if (!cadena.equals("salir")) {
                System.out.println("\n\t Ingresa el numero telefonico con el formtato que se indica");
                System.out.println("\t 322xxxxxx");
                System.out.println("\t Escriba \"salir\" para terminar programa");
                System.out.print("\n\t Cadena: ");
                cadena = scn.nextLine();
                String[] partes = cadena.split(",");
           
                if (partes.length == 10){
                    if (comprobarNum(partes[0]) && comprobarNum(partes[1]) && comprobarNum(partes[2]) && comprobarNum(partes[3]) && comprobarNum(partes[4])
                       && comprobarNum(partes[5]) && comprobarNum(partes[6]) && comprobarNum(partes[7]) && comprobarNum(partes[8]) && comprobarNum(partes[9])) {//if 1 comprobar el dia de la semana
                       System.out.println("\n \t"+partes[0] + " no es un numero.");
                    }else{
                        System.out.println("\n \t  se encontro un digito introducido que no era un numero.");
                }
            }
            else //No hemos obtenido 10 partes
                System.out.println("La cadena ingresada es incorrecta favor de verificar el formato \n");
        }
       
        System.out.println("Fin de programa");
    }
   
      //Declaracion metodo comprobarSemana
        public static boolean comprobarNumeros(String num) {
         String str = cadena;
        boolean isNumeric = true;
        for (int i = 0; i < str.length(); i++) {
            if (!Character.isDigit(str.charAt(i))) {
                isNumeric = false;
            }
        }
        System.out.println(isNumeric);
    }
   
   
}
« Última modificación: 12 de Abril 2022, 19:15 por Alex Rodríguez »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: Java: Codigo que evalue un numero de telefono
« Respuesta #1 en: 17 de Abril 2021, 09:42 »
Hola.

El método split() no te va a servir en este caso:
Código: [Seleccionar]
String[] partes = cadena.split(",");
Esto lo que hace es dividir una cadena, siempre que esta contenga la subcadena que especificamos entre comillas.
Es decir, para que te sirviera, habría que introducir el número de teléfono así:
Citar
3,2,2,1,2,3,4,5,6,7

Entonces, split(",") sí que podría crear un array con todos los dígitos separados.

De todos modos, no lo necesitas para lo que quieres resolver.


Otro fallo importante a destacar está en el método de comprobarNumeros, pues está declarado como tipo boolean, pero no retorna ningún valor.
Citar
        public static boolean comprobarNumeros(String num) {
         String str = cadena;
        boolean isNumeric = true;
        for (int i = 0; i < str.length(); i++) {
            if (!Character.isDigit(str.charAt(i))) {
                isNumeric = false;
            }
        }
        System.out.println(isNumeric);
    }

Al final del método lo único que hace es mostrar en pantalla el valor del boolean isNumeric, pero no lo retorna. Así que el compilador de Java no lo va a aceptar, si el método se declara como tipo boolean, ha de retornar un valor boolean obligatoriamente.

Además, eso es lo que realmente necesitas. No sirve de mucho que en pantalla se muestre "true" o "false", lo que necesitas es que ese valor sea retornado para poder tomar decisiones dentro del código.

Citar
        public static boolean comprobarNumeros(String num) {
         String str = cadena;
        boolean isNumeric = true;
        for (int i = 0; i < str.length(); i++) {
            if (!Character.isDigit(str.charAt(i))) {
                isNumeric = false;
            }
        }
        return isNumeric;
    }


Te dejo este código, bastante parecido en realidad al que estabas proponiendo, pero corrigiendo lo mencionado y cambiando algunos enfoques.
Asegúrate de que entiendes cada línea, si no es así, no dudes en preguntar cualquier cosa.

Un saludo.

Código: [Seleccionar]
public class EvaluaTelefono {

public static void main(String[] args) {

Scanner scn = new Scanner(System.in);
        String cadena ="";
 
        while (!cadena.equals("salir")) {
       
        System.out.println("\n\t Ingresa el numero telefonico con el formato que se indica");
            System.out.println("\t 322xxxxxx");
            System.out.println("\t Escriba \"salir\" para terminar programa");
            System.out.print("\n\t Cadena: ");
            cadena = scn.nextLine();
       
        if (!cadena.equals("salir")) {
                //Comprobamos si tiene 10 caracteres
                if (cadena.length() != 10) {
                System.out.println("El número ha de tener 10 cifras");
                }
                else if (!todoDigitos(cadena)) { //Comprobamos si todo son digitos
                System.out.println("El número ha de estar compuesto solo por dígitos");
                }
                else if (!cadena.startsWith("322")) { //Comprobamos si comienza por 322
                System.out.println("El número ha de comenzar por 322");
                }
                else { //Todas las comprobaciones han sido superadas
                System.out.println("El número es correcto");
                }
        }
        }
       
        scn.close();
        System.out.println("\n\t\tFIN DE PROGRAMA");

}

public static boolean todoDigitos(String cadena) {
//Recorremos cada caracter de la cadena a ver si son dígitos
for (int i = 0; i < cadena.length(); i++) {
if (!Character.isDigit(cadena.charAt(i)))
return false; //Si encontramos un caracter "no dígito" retornamos false
}
//Si el bucle for termina sin haber retornado false, es que TODOS son dígitos
return true;
}

}
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".