Java - Error me tiene enloquecido

 
Vista:

Error me tiene enloquecido

Publicado por Joaquin (2 intervenciones) el 19/08/2009 18:40:50
Hola, que tal, hace poco que programo y empece un proyecto demasiado ambicioso para mi nivel XD.

Mi problema es muy tonto, estoy programando un sistema de dados, nada mas. Pero por algun motivo no lo puedo hacer funcionar.

Adjunto el codigo, y espero una respuesta para poder seguir programando :D

Salu2 y gracias!

CODIGO:
//===========================================================================

public class Dado extends Master {

private int nDados;
private int[] valor = new int[0];


//===========================================================================
public void roll(int nDados1, int nCaras){

this.setNDados(nDados1);

if (nDados1 > 0){
int[] valor1 = new int[nDados1];

for(int i = 0; i <= nDados1; i++){
valor1[i] = (int)(1 + Math.random()*(nCaras - 1));
valor1[0] = (int) (valor1[0] + valor1[1]);

}
this.setValor(valor1);
}

if (nDados1 < 0){
int[] valor1 = new int[-nDados1];

for(int i = 0; i >= nDados1; i--){
valor1[-i] = (int) -((1 + Math.random()*(nCaras - 1)));
valor1[0] = (int) (valor1[0] + valor1[-1]);

}

this.setValor(valor1);
}


}

//===========================================================================
public int getNDados() {
return nDados;
}
public void setNDados(int dados) {
nDados = dados;
}
public void setValor(int[] nuevoValor) {

this.valor = nuevoValor;
}

public void setValor(int a, int nuevoValor) {

this.valor[a] = nuevoValor;
}

public int[] getValor() {
return valor;
}

public int getValor(int a) {
return valor[a];
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Error me tiene enloquecido

Publicado por Luis (4 intervenciones) el 20/08/2009 01:03:07
Hola Joaquin:

Yo tambien soy nuevo en esto de java, pero intentaré ayudarte.

Los errores que pude ver en tu codigo se refieren a que te estas extralimitando al tratar de introducir o acceder a un valor dentro del array, es decir, intentar colocar o sacar un valor en una posicion del array que no existe. Este error es el siguiente:

java.lang.ArrayIndexOutOfBoundsException.

Supongo que ese es el error que te sale, no haz colocado en la descripcion del problema que error era el que te estaba causando los problemas.

Bueno, a continuacion te detallo las partes en que me han salido estos errores.

1) El for esta mal formulado. Si pones que el recorrido valla hasta el valor de nDados, le estaras diciendo a tu programa que acceda hasta la posicion nDatos. Recuerda que los arrays van hasta TamañoArray - 1 (nDados1 - 1). Las posiciones de los arrays van de 0 hasta tamaño-1.

for(int i = 0; i <= nDados1; i++){ // Deberia ser -----> i < nDados1
valor1[i] = (int)(1 + Math.random()*(nCaras - 1));
valor1[0] = (int) (valor1[0] + valor1[1]);
}

2) Cuando lanzas un solo dado, dentro del mismo for anterior, la linea

valor1[0] = (int) (valor1[0] + valor1[1]);

intenta acceder a valor1[1]. Esto es imposible debido a que valor1 se a definido para almacenar solo un dato y aqui estas tratando de acceder a un valor que no posee el array.

Eso es lo que puedo decirte, o por lo menos lo que pude ver. Deberias colocar el error que te causo el problema.

Si lo solucionaste hazlo saber.

Chao.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error me tiene enloquecido

Publicado por Joaquin (2 intervenciones) el 20/08/2009 03:31:39
Gracias por responder Luis.

Lo pude solucionar poco despues de postear aca jajaja.

Me pasaba lo que decias, que el array era mas chico de lo que debia ser.

Y ademas esto era un error:

valor1[0] = (int) (valor1[0] + valor1[1]);

en verdad tiene que ser asi:

valor1[0] = (int) (valor1[0] + valor1[i]);

valor[0] es la suma de todos los dados, asi que tengo que sumarle valor[i] dentro del for.

Ya me funciona de maravilla, muchas gracias nuevamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar