Foros del Web » Programación para mayores de 30 ;) » Java »

problema con matriz en simulacion sencilla

Estas en el tema de problema con matriz en simulacion sencilla en el foro de Java en Foros del Web. Buenas tardes ,soy un estudiante y he estado practicando java esta semana ya que considero que estoy mal y me he puesto a hacer un ...
  #1 (permalink)  
Antiguo 08/01/2009, 11:03
 
Fecha de Ingreso: enero-2009
Mensajes: 4
Antigüedad: 16 años
Puntos: 0
problema con matriz en simulacion sencilla

Buenas tardes ,soy un estudiante y he estado practicando java esta semana ya que considero que estoy mal y me he puesto a hacer un taller de simulacion de teoria de colas, estoy en un punto donde me piden que haga una distribucion normal con unos servidores paralelos y ya tengo el codigo que creo funcionaria pero me ha salido el siguiente error:
Exception in thread "AWT-EventQueue-0"

Buscando encontre que el error se debe a que se quiere acceder a un indice que no existe y ese es el problema que no se si efectivamente el error esta en algun indice o es otra cosa, porque no lo encuentro.

Practicamente quiero que se vizualice de la siguiente forma la matriz: n * 4 donde n son las iteraciones que se quieren.

Servidor 1 servidor 2 Tiempo_promedio(mas alto) porcentaje de veces que el 2 es mas rapido.

ya ternga la interfaz, pero al quererla subir la imagen me ha salido un mensaje que dice que debo tener 30 dias de antiguedad en el foro, asi que perdonen no creo que moleste si pongo el enlace directo pero si se considera una violacion lo quitare.




El codigo relevante es el siguiente. el tamaño de las iteraciones viene del TextField
.
.
int contador1 = 0;
int contador2 = 0;
float porcentaje ;
int i=0;
//int j=0;
while( i<=tam_iteraciones) {
//servidor 1

a=0; b=1; c=2; d=3; // columnas


float x = (float) (Math.random()*(4-0)+0);
//float x = aleatorio.nextFloat();

float u=2; //media minutos
float de= (float) 0.34; //desviacion estandar minutos
float z=0;
z= (x-u)/de;
//z= z*100;
data[i][a] = z;

//servidor 2

float u2=(float) 2.2; //media minutos
float de2=(float) 0.26; //desviacion estandar minutos
float z2=0;
z2= (x-u2)/de2; //desviacion normal

data[i][b] = z2;
;
// sentencias logicas para definir el tiempo promedio (mas alto) y porcentaje de veces que el servidor dos es mas rapido respecto al otro
if (z > z2) {
data[i][c] = z;
contador1 ++;

}

else {
data[i][c] = z2 ;
contador2 ++;

}


porcentaje = (contador2/(contador2+contador1));
porcentaje = porcentaje*100;
data[i][d] = porcentaje ;
z=0;
z2=0;
i++;

}
.
.

Última edición por lich_king; 09/01/2009 a las 13:04
  #2 (permalink)  
Antiguo 08/01/2009, 14:09
Avatar de DiabloGuardian  
Fecha de Ingreso: noviembre-2008
Ubicación: Hidalgo
Mensajes: 215
Antigüedad: 16 años, 1 mes
Puntos: 3
Respuesta: problema con matriz en simulacion sencilla

creo que deberias de poner el error completo para localizar la falla. date cuenta que en el error esta la solucion, jejeje
  #3 (permalink)  
Antiguo 08/01/2009, 14:33
 
Fecha de Ingreso: enero-2009
Mensajes: 4
Antigüedad: 16 años
Puntos: 0
Respuesta: problema con matriz en simulacion sencilla

