SoloCodigo

Programación General => Java => Mensaje iniciado por: digichap28 en Sábado 21 de Febrero de 2009, 16:39

Título: No entiendo este error!
Publicado por: digichap28 en Sábado 21 de Febrero de 2009, 16:39
Hola q tal?
Bueno, acabo de iniciar con colecciones y a la hora de programar algo que parece ser sencillo me ha causado problemas.
He invstigado por la red y no logro solucionarlo, por eso acudo a ustedes a ver si me logran dar una manito.
A continuacion uno de los metodos realizados y el problema.

Citar
public int mayorDato(int i){
      if(i==datos.size()-1){
         int m=(Integer) datos.elementAt(i); ----> Aqui el problema, al parecer no esta bn aplicado el cast para Vector.
         return m;
      }else{
         int mayor=mayorDato(i+1);
           int m=(Integer) datos.elementAt(i); ----> Aqui lo mismo.
          if(mayor>m){
           return mayor;
         }else{
            return m;
         }
      }

   }


Cabe decir que a la hora de compilarlo, aparece todo correcto.

Esta es la exception enviada luego de ponerlo a correr:  java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

Gracias!
Título: Re: No entiendo este error!
Publicado por: shadow_rev en Sábado 21 de Febrero de 2009, 22:02
Si lo único que guardas en el vector son Strings (supongo que lo llenas con un campo de texto en un applet, o directamente en la línea de comandos), deberías utilizar Integer.parseInt() en vez de hacer el cast:

Código: Java
  1. int m = Integer.parseInt(datos.elementAt(i));
  2.  

Advertido, sólo funciona si el vector se llena con strings que representan números ("10", "45", etc.). Espero que te ayude en algo.

:suerte:
Título: Re: No entiendo este error!
Publicado por: digichap28 en Lunes 23 de Febrero de 2009, 21:50
el Vector lo lleno con este metodo.

 public void agregarDatos(){
         datos.addElement(JOptionPane.showInputDialog("Digite el dato a insertar."));      
   }

El problema continua, no logro solucionarlo.
Ayuda! :hitcomp:
Título: Re: No entiendo este error!
Publicado por: silverfox en Martes 24 de Febrero de 2009, 12:11
Hola.

Si miras en el API de JAVA:

public static String showInputDialog(Object message)

Estás rellenando el Vector con Strings, así que es normal que no te haga el cast a Integer.

Echa un vistazo al API de Integer:

public static Integer decode(String nm) throws NumberFormatException

Esto resuelve tu problema.


Suerte.


Silverfox
Título: Re: No entiendo este error!
Publicado por: digichap28 en Martes 24 de Febrero de 2009, 15:10
Listo!
Solucionado de esta manera:

Código: Java
  1. public void agregarDatos(){
  2.          datos.addElement(Integer.parseInt(JOptionPane.showInputDialog("Digite el dato a insertar.")));      
  3.    }
  4.  


Muchas gracias por la ayuda!
 :D  Saludos.
Título: Re: No entiendo este error!
Publicado por: SFRJ en Jueves 26 de Febrero de 2009, 08:39
En vez de esto:
Código: Java
  1. int m=(Integer) datos.elementAt(i); ----> Aqui lo mismo.
  2.  
Prueba esto:
Código: Java
  1. int m=Integer.parseInt(datos.elementAt(i));
  2.  

Si tu metodo elementAt(i) devuelve una variable de tipo char o String que sea un numero, entonces el codigo que te he dado, creo que no deveria dar excepcion.
ClassCastExcepcion ocurre porque intentas hacer casting, con dos tipos que no son compatibles. La variable en la que quieres almacenar lo que te devuelve es de tipo int no Integer. Si pones la variable m que sea de tipo Integer, alomejor te funciona el casting que tu as intentado, no estoy seguro, pero puedes provar:
Código: Java
  1. Integer m=(Integer) datos.elementAt(i);
  2.  
pero vamos que de todas maneras si no te pasa asi la compilacion prueba esto otro:
Código: Java
  1. Integer m = new Integer(datos.elementAt(i));
  2.  

Saludos