• Martes 30 de Abril de 2024, 03:51

Autor Tema:  Numberformatexception No Capturada  (Leído 1476 veces)

orate

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Numberformatexception No Capturada
« en: Miércoles 26 de Diciembre de 2007, 15:39 »
0
Hola!
Antes que nada indicar que soy nuevo en este foro y casi nuevo en el tema de programcion en Java.
He intentado hace run tablero de ajdrez y en él ubicar una pieza (un caballo) le paso la unicacion del caballo por medio de los parametros Lanzadera x y. Tengo dos excepciones que capturan el que se le haya pasado un numero de fila o de columna más grande que 8 (se sale del tablero) -esta captrua de excepcion funciona- y otra que que captura si les pasas un valor no numérico p.e. si les pasas Lanzadera a 4 (forma más ajedrecistica pero que de momento no contemplo). Pués bien ahí esta el probleam aunque lo pongo entre Try{} y le pongo un Catch para la excepcion NumberFormatException no la captura y me saca el siguiente error.

Exception in thread "main" java.lang.NumberFormatExceptio n: For input string: "a
"
at java.lang.NumberFormatExceptio n.forInputString(NumberFormatE xception.
java:48)
at java.lang.Integer.parseInt(Int eger.java:468)
at java.lang.Integer.parseInt(Int eger.java:518)
at jordi.chess.Lanzadera.main(Lan zadera.java:17)


Os pongo el código de la clase Lanzadora y de las clases que intevienen


package jordi.chess;

public class Lanzadera{

public static void main(String args[]){
Tablero unTablero;
Caballo unCaballo;
String respuesta;

if(args.length!=2) {
System.out.println("Ús: Lanzadera x y");
return;
}
else {
respuesta="";
unTablero=new Tablero();
unCaballo=new Caballo(Integer.parseInt(args[0]),Integer.parseInt(args[1]));
try {
unCaballo.pinta(unTablero);
unTablero.pintaCeldas();
}catch(NumberFormatException ex){
respuesta="Se han introducido caracteres no numéricos";
}catch (IndexOutOfBoundsException ex) {
respuesta="Los números han de estar entre 1 i 8";
}

finally {
System.out.println(respuesta);
System.out.println("Más adelante habrán más funcionalidades");
}
}
}



}

---------------------------------------------------------------
AHORA LA CLASE TABLERO

package jordi.chess;

public class Tablero {

public int cuadrante [][]=new int[8][8];



public Tablero(){

for (int i=0;i<8;i++){
for (int j=0;j<8;j++){
cuadrante[j]=0;}

}
}
public void pintaCeldas() {
for (int i=7;i>=0;i--){
for (int j=0;j<8;j++){
if (cuadrante[j]==0) System.out.print("0 ");
else System.out.print("X ");}
System.out.println();}}

}


---------------------------------------------------

AHORA LA CALSE CABALLO

package jordi.chess;

public class Caballo{
/** Ordenada */
int x;
/** Abcisa */
int y;


Caballo(int x,int y){
this.x=x;
this.y=y;

}

int getX(){
return x;}

int getY(){
return y;}



public void pinta(Tablero tableContenedor){
tableContenedor.cuadrante[this.y-1][this.x-1]=1;
}
}

-----------------------------------------------------

Alguien me puede ayudar?
Gracias

Nagisa

  • Miembro MUY activo
  • ***
  • Mensajes: 119
  • Nacionalidad: es
    • Ver Perfil
Re: Numberformatexception No Capturada
« Respuesta #1 en: Viernes 28 de Diciembre de 2007, 10:53 »
0
Buenas!!!

El fallo te lo da la sentencia

Código: Text
  1. unCaballo=new Caballo(Integer.parseInt(args[0]),Integer.parseInt(args[1]));
  2.  

que está fuera del bloque try/cacth. Posiblemente estés intentando pasar algo que no sea numérico.

Como soluciones, puedes validar primero los argumentos, o bien incluir esta llamada dentro del bloque.

Salu2!!
   

orate

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Numberformatexception No Capturada
« Respuesta #2 en: Lunes 31 de Diciembre de 2007, 11:17 »
0
SOLUCIONADO!!
Gracias Nagisa
Al final lo que he hecho es hacer la transformación a entero de los argumentos antes de la llamada a los métodos que pintan y lo he incluido todo en el bloque try. queda asi:
public class Lanzadera{

public static void main(String args[]){
Tablero unTablero;
Caballo unCaballo;
String respuesta;


if(args.length!=2) {
System.out.println("Ús: Lanzadera x y");
return;
}

else {
respuesta="";
try{
int x,y;
x=Integer.parseInt(args[0]);
y=Integer.parseInt(args[1]);
unTablero=new Tablero();
unCaballo=new Caballo(x,y);
unCaballo.pinta(unTablero);
unCaballo.marcaSaltos(unTabler o);
unTablero.pintaCeldas();
}catch(NumberFormatException ex){
respuesta="Se han introducido caracteres no numéricos";
}catch (IndexOutOfBoundsException ex) {
respuesta="Els números han d.estar entre 1 i 8";
}

finally {....