Ok, este es el error completo.

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 4
at tema15.Proceso.Button(Proceso.java:142)
at tema15.Proceso.access$0(Proceso.java:95)
at tema15.Proceso$1.actionPerformed(Proceso.java:55)
at javax.swing.AbstractButton.fireActionPerformed(Abs tractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed (AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed (DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultB uttonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.jav a:5488)
at javax.swing.JComponent.processMouseEvent(JComponen t.java:3126)
at java.awt.Component.processEvent(Component.java:525 3)
at java.awt.Container.processEvent(Container.java:196 6)
at java.awt.Component.dispatchEventImpl(Component.jav a:3955)
at java.awt.Container.dispatchEventImpl(Container.jav a:2024)
at java.awt.Component.dispatchEvent(Component.java:38 03)
at java.awt.LightweightDispatcher.retargetMouseEvent( Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(C ontainer.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Conta iner.java:3822)
at java.awt.Container.dispatchEventImpl(Container.jav a:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1778 )
at java.awt.Component.dispatchEvent(Component.java:38 03)
at java.awt.EventQueue.dispatchEvent(EventQueue.java: 463)
at java.awt.EventDispatchThread.pumpOneEventForHierar chy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThre ad.java:110)
  #4 (permalink)  
Antiguo 08/01/2009, 16:09
Avatar de Wayern  
Fecha de Ingreso: septiembre-2008
Ubicación: Aguascalientes
Mensajes: 65
Antigüedad: 16 años, 3 meses
Puntos: 4
Respuesta: problema con matriz en simulacion sencilla

Cuando te sale un java.lang.ArrayIndexOutOfBoundsException es porque exediste el tamaño de tu array o porque estás tratando de accesar un índice que es más grande que el tamao del array o menor a 0.

No sé si el error te esté saliendo porque tienes:
while(i<=tam_iteraciones){

No veo donde declaras el tamaño del array data, pero supongamos que tam_iteracciones es igual a 4 y que el tamaño de data es:

data[tam_interacciones][tam_interacciones] ;

Tienes declarado i=0, entonces la primera vez i es menor que tam_interacciones, por tanto, entra y graba tus z en la fila 0 del array. Así se va hasta que i=4, como 4=4 entonces entra de nuevo en el while y trata de guardar el dato en la fila 4 del array, pero recuerda que en los arreglos empezamos a contar 0,1,2...,n.

La solución sería o hacer tu array del tamaño tam_interacciones+1 o hacer tu while i<tam_interacciones, depende que es lo que necesites...

Si no me entendiste o te hice más bolas por favor déjamelo saber...
  #5 (permalink)  
Antiguo 08/01/2009, 21:40
 
Fecha de Ingreso: enero-2009
Mensajes: 4
Antigüedad: 16 años
Puntos: 0
Respuesta: problema con matriz en simulacion sencilla

Wayern muchisimas gracias en verdad te agradezco por hacerme caer en cuenta.

Estaba de la siguiente forma .

Float[][] data = new Float[tam_iteraciones][columnas];

Simplemente le agrege un 1 al numero digitado como me dijiste y ya funciona

Float[][] data = new Float[tam_iteraciones+1][columnas];

Ahora tengo un pequeño error logico en los datos que deberia dar (porcentaje y valor de z), lo solucionare de inmediato.

Z no deberia tomar datos negativos, solo positivos. Como puedo arreglar esto, osea que una variable asi reciba un dato negativo lo convierta a uno positivo, algo asi como valor absoluto que le quita el signo a un dato.

Gracias.
  #6 (permalink)  
Antiguo 09/01/2009, 08:31
Avatar de Wayern  
Fecha de Ingreso: septiembre-2008
Ubicación: Aguascalientes
Mensajes: 65
Antigüedad: 16 años, 3 meses
Puntos: 4
Respuesta: problema con matriz en simulacion sencilla

En la libreria java.math tienes la función abs que te permite hacer absoluto un valor flotante. Nada más tienes que hacer:
Código:
z=Math.abs(z);
Recuerda que al momento de declarar z debes inicializarla.
Si no quieres usar la libreria de todas formas es muy sencillo, puedes hacer algo más o meno así:
Código:
public float convertZ(float z){
     float z;
     this.z=z;
     if(z<0){
          z*=-1;
     }
     return z;
}
Espero te sirva... Saludos.
  #7 (permalink)  
Antiguo 09/01/2009, 10:45
 
Fecha de Ingreso: enero-2009
Mensajes: 4
Antigüedad: 16 años
Puntos: 0
Respuesta: problema con matriz en simulacion sencilla

gracias de nuevo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:37.