elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Problema con el inicio del programa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Problema con el inicio del programa  (Leído 6,292 veces)
TheFICBoss

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Problema con el inicio del programa
« en: 2 Agosto 2013, 15:17 pm »

Hola, buenos dias!
Pues bien, yo tengo este código:

Código
  1. package Ajedrez;
  2.  
  3. public class Tablero {
  4. Pieza array[][]=new Pieza[7][7];
  5. public Tablero(){
  6. for(int i=0;i<8;i++)
  7. for(int j=0;j<8;j++)
  8. array[ i][j]=new Pieza();
  9.  
  10. }
  11. void iniciarPartida(){
  12. for(int i=0;i<8;i+=7){
  13. array [ i][0].pz=Piezas.TORRE;
  14. array [ i][1].pz=Piezas.CABALLO;
  15. array [ i][2].pz=Piezas.ALFIL;
  16. array [ i][3].pz=Piezas.DAMA;
  17. array [ i][4].pz=Piezas.REY;
  18. array [ i][5].pz=Piezas.ALFIL;
  19. array [ i][6].pz=Piezas.CABALLO;
  20. array [ i][7].pz=Piezas.TORRE;
  21. }
  22. for(int i=0;i<8;i++){
  23. array [7][ i].cl=Colores.NEGRO;
  24. array [6][ i].pz=Piezas.PEON;
  25. array [6][ i].cl=Colores.NEGRO;
  26. array [1][ i].pz=Piezas.PEON;
  27. array [1][ i].cl=Colores.BLANCO;
  28. array [0 ][ i ].cl=Colores.BLANCO;
  29. }
  30.  
  31. }
  32. }
  33. public static void main(String args[]){
  34. Tablero mitabla= new Tablero();
  35. //System.out.print(mitabla.toString());
  36. }
  37. }
  38. class Pieza {
  39. Piezas pz;
  40. Colores cl;
  41. public Pieza() {
  42.  this.pz=null;
  43.  this.cl=null;
  44. }
  45.  
  46. }
enum Piezas{REY,DAMA,ALFIL,CABALLO,TORRE,PEON};
enum Colores{BLANCO,NEGRO};


Y cuando lo ejecuto me da el sgte. error:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
   at Ajedrez.Tablero.<init>(Tablero.java:8)
   at Ajedrez.Tablero.main(Tablero.java:78)

Yo creo que es del arranque, que no sabe muy bien donde empezar a ejecutarse. Lo digo por que me da fallo en la main y he estado indagando por ahi y es lo que me aparecía.

Agradecería cualquier ayuda.

Un saludo a todos! :D



« Última modificación: 17 Agosto 2013, 15:24 pm por Debci » En línea

TheFICBoss

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Problema con el inicio del programa
« Respuesta #1 en: 2 Agosto 2013, 15:24 pm »

NO se porque la funcion iniciarPartida me la copió asi, está mal.

No me deja ponerla bien...


En línea

1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: Problema con el inicio del programa
« Respuesta #2 en: 2 Agosto 2013, 16:38 pm »

Para eliminar caracteres extraños, copia tu código primero a un BLOC DE NOTAS después del bloc de notas copialo aquí.
Utiliza las etiquetas GeSHi.

Saludos.
En línea

abc
Alien-Z

Desconectado Desconectado

Mensajes: 177


C++ Programmer


Ver Perfil
Re: Problema con el inicio del programa
« Respuesta #3 en: 3 Agosto 2013, 16:57 pm »

El error está en que no se puede acceder a una posición de un array bidimensional si solo indicas una de las dimensiones. Lo tienes en casi todo el código así:

Código
  1.         Pieza array[][]=new Pieza[7][7];
  2.         array[j]=new Pieza();
  3. ...
  4.         array [1].pz=Piezas.CABALLO;
  5.         array [2].pz=Piezas.ALFIL;
  6.         array [3].pz=Piezas.DAMA;
  7.         array [4].pz=Piezas.REY;
  8. ...
  9.         array [7].cl=Colores.NEGRO;
  10.         array [6].pz=Piezas.PEON;
  11.         array [6].cl=Colores.NEGRO;

