• Viernes 19 de Abril de 2024, 12:16

Autor Tema:  No entiendo este error!  (Leído 12930 veces)

digichap28

  • Miembro activo
  • **
  • Mensajes: 64
    • Ver Perfil
No entiendo este error!
« en: Sábado 21 de Febrero de 2009, 16:39 »
0
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!

shadow_rev

  • Miembro MUY activo
  • ***
  • Mensajes: 397
  • Nacionalidad: co
  • Un SPARTAN no muere en combate
    • Ver Perfil
    • http://shadowrev.blogspot.com
Re: No entiendo este error!
« Respuesta #1 en: Sábado 21 de Febrero de 2009, 22:02 »
0
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:
Volará quien le ponga alas a sus sueños (Candidate for goddess)
Si el mal existe en este mundo, reside en el corazón de la humanidad (Edward D. Morrison - Tales of Phantasia)
Lo único que puedes cambiar del pasado, es lo que sientes por él en el presente (Lockon Stratos - Mobile Suit Gundam 00)
Ingeniero de Sistemas

digichap28

  • Miembro activo
  • **
  • Mensajes: 64
    • Ver Perfil
Re: No entiendo este error!
« Respuesta #2 en: Lunes 23 de Febrero de 2009, 21:50 »
0
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:

silverfox

  • Miembro MUY activo
  • ***
  • Mensajes: 280
    • Ver Perfil
Re: No entiendo este error!
« Respuesta #3 en: Martes 24 de Febrero de 2009, 12:11 »
0
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

digichap28

  • Miembro activo
  • **
  • Mensajes: 64
    • Ver Perfil
Re: No entiendo este error!
« Respuesta #4 en: Martes 24 de Febrero de 2009, 15:10 »
0
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.

SFRJ

  • Miembro MUY activo
  • ***
  • Mensajes: 115
    • Ver Perfil
Re: No entiendo este error!
« Respuesta #5 en: Jueves 26 de Febrero de 2009, 08:39 »
0
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