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

PROBLEMA CON arrayindexoutofboundsexception

Estas en el tema de PROBLEMA CON arrayindexoutofboundsexception en el foro de Java en Foros del Web. Buenas Estoy realizando un pequeña aplicacion conectandose a una bd de oracle , les agradeceria mucho que me pudieran ayudar Esta clase se encarga de ...
  #1 (permalink)  
Antiguo 16/11/2009, 05:09
 
Fecha de Ingreso: agosto-2005
Mensajes: 36
Antigüedad: 18 años, 8 meses
Puntos: 0
Mensaje PROBLEMA CON arrayindexoutofboundsexception

Buenas Estoy realizando un pequeña aplicacion conectandose a una bd de oracle , les agradeceria mucho que me pudieran ayudar

Esta clase se encarga de realizar la consulta en la bd que muestra la sgt inf a continuacion, esta ordernado por el campo 1
Cita:
CODIGO F. INICIAL F. FINAL CAUSA PK
174367 12/11/2009 08:56:00 12/11/2009 11:57:00 CAUSA: CIRCULACIÓN. 63,5
174367 12/11/2009 08:56:00 12/11/2009 11:57:00 CAUSA: CIRCULACIÓN. 64,2
174391 12/11/2009 09:29:00 12/11/2009 13:42:00 CAUSA: CIRCULACIÓN. 75
174946 12/11/2009 22:48:00 13/11/2009 00:16:00 CAUSA: AVERÍA. 138,5
Mi clase se encargara de obtener el km total , tenemos que separar el campo pk, como pkinicial y pkfinal que perteneScan al mismo codigo, y asi poder hacer la resta es decir km=pkinicial - pk final
Cita:
......query ...........

PreparedStatement pstmt = consolaSQL.prepareStatement(query);
Suceso suceso;
for(ResultSet resultado = pstmt.executeQuery(); resultado.next(); ListaIncidencias.add(suceso))
{
suceso = new Suceso();
suceso.setSuc_codigo(new Integer(resultado.getInt("suc_codigo")));
suceso.setSuc_version(new Integer(resultado.getInt("suc_version")));
new GregorianCalendar();
Calendar calendario = GregorianCalendar.getInstance();
suceso.setInicio(resultado.getTimestamp("suc_fecha hora_ini"));
suceso.setModificacion(resultado.getTimestamp("suc _fechahora_fin"));
new GregorianCalendar();
Calendar fechainicio = GregorianCalendar.getInstance();
new GregorianCalendar();
Calendar fechamodificacion = GregorianCalendar.getInstance();
fechainicio.setTimeInMillis(resultado.getTimestamp "suc_fechahora_ini").getTime());
fechamodificacion.setTimeInMillis(resultado.getTim estamp("suc_fechahora_fin").getTime());
suceso.setFechainicio(fechainicio);
suceso.setFechamodificacion(fechamodificacion);
suceso.setCausa(resultado.getString("ddcau_descrip cion"));
suceso.setTipo(resultado.getString("ddtip_codigo") );
suceso.setCarretera(resultado.getString("ddcar_car retera"));
suceso.setPk(new Integer(resultado.getInt("pto_pk")));
suceso.setProvincia(resultado.getString("ddprov_pr ovincia"));
suceso.setNivel(resultado.getString("ddnse_nivel_s ervicio"));
System.out.print(query);
}