Se debe utlizar de la siguiente forma:

Código
  1. array[COLUMNA][FILA] = new Pieza();

Un saludo.
« Última modificación: 3 Agosto 2013, 16:59 pm por Alien-Z » En línea

TheFICBoss

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Problema con el inicio del programa
« Respuesta #4 en: 4 Agosto 2013, 01:09 am »

Si ya lo se, eso es lo que mencione que me copiara mal...

En realidad ya lo tengo array[ i ][1] ...

Lo acabo de corregir (al fin -.-), ahora es tal cual mi código.

Gracias a todos
« Última modificación: 4 Agosto 2013, 01:12 am por TheFICBoss » En línea

Alien-Z

Desconectado Desconectado

Mensajes: 177


C++ Programmer


Ver Perfil
Re: Problema con el inicio del programa
« Respuesta #5 en: 4 Agosto 2013, 15:26 pm »

Ya me parecía a mi que eso te lo debía haber indicado el IDE. Ahora que lo miro detenidamente me he fijado donde falla:

Código
  1. public class Tablero {
  2.   Pieza array[][]=new Pieza[7][7];
  3.   public Tablero(){  
  4.      for(int i=0;i<8;i++)
  5.         for(int j=0;j<8;j++)
  6.            array[ i][j]=new Pieza();
  7.  
  8.   }

Creas un array de tamaño 7x7 pero pones como condición de continuación en los bucles que "i, j"sea  menor que "8, 8", por tanto el bucle intentará acceder a la posición "array[7][7]" sin embargo el array va desde array[0][0] hasta array[6][6]; te sales de él e intentas acceder a una posición que no existe. La condición de continuación debe ser "i < 7".

Y un pequeño matiz:

Código
  1.   public Pieza() {
  2.     this.pz=null;
  3.     this.cl=null;
  4.   }

No es necesario utilizar "this" en este constructor porque las variables no están siendo ocultadas, debes utilizarlo cuando por ejemplo recibes como parámetro una variable con el mismo nombre que un atributo miembro y quieras distinguirlos:

this.pz -> atributo del objeto
pz -> Variable que me han pasado como parámetro

Un saludo.
« Última modificación: 4 Agosto 2013, 15:37 pm por Alien-Z » En línea

TheFICBoss

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Problema con el inicio del programa
« Respuesta #6 en: 4 Agosto 2013, 23:30 pm »


Lo del this que me dices lo puse después, al principio ya lo tenía sin él. 

Muchas gracias por tu respuesta, que descuido más tonto...

Antes lo tenía declarado así, y también fallaba:  Pieza array[][];

Un saludo y gracias de nuevo! :D
En línea

TheFICBoss

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Problema con el inicio del programa
« Respuesta #7 en: 5 Agosto 2013, 00:23 am »

Si no es mucho pedir, me pueden ayudar con esta función?

    public String toString(){
      String FEN = null;
      for(int i=7;i>=0;i--){
         for(int j=0;j<8;j++){
            switch(array[ i ][j].pz){ ------> FALLA AQUÍ
               case TORRE:
                  if(array[ i ][j].cl==Colores.BLANCO)
                     FEN=FEN+"T";
                  else
                     FEN=FEN+"t";
                  break;
               case CABALLO:
                  if(array[ i ][j].cl==Colores.BLANCO)
                     FEN=FEN+"C";
                  else
                     FEN=FEN+"c";
                  break;
               case ALFIL:
                  if(array[ i ][j].cl==Colores.BLANCO)
                     FEN=FEN+"A";
                  else
                     FEN=FEN+"a";
                  break;
               case DAMA:
                  if(array[ i ][j].cl==Colores.BLANCO)
                     FEN=FEN+"D";
                  else
                     FEN=FEN+"d";
                  break;
               case REY:
                  if(array[ i ][j].cl==Colores.BLANCO)
                     FEN=FEN+"R";
                  else
                     FEN=FEN+"r";
                  break;
               default:
                  FEN=FEN+"1";
                  break;
            }
         }
         FEN=FEN+"/";
      }
         
      return FEN;
   }

Me da exactamente el mismo fallo que antes, pero esta vez he revisado bien los bucles FOR y ahi no puede estar el fallo, por que mi array lo declaré como [8][8].
En línea

Alien-Z

Desconectado Desconectado

Mensajes: 177


C++ Programmer


Ver Perfil
Re: Problema con el inicio del programa
« Respuesta #8 en: 5 Agosto 2013, 00:39 am »

No veo dónde puede fallar. En el switch se puede usar variables de tipo Enum, Integer y String, y por lo que has mostrado en los otros posts puedo suponer que "array[j].pz" sigue siendo un Enum, por tanto es correcto.

¿Has inicializado correctamente todas las posiciones del array?. ¿Podrías poner el código completo separado por módulos y utilizando las etiquetas code?.
« Última modificación: 5 Agosto 2013, 00:42 am por Alien-Z » En línea

TheFICBoss

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Problema con el inicio del programa
« Respuesta #9 en: 5 Agosto 2013, 01:48 am »

Código:

package Ajedrez;

public class Tablero {
Pieza array[][]=new Pieza[8][8];
public Tablero(){
for(int i=0;i<8;i++){
for(int j=0;j<8;j++){
array[i][j]=new Pieza();
}
}
}
void iniciarPartida(){
for(int i=0;i<8;i+=7){
array[i][0].pz=Piezas.TORRE;
array[i][1].pz=Piezas.CABALLO;
array[i][2].pz=Piezas.ALFIL;
array[i][3].pz=Piezas.DAMA;
array[i][4].pz=Piezas.REY;
array[i][5].pz=Piezas.ALFIL;
array[i][6].pz=Piezas.CABALLO;
array[i][7].pz=Piezas.TORRE;
}
for(int i=0;i<8;i++){
array[7][i].cl=Colores.NEGRO;
array[6][i].pz=Piezas.PEON;
array[6][i].cl=Colores.NEGRO;
array[1][i].pz=Piezas.PEON;
array[1][i].cl=Colores.BLANCO;
array[0][i].cl=Colores.BLANCO;
}

}
public String toString(){
String FEN = null;
for(int i=7;i>=0;i--){
for(int j=0;j<8;j++){
switch(array[i][j].pz){             //    Falla aqui
case TORRE:
if(array[i][j].cl==Colores.BLANCO)
FEN=FEN+"T";
else
FEN=FEN+"t";
break;
case CABALLO:
if(array[i][j].cl==Colores.BLANCO)
FEN=FEN+"C";
else
FEN=FEN+"c";
break;
case ALFIL:
if(array[i][j].cl==Colores.BLANCO)
FEN=FEN+"A";
else
FEN=FEN+"a";
break;
case DAMA:
if(array[i][j].cl==Colores.BLANCO)
FEN=FEN+"D";
else
FEN=FEN+"d";
break;
case REY:
if(array[i][j].cl==Colores.BLANCO)
FEN=FEN+"R";
else
FEN=FEN+"r";
break;
default:
FEN=FEN+"1";
break;
}
}
FEN=FEN+"/";
}

return FEN;
}
public static void main(String args[]){
Tablero mitabla= new Tablero();
mitabla.iniciarPartida();
String abc=mitabla.toString();
System.out.print(abc);
}
}
class Pieza {
Piezas pz;
Colores cl;
public Pieza() {
//pz=Piezas.ALFIL;
//cl=Colores.BLANCO;
  pz=null;
  cl=null;
 
}

}
enum Piezas{REY,DAMA,ALFIL,CABALLO,TORRE,PEON};
enum Colores{BLANCO,NEGRO};


Aqui te dejo el código. Por cierto, no sabía que había una etiqueta code para esto, mucho más cómodo.

Un saludo! :D
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programa letras de inicio peliculas.
Diseño Gráfico
txente 1 1,979 Último mensaje 2 Febrero 2005, 01:56 am
por Morris
punto de inicio de ejecucion de un programa
Programación C/C++
Abloos 5 3,408 Último mensaje 16 Junio 2011, 12:25 pm
por Abloos
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines