Posible solución Excepciones Ejercicio 1
Ir a la navegación
Ir a la búsqueda
Clase ConversionNumeroException
1 package EjerciciosPOO.excepciones.ejercicio1; 2 3 /** 4 * 5 * @author clase 6 */ 7 public class ConversionNumeroException extends Exception{ 8 9 public ConversionNumeroException(String msg){ 10 super(msg); 11 } 12 13 }
Clase NoNumeroExcepcion
1 package EjerciciosPOO.excepciones.ejercicio1; 2 3 /** 4 * 5 * @author clase 6 */ 7 public class NoNumeroException extends Exception{ 8 9 public NoNumeroException(String msg){ 10 super(msg); 11 } 12 13 }
Clase ValorCadenaException
1 package EjerciciosPOO.excepciones.ejercicio1; 2 3 /** 4 * 5 * @author clase 6 */ 7 public class ValorCadenaException extends Exception{ 8 9 public ValorCadenaException(String msg){ 10 super(msg); 11 } 12 13 }
Clase MiCadena
1 /* 2 * To change this license header, choose License Headers in Project Properties. 3 * To change this template file, choose Tools | Templates 4 * and open the template in the editor. 5 */ 6 package EjerciciosPOO.excepciones.ejercicio1; 7 8 /** 9 * 10 * @author clase 11 */ 12 public class MiCadena { 13 private String cadena; 14 15 public MiCadena(String cadena){ 16 this.cadena = cadena; 17 } 18 public void concatenar(String cadena){ 19 if (cadena.length() == 0){ // Gestiono el error 20 return; 21 } 22 this.cadena += cadena; 23 } 24 25 public long devolverLong() throws ConversionNumeroException{ 26 long numero = 0; 27 try { 28 numero = Long.parseLong(cadena); 29 } 30 catch(NumberFormatException nfe){ 31 throw new ConversionNumeroException("No pudo convertir a long"); // Podemos enviar un texto nuestro 32 } 33 return numero; 34 } 35 public void convertirCadenaNumero() throws NoNumeroException{ // Veremos más adelante el uso de expresiones regulares (por ejemplo [0-9]) que combinado con el método replaceAll servirá para hacer una solución más eficiente 36 boolean tieneNumeros = false; 37 String todoslosnumeros="0123456789"; 38 String nuevaCadena = ""; 39 40 for(int cont=0; cont < cadena.length(); cont++){ 41 if (todoslosnumeros.indexOf(cadena.charAt(cont)) != -1){ 42 tieneNumeros = true; 43 nuevaCadena += cadena.charAt(cont); 44 } 45 } 46 47 if (!tieneNumeros){ 48 throw new NoNumeroException("La cadena no tiene numeros..."); 49 } 50 this.cadena = nuevaCadena; 51 } 52 53 public char devolverPosicionCadena(int pos) throws IndexOutOfBoundsException{ 54 55 return cadena.charAt(pos); 56 } 57 58 public boolean compararNumero(int valor) throws ConversionNumeroException{ 59 long numero = devolverLong(); 60 if (valor > numero){ 61 return false; 62 } 63 else{ 64 return true; 65 } 66 } 67 68 // Otra posible solución para el método compararNumero 69 public boolean compararNumeroOptimizado(int valor) throws ConversionNumeroException{ 70 71 return valor < devolverLong(); 72 73 } 74 75 public void asignarValor(String cadena) throws ValorCadenaException{ 76 if (cadena.length()==0){ 77 throw new ValorCadenaException("Es necesario un valor en la cadena..."); 78 } 79 this.cadena = cadena; 80 } 81 82 @Override 83 public String toString(){ 84 return cadena; 85 } 86 }
Clase Principal
1 /* 2 * To change this license header, choose License Headers in Project Properties. 3 * To change this template file, choose Tools | Templates 4 * and open the template in the editor. 5 */ 6 package EjerciciosPOO.excepciones.ejercicio1; 7 8 import java.util.logging.Level; 9 import java.util.logging.Logger; 10 11 /** 12 * 13 * @author clase 14 */ 15 public class Principal { 16 public static void main(String arg[]){ 17 18 MiCadena cadena = new MiCadena("aa33"); 19 20 21 try { 22 cadena.convertirCadenaNumero(); 23 System.out.printf("\nLa nueva cadena es: %s",cadena); 24 } catch (NoNumeroException ex) { 25 Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); 26 System.out.printf("La cadena no tiene número:%s",ex.getMessage()); 27 } 28 29 cadena.concatenar("11"); 30 try { 31 System.out.printf("%nEl número de la cadena es %d",cadena.devolverLong()); 32 } catch (ConversionNumeroException ex) { 33 Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); 34 System.out.printf("%nLa cadena no tiene número:%s",ex.getMessage()); 35 } 36 37 try { 38 cadena.asignarValor("33"); 39 } catch (ValorCadenaException ex) { 40 Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); 41 System.out.println("%nEl valor enviado a la cadena no puede ser vacío"); 42 } 43 try { 44 if (cadena.compararNumero(12)){ 45 System.out.printf("%nLa cadena con valor %s es mayor que 12",cadena); 46 } 47 else{ 48 System.out.printf("%nLa cadena con valor %s es menor que 12",cadena); 49 } 50 } catch (ConversionNumeroException ex) { 51 Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); 52 System.out.printf("%nLa cadena no tiene número:%s",ex.getMessage()); 53 } 54 55 } 56 57 }
-- Ángel D. Fernández González -- (2017).