Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: cris0710 en 16 de Abril 2021, 21:47
-
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.
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);
}
}
-
Hola.
El método split() no te va a servir en este caso:
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í:
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.
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.
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.
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;
}
}