Posible solución Excepciones Ejercicio 1

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