consolaSQL.close();
}
catch(SQLException e)
{
System.err.println("Tenemos un problemita en la select :)! ");
System.err.println(e.getSQLState());
}
bbdd.cierraConexion();
return ListaIncidencias;
}
public ArrayList acomodar(ArrayList ListaIncidenciaTratar)
{ ArrayList ListaNuevo=new ArrayList();
int i=0;
int km=0;
for( i=0;i<ListaIncidenciaTratar.size();i++)
{
Suceso inc1=(Suceso)ListaIncidenciaTratar.get(i);
Suceso inc2=(Suceso)ListaIncidenciaTratar.get(i+1);


if (inc1.getSuc_codigo().equals(inc2.getSuc_codigo()) )
{ km=Math.abs(inc1.getPk().intValue()-inc2.getPk().intValue());
inc1.setKm(km);
inc1.setPk_inicial(inc1.getPk());
inc1.setPk_final(inc2.getPk());
}
else
{ km=Math.abs(inc1.getPk().intValue()-inc1.getPk().intValue());
inc1.setKm(km);
inc1.setPk_inicial(inc1.getPk());
inc1.setPk_final(inc1.getPk());
i=i-1;
}
ListaNuevo.add(inc1);
System.out.println("suc_codigoINC1"+inc1.getSuc_co digo());
System.out.println("suc_codigoICN2"+inc2.getSuc_co digo());
System.out.println("suc_version"+inc1.getSuc_versi on());
System.out.println("suc_version"+inc2.getSuc_versi on());
System.out.println("fechainicio"+inc1.getInicio()) ;
System.out.println("fechafin"+inc1.getModificacion ());
System.out.println("tipo :"+inc1.getTipo());
System.out.println("causa"+inc1.getCausa());
System.out.println("nivel"+inc1.getNivel());
System.out.println("provincia"+inc1.getProvincia() );
System.out.println("pk inicial= "+inc1.getPk_inicial());
System.out.println("pk final= "+inc1.getPk_final());
System.out.println("km= "+inc1.getKm());
System.out.println("Carretera= "+inc1.getCarretera());
System.out.print("ListaIncidenciaTratar.indexOf(i) "+ListaIncidenciaTratar.lastIndexOf(i));
System.out.print("ListaIncidenciaTratar.indexOf(i) "+ListaIncidenciaTratar.lastIndexOf(i+1));

if((i+1)==ListaIncidenciaTratar.size())
break;
i=i+1;
}
return ListaNuevo;
}

}
El codigo me hace la resta correctamente hasta el penultimo registro, el ultimo registro solo tiene un subsucodigo, y esto genera que salte la excepcion, ya que no encuentra con quien compararlo. como podria evitar esto?, que cuando no encuentro el codigo2 o inc2 solo tome en cuenta el codigo 1, y que el km=0; (cuando solo existe un subcodigo tiene que restarlo por su mismo pk es por eso que siempre estos caso sera 0 el resultado de km ,) el error siempre nada cuando es el ultimo registro y solo tiene un subcodigo

Muchas gracias!, espero que alguien me pueda ayudar
  #2 (permalink)  
Antiguo 16/11/2009, 09:06
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: PROBLEMA CON arrayindexoutofboundsexception

EL problema viene cuando te sales del rango de elementos del array.

if((i+1)==ListaIncidenciaTratar.size())

Imaginemos que tienes un array de 10 elementos. La longitud o el size() es de 10, pero el primer elemento sería para i=0, es decir, que i va de 0 a 9, si en el bucle for intentas acceder al elemento i = 10, realmente estarías intentando acceder al 11º elemento del array, que no existe, y de ahí la excepción.

es decir, en:

