Java - No puedo corregir el error Error java.lang.ArrayIndexOutOfBoundsException

 
Vista:

No puedo corregir el error Error java.lang.ArrayIndexOutOfBoundsException

Publicado por Miriam (2 intervenciones) el 27/08/2016 21:23:21
El siguiente codigo hace la sumatoria de fuerzas, en sumaFx [s] me marca el error java.lang.ArrayIndexOutOfBoundsException y por mas que observo no me doy cuenta de porque me aparece este error. a lo que se , es porq estoy queriendo hacer mas grande el arreglo pero no entiendo como es esto. me urge resolverlo xfavor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public class SumaFuerza {
public static void main(String[]args) throws IOException{
InputStreamReader ent=new InputStreamReader(System.in);
BufferedReader al=new BufferedReader(ent);
int noF=0;
int i = 0,a=0, s;
double sumaX=0, sumaY=0;
double [] sumaFx=new double[noF];
double [] sumaFy=new double[noF];
 
System.out.println("Ingrese el numero de fuerzas a sumar");
noF=Integer.parseInt(al.readLine());
//valor de cada fuerza
int [] sumaFuerza=new int[noF];
for(s=0;s<noF;s++){
i++;
System.out.println("Introduzca el valor de la fuerza (" +i+ " de "+noF+")");
sumaFuerza[s]=Integer.parseInt(al.readLine());
}
//grados de cada fuerza
int [] gradosFuerza=new int[noF];
for(s=0;s<noF;s++){
a++;
System.out.println("Introduzca los grados de la fuerza con respecto al eje X(" +a+ " de "+noF+")");
gradosFuerza[s]=Integer.parseInt(al.readLine());
}
//analizar las fuerzas
 
for(s=0;s<noF;s++){
sumaFx[s]=cos(gradosFuerza[s])*sumaFuerza[s];
}
 
 
for(s=0;s<noF;s++){
sumaFy[s]=sin(gradosFuerza[s])*sumaFuerza[s];
}
 
sumaX=sumaX+sumaFx[s];
sumaY=sumaY+sumaFy[s];
 
}
}
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
Imágen de perfil de Carlos Castro

No puedo corregir el error Error java.lang.ArrayIndexOutOfBoundsException

Publicado por Carlos Castro (54 intervenciones) el 28/08/2016 00:13:01
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public class SumaFuerza {
public static void main(String[]args) throws IOException{
InputStreamReader ent=new InputStreamReader(System.in);
BufferedReader al=new BufferedReader(ent);
int noF=0;
int i = 0,a=0, s;
double sumaX=0, sumaY=0;
 
////////////////////////////AQUI noF TIENE CERO
///////////////////////////
System.out.println("Ingrese el numero de fuerzas a sumar");
noF=Integer.parseInt(al.readLine());
//valor de cada fuerza
int [] sumaFuerza=new int[noF];
for(s=0;s<noF;s++){
i++;
System.out.println("Introduzca el valor de la fuerza (" +i+ " de "+noF+")");
sumaFuerza[s]=Integer.parseInt(al.readLine());
}
//grados de cada fuerza
int [] gradosFuerza=new int[noF];
for(s=0;s<noF;s++){
a++;
System.out.println("Introduzca los grados de la fuerza con respecto al eje X(" +a+ " de "+noF+")");
gradosFuerza[s]=Integer.parseInt(al.readLine());
}
//analizar las fuerzas
double [] sumaFx=new double[noF];
for(s=0;s<noF;s++){
sumaFx[s]=cos(gradosFuerza[s])*sumaFuerza[s];
}
 
double [] sumaFy=new double[noF];
for(s=0;s<noF;s++){
sumaFy[s]=sin(gradosFuerza[s])*sumaFuerza[s];
}
 
sumaX=sumaX+sumaFx[s];
sumaY=sumaY+sumaFy[s];
 
}
}
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
Imágen de perfil de Andres

No puedo corregir el error Error java.lang.ArrayIndexOutOfBoundsException

Publicado por Andres (6 intervenciones) el 28/08/2016 14:02:35
Buenas Miriam,
Lo que sucede es que inicializas los array sumaFx y sumaFy (linea 8-9) con un tamaño de 0, porque en ese momento noF = 0 (linea 5).
Luego en la linea 34 haces el bucle que recorre noF posiciones en el array que tiene 0 posiciones.
Para solucionar el problema debes incializar los array sumaFx y sumaFy después de tener el valor de noF, es decir, a partir de la linea 13.
No se si me he explicado bien, espero haber ayudado.
Saludos.
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

No puedo corregir el error Error java.lang.ArrayIndexOutOfBoundsException

Publicado por Miriam (2 intervenciones) el 28/08/2016 19:57:41
Gracias por tu aportacion, he podido resolver el problema, ahora intento que la sumar los valores del arreglo sumaFx y sumaFy , estuve comprobando con ejercicios que tengo resueltos pero la suma que arrojan estos arreglos no es igual. Podria decirme como hacer que se sumen correctamente los elementos que contiene cada arreglo.

1
2
3
4
5
6
7
8
9
10
11
double [] sumaFx=new double[noF];
for(x=0;x<noF;x++){
sumaFx[x]=sumaFuerza[x]*Math.cos(gradosFuerza[x]);
sumaX=sumaX+sumaFx[x];
}
 
double [] sumaFy=new double[noF];
for(y=0;y<noF;y++){
sumaFy[y]=sumaFuerza[y]*Math.sin(gradosFuerza[y]);
sumaY=sumaY+sumaFy[y];
}

es el codigo que tengo para que realice las operaciones y se van almacenando en el respectivo arreglo, y quiero sumar los elementos pero no salen los resueltados correctos..
Compruebo utilizando 3 fuerzas, con valor 10, 15 y 20 respectivamente, con grados 45, 315 y 180 respectivamente. EL resultado para sumaX debe ser -2.33 y el de sumaY de 3 punto y algo no recuerdo bien pero el primero no me sale..
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
Imágen de perfil de Andres

No puedo corregir el error Error java.lang.ArrayIndexOutOfBoundsException

Publicado por Andres (6 intervenciones) el 28/08/2016 22:23:28
Buenas,
El problema que tienes se debe a que Java, como muchos otros lenguajes de programación, hace las operaciones trigonométricas con Radianes en vez de con Grados.
Lo que debes hacer es pasar los grados a radianes y luego hacer la operación, la misma clase Math tiene un método para hacerlo.

1
Math.toRadians(grados);

El resto de tu código es correcto, solo debes cambiar eso.

1
2
3
4
5
6
7
8
9
10
11
double [] sumaFx=new double[noF];
for(int x=0;x<noF;x++){
sumaFx[x]=sumaFuerza[x]*Math.cos(Math.toRadians(gradosFuerza[x]));
sumaX=sumaX+sumaFx[x];
}
 
double [] sumaFy=new double[noF];
for(int y=0;y<noF;y++){
sumaFy[y]=sumaFuerza[y]*Math.sin(Math.toRadians(gradosFuerza[y]));
sumaY=sumaY+sumaFy[y];
}

Saludos.
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