Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Fallo java.lang.StackOverflowError

Buenas,

Antes de nada un saludo a todo el foro. Espero que la duda que traigo me haya servido para iniciarme en vuestra comunidad y espero poder aportar mis escasos conocimientos a toda esta familia.

Estoy realizando un programa en Java que a través de un fichero de entrada de las dimensiones de una serie de edificios, me devuelva un fichero de salida en el que se especifique el Skyline (visión desde el horizonte) de estos edificios.

Os detallo el código para que podáis echarme una cable:

temp = ciudad.size();
DyV(ciudad, 0, temp, linea);
}

public static void DyV(ArrayList<edificio> c, int i, int j, ArrayList<TipoSkyline> s) {

int m,n;
ArrayList<TipoSkyline> s1 = new ArrayList<TipoSkyline>();
ArrayList<TipoSkyline> s2 = new ArrayList<TipoSkyline>();

m = (i + j - 1)/2;
n = j - i + 1;

if (n == 1) {
s.add(new TipoSkyline(Integer.valueOf(c.get(0).getInicio()), (Integer.valueOf(c.get(0).getAltura()))));
}
else; {
DyV(c, i, m, s1);
DyV(c, m+1, j, s2);
Combinar(s1, s2, s);
}
}

El problema viene en la creación del objeto s1 y s2 (new Tiposkyline...) y a las 2 llamadas recursivas a DyV...
Ambas me devuelven error "java.lang.StackOverflowError".

Entiendo que son errores por llamadas recursivas infinitas. Pero tambien en la creación del objeto s1 y s2??
No tengo un caso base bien creado (n == 1) que evita esas llamadas recursivas infinitas??

Gracias anticipadas por todo y un saludo.
Elias.

enero 3, 2012 | Unregistered CommenterElias

El problebla puede ser que estes tratando de llamar un indice que no existe, es decir tienes un array con 5 elemento osea del 0 al 4 y tu llama al indice 5 este no exite y te manda este error...

enero 3, 2012 | Unregistered CommenterSergio

Hola Elías. No sé si es un error de transcripción, pero hay un punto y coma tras el else. Al estar ahí, el bloque else queda vacío, y el siguiente bloque entre llaves se ejecuta siempre. Eso haría que siempre se produjesen dos llamadas recursivas y que saltase el StackOverflow.

Saludos.

enero 4, 2012 | Registered Commenterjvel

Hola Elias,

estoy implementando el algoritmo del skyline.

Me queda hacer la parte de combinar.
Me puedes decir como has hecho esta parte?

Muchas gracias.
Tuco

enero 17, 2012 | Unregistered CommenterTuco

Hola Sergio, perdona por tardar en contestar. Tras tomarte tú la molestia en hacerlo.
Si, el error era ese. Bueno, no el único. Luego tuve problemas con la llamada inicial recursiva, con el caso base de la recursividad y por último con los índices del algoritmo que se salían de rango... Vamos... Un Kaos!! Ahora parece que va bien, pero me falta pulirla.
Gracias de nuevo por tu amabilidad.

Hola Tuco. Estudias Programación III en la UNED??
Te puedo pasar el algoritmo en pseuddocódigo. Yo hicé la práctica a partir de él, pero debes tener en cuenta los fallos que te dije anteriormente...
Tienes algún mail donde te pueda adjuntar el PDF??
Un saludo.

enero 17, 2012 | Unregistered CommenterElias

Hola Elias,

Yo si estudio en la Uned y me vendria muy bien ese código, si fueras tan amable de enviarmelo...

mayo 30, 2012 | Unregistered CommenterEsperanza

y así aprueban las materias...

mayo 31, 2012 | Unregistered Commenteremas

¿cómo que así aprueban las materias? ¿tú qué sabes cuánto ha discurrido ese alumno de la UNED? ¿qué circunstancias crees que tiene la mayoría de la gente en la UNED? A lo mejor es una persona de 58 o más años que empezó a estudiar muy tarde y al que le cuestan muchísimo las matemáticas y ha logrado, hora tras hora de solitario estudio) que es como estudiamos la inmensa mayoría de los alumnos de la UNED), sin apoyo cotidiano de un profesor responsable de la materia y del examen (sólo tenemos, y no en todas las asignaturas) apoyo de unos "tutores", que no son más que personas que deciden cobrar un poco por resolver dudas de los alumnos, pero sin más obligaciones (aunque más de uno se empolla la materia y se deja los sesos y el tiempo en ayudarnos), ha logrado, digo, escribir ese código que está "a puntito de funcionarle", pero aún estas cosas tienen algo de magia que no es fácil de entender y menos si uno es mayor.
A lo peor es un alumno aprovechado y tramposo, pero es lo menos probable. Estamos demasiado solos como para que alguien pretenda dar clases de moral respecto a nuestro esfuerzo en el estudio. Al menos en la UNED.
Creo que el alumno de la UNED tiene la inmensa suerte de que ha de ponerse al día en las tecnologías de la información para poder superar el desamparo que frecuentemente define su realidad.

Además, ya ves que él ha hecho su código. Esta asignatura desaparece este año. Está perfecto que conozca un código que funcione y descubra así qué le falta al suyo.

Así va el país, con tanto prejuicio y tanta mala sangre.

septiembre 2, 2012 | Unregistered CommenterSOLOPROIII

Guenas.

No quisiera inmiscuirme, solopro, pero yo diría que el comentario de emas se refiere a esperanza, no a elias, que como bien dices se lo esta trabajando muy bien.

Salut,
Paposo

septiembre 3, 2012 | Unregistered CommenterPaposo

Creo que el comentario de emas esta bien dirigido a esperanza... creo yo que independientemente de la situación de cada persona no es lo mas apropiado pedir código, ella debe hacerlo por propia cuenta y pedir ayuda como lo hace Elias pero es responsabilidad de cada quien.

Mejor enseñar a pescar que darte el pescado, así q creo q no viene al caso el post de SOLOPROIII

mayo 20, 2016 | Unregistered CommenterAldo

creo que deberías revisar que no tengas algo de mas en tu sintaxis

julio 11, 2016 | Unregistered CommenterArturo