for( i=0;i<ListaIncidenciaTratar.size();i++)
{
Suceso inc1=(Suceso)ListaIncidenciaTratar.get(i);
Suceso inc2=(Suceso)ListaIncidenciaTratar.get(i+1);

El for habría que truncarlo antes, es decir:

i<ListaIncidenciaTratar.size()-1

Ese sería el límite, el penúltimo elemento del array, ya que para comparar ya estás accediendo al último elemento. Si quieres comparar el último elemento con otra cosa, tendrás que definir el caso particular una vez hayas realizado el bucle for, pero no ahí.
  #3 (permalink)  
Antiguo 17/11/2009, 04:20
 
Fecha de Ingreso: agosto-2005
Mensajes: 36
Antigüedad: 18 años, 8 meses
Puntos: 0
Respuesta: PROBLEMA CON arrayindexoutofboundsexception

Buenas Fuzzylog
Muchas Gracias por tu ayuda! , a funcionado correctamente ,tengo otro problemilla , te agradeceriaque me puedas orientar ,los datos que muestro con la query y las clases anteriores van pintar un grafico en Openflashchart
tengo este servlets que se encargar de realizar el grafico
Cita:
public class Retenciones extends HttpServlet
{
public void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException, IndexOutOfBoundsException
{ String SO = "Desconocido";
String browser = "Desconocido";
Datos dt = new Datos();
ServletOutputStream salida = res.getOutputStream();
res.setContentType("text/html");
String userAgent = req.getHeader("User-Agent");
if(userAgent.contains("Windows"))
SO = "Windows";
if(userAgent.contains("Linux"))
SO = "Linux";
if(userAgent.contains("Mac"))
SO = "Mac OS";
if(userAgent.contains("MSIE"))
browser = "IE";
if(userAgent.contains("Opera"))
browser = "Opera";
if(userAgent.contains("Firefox"))
browser = "Firefox";
if(userAgent.contains("Safari"))
browser = "Safari";
String parametros = req.getParameter("parametros");
try{
String campos[] = parametros.split("\\|");
String dias = campos[0];
String fecha = campos[1].replaceAll("-",":");
String provincia=campos[2];
provincia=provincia.replace(",", "','");
String nivel=campos[3];
nivel=nivel.replace(",", "','");
HashMap datos = dt.damedatos(fecha, dias, browser, provincia,nivel);
String camposFecha[] = fecha.split("\\ ");
fecha = (new StringBuilder()).append(camposFecha[0]).append(" ").append(camposFecha[1]).append(" ").append(camposFecha[2]).append(" ").append(camposFecha[3]).append(" ").append(camposFecha[4]).toString();
String x_labels = "";
String labels = "00:00,00:10,00:20,00:30,00:40,00:50," +
"01:00,01:10,01:20,01:30,01:40,01:50," +
"02:00,02:10,02:20,02:30,02:40,02:50," +
"03:00,03:10,03:20,03:30,03:40,03:50," +
"04:00,04:10,04:20,04:30,04:40,04:50," +
"05:00,05:10,05:20,05:30,05:40,05:50," +
"06:00,06:10,06:20,06:30,06:40,06:50," +
"07:00,07:10,07:20,07:30,07:40,07:50," +
"08:00,08:10,08:20,08:30,08:40,08:50," +
"09:00,09:10,09:20,09:30,09:40,09:50," +
"10:00,10:10,10:20,10:30,10:40,10:50," +
"11:00,11:10,11:20,11:30,11:40,11:50," +
"12:00,12:10,12:20,12:30,12:40,12:50," +
"13:00,13:10,13:20,13:30,13:40,13:50," +
"14:00,14:10,14:20,14:30,14:40,14:50," +
"15:00,15:10,15:20,15:30,15:40,15:50," +
"16:00,16:10,16:20,16:30,16:40,16:50," +
"17:00,17:10,17:20,17:30,17:40,17:50," +
"18:00,18:10,18:20,18:30,18:40,18:50," +
"19:00,19:10,19:20,19:30,19:40,19:50," +
"20:00,20:10,20:20,20:30,20:40,20:50," +
"21:00,21:10,21:20,21:30,21:40,21:50," +
"22:00,22:10,22:20,22:30,22:40,22:50," +
"23:00,23:10,23:20,23:30,23:40,23:50";
x_labels = labels;
for(int i = 1; i <Integer.parseInt(dias); i++)
x_labels = (new StringBuilder()).append(x_labels).append(",").appe nd(labels).toString();
salida.println((new StringBuilder())
.append("&tool_tip=#x_label#<br>CAUSA:#key#<br>#va l#km<br>Carreteras:<br>#tip#&")
.append("&x_label_style=10,#0101DF,2,")
.append(6 * Integer.parseInt(dias))//multiplica 6 elementos de x_labels x los dias
.append(",#FFFFFF& \n")
.append("&y_label_style=10,#0101DF,2,")
.append(6 * Integer.parseInt(dias))
.append(",#C1CFDD&\n")
.append("&y_ticks=2,5,10& \n")//2.- espacio de la linea al numero, 5.- tamaño del guion cerca d ela linea. 10.- q vaya la hora de 10 en 10
.append("&area_hollow=2,3,25,#000000,'Circulacion' ,12,#000000& \n")
.append("&line=2,#0174DF,CIRCULACION,10,4&\n")
.append("&line_2=3,#8A0808,ACCIDENTE,10,4&\n")
.append("&line_3=3,#088A85,TOTAL,10,4&\n")
.append("&y_legend=Km,13,#0101DF&\n")
.append("&x_legend=Tiempo (Horas),13,#0101DF&\n")
.append("&x_tick_size=20\"\n")
.append("&x_axis_steps=20\n")
.append("&y_min=0& \n")
.append("&y_max=").append(datos.get("max"))//los kilometros de y
.append("&\n")
.append("&x_labels=").append(x_labels).append(",00 :00& \n")
.append("&values=").append(datos.get("circulacion" )).append("&\n")
.append("&values_2=").append(datos.get("accidente" )).append("&\n")
.append("&values_3=").append(datos.get("total")).a ppend("&\n")
.append("&tool_tips_set=").append(datos.get("dcirc ulacion")).append("&\n")
.append("&tool_tips_set_2=").append(datos.get("dac cidente")).append("&\n")
.append("&tool_tips_set_3=").append(datos.get("dto tal")).append("&\n")
.append("&x_axis_steps=30&\n")
.append("&y_label_steps=20&\n")
.append("&x_offset=true&\n")
.append("&inner_background=#C1CFDD,#FFFFFF,70&")
.append("&x_axis_colour=#B0C4D9&\n")
.append("&x_grid_colour=#FFFFFF&")
.append("&y_grid_colour=#FFFFFF&")
.append("&y_axis_colour=#B0C4D9&\n")
.append("&bg_colour=#cadaef&").toString());
//System.out.print("x_labels"+x_labels);
this.crearJson(dias, datos, x_labels, provincia, fecha);
}catch(Exception e){
System.out.println("no pinta:(");
System.err.println(e.getLocalizedMessage());}
}
}
------------>>>>>>> lo demas sigue el sgte mensaje.... eran muchas lineas :)

Última edición por rosemary22; 17/11/2009 a las 07:23
  #4 (permalink)  
Antiguo 17/11/2009, 04:26
 
