Posible solución Excepciones Ejercicio 1

De MediaWiki
Saltar a: navegación, buscar

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).