[Java]Ayuda!! Sobre excepciones

Iniciado por ALCales, 20 Mayo 2012, 17:03 PM

0 Miembros y 1 Visitante están viendo este tema.

ALCales

Hola buenas!, haber si me podeis ayudar con un problema que tengo.
Tengo que usar unos metodos (5) y comprobarlos usando excepciones, y 2 van a hacer que salte esa excepcion, lo que yo quiero es que cuando salte la excepcion me avise de que ese metodo tiene la excepcion pero que continue con los demas metodos que estan bien, no que se pare el programa entero.
Aqui dejo el codigo:

try{
            cen.incrementarEdad("Alex"); //aumentamos la edad de Alex, tipo Persona, y funciona 
            cen.incrementarEdad("Mario"); //este tiene la edad 0 asique salta la excepcion
            censo2.incrementarEdad("Hasma"); //y estos 3 restantes ya no los comprueba, y es lo que quiero cambiar
            censo2.incrementarEdad("Perico");
            cen.incrementarEdad("HarryPotter");
        }catch(OperacionImposibleException e){
            System.out.println("La edad de esta persona no es valida");
        }




[Esta era otra pregunta, ya Solucionada! la dejo por si le sirve de ayuda a alguien]

En un ejercicio de java, tengo que hacer un ArrayList de personas, (estas pueden ser empleados y alumnos tb) y tengo que almacenarlas en una ArrayList (eso controlado xD)
Pero despues tegno que hacer un metodo para detectar a los empleados y pasarlos a otro ArrayList distinto

ese metodo creo que lo tengo bien, es el siguiente:
public void filtroCenso(Censo cs1, Censo cs2){
           for(int i=0;i<=cs1.tamañoListado();i++){
               if(cs1.obtenElemento(i) instanceof Empleados){
                   cs2.añadirElemento(cs1.obtenElemento(i));
                   cs1.quitarElemento(i);                    
               }
           }
       }


El caso es que creo los objetos (empleados, personas, alumnos) y cuando uso el metodo me da error y no se por que es, me pone esto:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2

Espero vuestra ayuda, saaludos! y muchas gracias

RyogiShiki

#1
Debes quitar el igual del for. Supongamos que tienes un Array con 5 elementos, el tamaño del array es 5 sin embargo y como debes saber, los índices comienzan a contar desde 0, así que el máximo de indices en este caso sería 4. Estas haciendo una comparación "menor igual", por lo que los indices igualaran el tamaño del Array pero sobrepasaran el máximo de los índices en uno, dando como resultado el IndexOutOfBoundsException con igual Size e Index.

Código (java) [Seleccionar]
public void filtroCenso(Censo cs1, Censo cs2){
           for(int i = 0; i < cs1.tamañoListado(); i++){
               if(cs1.obtenElemento(i) instanceof Empleados){
                   cs2.añadirElemento(cs1.obtenElemento(i));
                   cs1.quitarElemento(i);                    
               }
           }
       }


Espero sea de ayuda.

Saludos.


ALCales

Muchas gracias, era eso, luego tb vi que tenia que decrementar la i
i--; por que cuando borraba del listado cs1. el elemento de delante ocupaba su posicion y si continuaba con el bucle, el elemento que se me habia quedado en la posicion que acababa de comprobar ya no lo comprobaba xD

Ahora tengo una nueva duda, sobre excepciones, editare el post en lugar de hacer otro, haber si me puedes ayudar otra vez, muchas gracias!
saludosss

[Case]

Pues simplemente en lugar de cachar todas las excepciones en un solo try, separalas por varios trys.

ALCales

Eso es justo lo que queria saber, esque queria saber si esa era la unica forma o habria alguna manera de hacerlo de golpe.

Esque ahora tambien tengo otro metodo que es, que suma a todas las Personas la edad, para que quede mas claro:

try{
            obj.sumarEdadAtodos(cen); //cen, es el ArrayList
        }catch(OperacionImposibleException e){
            System.out.println("La edad de esta persona no es valida");           
        }

Pues ese metodo de sumarEdadAtodos() dentro usa el de incrementarEdad()
entonces cuando salta una excepcion de alguna persona de arraylist, para de sumar, y termina, entonces queria saber si en ese podia parar y volver a seguir, osea esquivar el de la edad cero pero seguir con los demas
Bueno, muchas gracias

RyogiShiki

#5
Para saber dodne se produjo la excepción puedes usar los métodos printStackTrace() y getStackTrace():

Código (java) [Seleccionar]

try {
   String a  = "a";
   int b = Integer.parseInt( a );
} catch ( Exception ex ) {
   System.out.println("Excepción llamando a: " + ex.getStackTrace()[1]);
   System.out.println("Stack Trace completo: ");
   ex.printStackTrace();
}


getStackTrace retornará un array con el stackTrace de la excepción y generalmente en el segundo elemento dará el método que arrojó la Excepción.

Espero se de ayuda.

Saludos.