Fecha de Ingreso: agosto-2005
Mensajes: 36
Antigüedad: 18 años, 8 meses
Puntos: 0
Respuesta: PROBLEMA CON arrayindexoutofboundsexception

El problema que tengo es que quiero hacer una vista previa para imprimir donde me pinte en un pdf o en un doc el grafico con una cabecera , la unica manera que e conseguido para poder pintar el grafico con cabecera , e creado un metodo en la misma clase que es el siguiente
Cita:
public void crearJson(String dias, HashMap datos, String x_labels, String provincia, String fecha){
try{

System.out.println("dias"+dias);
System.out.println("x_labels"+x_labels);
System.out.println("provincia"+provincia);
System.out.println("fecha"+fecha);


File fichero=new File("C:\\Archivos de programa\\workspace\\RETENCIONES\\WebContent\\graf ico.txt");
BufferedWriter bf=new BufferedWriter(new FileWriter(fichero));
bf.write("&tool_tip=#x_label#<br>CAUSA:#key#<br>#v al#km<br>Carreteras:<br>#tip#&");
bf.write("&x_label_style=10,#0101DF,2,");
bf.write(6 * Integer.parseInt(dias));
bf.write(",#FFFFFF& \n");
bf.write("&y_label_style=10,#0101DF,2,");
bf.write(6 * Integer.parseInt(dias));
bf.write(",#C1CFDD&\n") ;
bf.write("&y_ticks=2,5,10&\n");
bf.write("&area_hollow=2,3,25,#000000,'Circulacion ',12,#000000& \n");
bf.write("&line=2,#0174DF,CIRCULACION,10,4&\n");
bf.write("&line_2=3,#8A0808,ACCIDENTE,10,4&\n");
bf.write("&line_3=3,#088A85,TOTAL,10,4&\n");
bf.write("&y_legend=Km,13,#0101DF&\n");
bf.write("&x_legend=Tiempo (Horas),13,#0101DF&\n");
bf.write("&x_tick_size=20\"\n");
bf.write("&x_axis_steps=20\n");
bf.write("&y_min=0& \n");
bf.write("&y_max="+datos.get("max"));
bf.write("&\n");
bf.write("&x_labels="+x_labels+",00:00& \n");
bf.write("&values="+datos.get("circulacion")+"&\n" );
bf.write("&values_2="+datos.get("accidente")+"&\n" );
bf.write("&values_3="+datos.get("total")+"&\n");
bf.write("&tool_tips_set="+datos.get("dcirculacion ")+"&\n");
bf.write("&tool_tips_set_2="+datos.get("daccidente ")+"&\n");
bf.write("&tool_tips_set_3="+datos.get("dtotal")+" &\n");
bf.write("&x_axis_steps=30&\n");
bf.write("&y_label_steps=20&\n");
bf.write("&x_offset=true&\n");
bf.write("&inner_background=#C1CFDD,#FFFFFF,70&");
bf.write("&x_axis_colour=#B0C4D9&\n");
bf.write("&x_grid_colour=#FFFFFF&");
bf.write("&y_grid_colour=#FFFFFF&");
bf.write("&y_axis_colour=#B0C4D9&\n");
bf.write("&bg_colour=#cadaef&");
bf.close();
System.out.print("se a creado el fichero JSON");
}catch(Exception e)
{
System.out.print("No se puede crear el fichero");

}
}

}
Pero esto me parece algo redundante ya que estoy repitiendo el mismo codigo pero en un metodo diferente, el metodo consiste en q creo el txt "grafico.txt" y luego lo pinto en la pagina imprimir.html ( no epodido conseguir q se pinte en un pdf o en un doc
y otro error que me da es que el x_label me pinta todos sus valores, y eso no debe ser debe pintar solo los puntos de km hallados, pero esto solo sucede cuando creo el txt para que lo pinta en la pagina html . y eso es lo que no entiendo por que me muestra bien en la primera pagina pero en la pagina de html de imprimir no

Cita:
imprimir.html

<html>
<head>
</head>
<body>
<table>
<td>
<tr><img src="C:\Archivos de programa\workspace\RETENCIONES\WebContent\imagenes \cabeceras\cabeceraPdf.jpg"/></tr>
<tr></tr>
<tr></tr>
</td>
</table>
<hr>
<script type="text/javascript" src="js/swfobject.js"></script>
<center>
<div id="my_chart"></div>
<script type="text/javascript">
var so = new SWFObject("sice.swf", "ofc", "750", "700", "9", "#FFFFFF");
so.addVariable("data", "grafico.txt");
so.addParam("allowScriptAccess", "always" );//"sameDomain");
so.write("my_chart");
</script>
</center>
</body>
</html>
Te agradeceria mucho que me orientes
Un saludo
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 14:03.