Viernes 8 de Noviembre de 2024, 16:07
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
Java
(Moderador:
arielb
) »
error Exception in thread "main" java.lang.StackOver
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: error Exception in thread "main" java.lang.StackOver (Leído 5527 veces)
kas09013
Nuevo Miembro
Mensajes: 12
error Exception in thread "main" java.lang.StackOver
«
en:
Domingo 22 de Mayo de 2011, 04:17 »
0
necesito ayuda, cree el programa se seleccion en forma recursiva, pero me marca el error Exception in thread "main" java.lang.StackOverflowError at SeleccionRecursivo.Seleccion(SeleccionRecursivo.java:22), eh leido el por qe de ese error y entendi que es por que el metodo se llama asi ismo y s esta ciclando pero no se como corregirlo alguien me puede ayudar? este es el codigo :
import java.io.*;//Libreria De Java Para Ingresar Datos Desde Teclado
class SeleccionRecursivo{// Nombre de La Clase
public static int Seleccion(int numeros[], int n){
int aux, i, l, posMayor;
if(n>1){
posMayor=0;
for(i=1; i<n;i++){
if(numeros
>numeros[posMayor]){
posMayor=i;
}
aux=numeros[n-1];
numeros[n-1]=numeros[posMayor];
numeros[posMayor]=aux;
}
System.out.println(" ");
for (l=0; l<n; l++){// For Para Imprimir La Ordenacion De Los Numeros
System.out.print("|");
System.out.print(numeros[l] + "|");
}
}
return Seleccion(numeros, n-1);
}
public static void main(String args[])throws IOException{
BufferedReader res1=new BufferedReader(new InputStreamReader(System.in));
long tiempoInicio = System.currentTimeMillis();
int n;
int v[]=new int [15];//Declaracion De Arreglo
int res;// Declaracion De Variable
System.out.println ( "n||************** Metodo De Odenacion Seleccion **************|| n|| || ");
System.out.println ( "|| 1.-Cantidad De Numeros A Ordenar: ||");
System.out.print( "|| ");
n=Integer.parseInt(res1.readLine());//Lee Los Datos Introducidos Desde Teclado
System.out.println ( "|| 2.-Numeros A Ordenar: ||");
for (int i=0; i<n; i++){// Ciclo For Para Pedir que Indroduzca Los Valores
System.out.print( "|| ");
v
=Integer.parseInt(res1.readLine());}// Lee y Almacena Los Datos Desde teclado En El Arreglo
System.out.println("|| 3.-Ordenacion De Numeros || n");
for (int i=0; i<n; i++){//Ciclo For Para La Ordenacion de Numeros
System.out.print("|");
System.out.print(v
+ "|");
}
System.out.println(" ");
res=Seleccion(v,n);//Llama All Metodo anterior Para Que Devuelva Datos
long totalTiempo = System.currentTimeMillis() - tiempoInicio;// Funcion Que Mide El Tiempo Y Calcula El Tiempo Total Empleado A Partir De La Diferencia Del Tiempo Inicial Y Final
System.out.println("n||El tiempo total de la ejecucion es :" + totalTiempo + " miliseg");
System.out.println ( "n||**********************************************************||");
}
}
Tweet
tomas_sauron
Miembro activo
Mensajes: 56
Re: error Exception in thread "main" java.lang.StackOver
«
Respuesta #1 en:
Lunes 23 de Mayo de 2011, 03:17 »
0
hola creo q lo q esta mal es la part recursiva o sea al programa vos le pones
if (n>1){
condiciones
}
deberia ir un else {
condiciones
}
ya q nada le impid al programa q c siga llamando hasta q n valga lo k sea
x ejemplo corrri tu programa en eclipse con el debug
y m dic q n x lo menos llega a valer -280
un ejemplo d recursividad es el factorial
si n =0 entonces n!=1
sino si n>=1 entonces n!=(n-1)!.n
y creo es mejor si trabajas con vectores
pasarle la primera posicion y la ultima
y preguntar las condiciones en base a esas posiciones
bah yo lo hacia asi m andaba
noc si m expliq bien sino pregunta d vuelta !!!
saludos!!
PD: usas eclipse ?? o en bloc de notas ???
kas09013
Nuevo Miembro
Mensajes: 12
Re: error Exception in thread "main" java.lang.StackOver
«
Respuesta #2 en:
Lunes 23 de Mayo de 2011, 06:06 »
0
gracias si entendii ahorita voi a tratar de componerlo ojala q si me salga
pD. uso bloc de notas
kas09013
Nuevo Miembro
Mensajes: 12
metodo sin fin
«
Respuesta #3 en:
Lunes 23 de Mayo de 2011, 06:34 »
0
u.U! ya no me sale el error se exception in thread main java.lang.stackover, pero ahora se me cicla, me imprime el arreglo ordenado demasiadas veces! u.u le cambie el if por un if con else y no, lo cambie por un while, y no por un do while y tampoco! :/ tienen idea de que es lo que hace mal?, u.u mi codigo quedo asi;
import java.io.*;//Libreria De Java Para Ingresar Datos Desde Teclado
class SeleccionRecursivo{// Nombre de La Clase
public static int Seleccion(int numeros[], int k){
int aux, i=0, l,posMayor=0;
do{
for(i=1; i<k;i++){
if(numeros
>numeros[posMayor]){
posMayor=i;
}
aux=numeros[k-1];
numeros[k-1]=numeros[posMayor];
numeros[posMayor]=aux;
}
System.out.println(" ");
for (l=0; l<k; l++){// For Para Imprimir La Ordenacion De Los Numeros
System.out.print("|");
System.out.print(numeros[l] + "|");
}
}while(k>1);
return Seleccion(numeros, k-1);
}
public static void main(String args[])throws IOException{
BufferedReader res1=new BufferedReader(new InputStreamReader(System.in));
long tiempoInicio = System.currentTimeMillis();
int n;
int v[]=new int [15];//Declaracion De Arreglo
int res;// Declaracion De Variable
System.out.println ( "n||************** Metodo De Odenacion Seleccion **************|| n|| || ");
System.out.println ( "|| 1.-Cantidad De Numeros A Ordenar: ||");
System.out.print( "|| ");
n=Integer.parseInt(res1.readLine());//Lee Los Datos Introducidos Desde Teclado
System.out.println ( "|| 2.-Numeros A Ordenar: ||");
for (int i=0; i<n; i++){// Ciclo For Para Pedir que Indroduzca Los Valores
System.out.print( "|| ");
v
=Integer.parseInt(res1.readLine());}// Lee y Almacena Los Datos Desde teclado En El Arreglo
System.out.println("|| 3.-Ordenacion De Numeros || n");
for (int i=0; i<n; i++){//Ciclo For Para La Ordenacion de Numeros
System.out.print("|");
System.out.print(v
+ "|");
}
System.out.println(" ");
res=Seleccion(v,n);//Llama All Metodo anterior Para Que Devuelva Datos
long totalTiempo = System.currentTimeMillis() - tiempoInicio;// Funcion Que Mide El Tiempo Y Calcula El Tiempo Total Empleado A Partir De La Diferencia Del Tiempo Inicial Y Final
System.out.println("n||El tiempo total de la ejecucion es :" + totalTiempo + " miliseg");
System.out.println ( "n||**********************************************************||");
}
}
tomas_sauron
Miembro activo
Mensajes: 56
Re: error Exception in thread "main" java.lang.StackOver
«
Respuesta #4 en:
Lunes 23 de Mayo de 2011, 23:48 »
0
Hola este es tu mismo codigo pero con un else de mas y anda bien
Código: Java
import
java.io.*
;
//Libreria De Java Para Ingresar Datos Desde Teclado
class
SeleccionRecursivo
{
// Nombre de La Clase
public
static
int
Seleccion
(
int
numeros
[
]
,
int
n
)
{
int
aux, i, l, posMayor
;
int
ulpos
=
n
;
if
(
n
>
1
)
{
posMayor
=
0
;
for
(
i
=
1
;
i
<
n
;
i
++
)
{
if
(
numeros
[
i
]
>
numeros
[
posMayor
]
)
{
posMayor
=
i
;
}
aux
=
numeros
[
n
-
1
]
;
numeros
[
n
-
1
]
=
numeros
[
posMayor
]
;
numeros
[
posMayor
]
=
aux
;
}
System
.
out
.
println
(
" "
)
;
for
(
l
=
0
;
l
<
10
;
l
++
)
{
// For Para Imprimir La Ordenacion De Los Numeros
System
.
out
.
print
(
"|"
)
;
System
.
out
.
print
(
numeros
[
l
]
+
"|"
)
;
}
return
Seleccion
(
numeros, n
-
1
)
;
}
else
{
return
0
;
//este es el else añadido
}
}
public
static
void
main
(
String
args
[
]
)
throws
IOException
{
BufferedReader
res1
=
new
BufferedReader
(
new
InputStreamReader
(
System
.
in
)
)
;
long
tiempoInicio
=
System
.
currentTimeMillis
(
)
;
int
n
;
int
v
[
]
=
new
int
[
15
]
;
//Declaracion De Arreglo
int
res
;
// Declaracion De Variable
System
.
out
.
println
(
"n||************** Metodo De Odenacion Seleccion **************|| n|| || "
)
;
System
.
out
.
println
(
"|| 1.-Cantidad De Numeros A Ordenar: ||"
)
;
System
.
out
.
print
(
"|| "
)
;
n
=
Integer
.
parseInt
(
res1.
readLine
(
)
)
;
//Lee Los Datos Introducidos Desde Teclado
System
.
out
.
println
(
"|| 2.-Numeros A Ordenar: ||"
)
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
// Ciclo For Para Pedir que Indroduzca Los Valores
System
.
out
.
print
(
"|| "
)
;
v
[
i
]
=
Integer
.
parseInt
(
res1.
readLine
(
)
)
;
}
// Lee y Almacena Los Datos Desde teclado En El Arreglo
System
.
out
.
println
(
"|| 3.-Ordenacion De Numeros || n"
)
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
//Ciclo For Para La Ordenacion de Numeros
System
.
out
.
print
(
"|"
)
;
System
.
out
.
print
(
v
[
i
]
+
"|"
)
;
}
System
.
out
.
println
(
" "
)
;
res
=
Seleccion
(
v,n
)
;
//Llama All Metodo anterior Para Que Devuelva Datos
long
totalTiempo
=
System
.
currentTimeMillis
(
)
-
tiempoInicio
;
// Funcion Que Mide El Tiempo Y Calcula El
//Tiempo Total Empleado A Partir De La Diferencia Del Tiempo Inicial Y Final
System
.
out
.
println
(
"n||El tiempo total de la ejecucion es :"
+
totalTiempo
+
" miliseg"
)
;
System
.
out
.
println
(
"n||**********************************************************||"
)
;
}
}
fijate si anda asi
...
osea t lo imprime por cada llamada recursiva xq lo hicist asi
a eso t referis q t lo imprime repetidas vcs ???? si es asi pods hacr 1 metodo q sea d ordenamiento q reciba el arreglo y t lo dvuelva ordenado
y lo mostras en el main o t acs otro metodo q lo muestre si tnes dudas consulta d vuelta !!
saludos !!
tomas_sauron
Miembro activo
Mensajes: 56
Re: error Exception in thread "main" java.lang.StackOver
«
Respuesta #5 en:
Martes 24 de Mayo de 2011, 00:33 »
0
ahhhhhhhhhhhhhhhhh ya entndi !!! noc xq le pusist un bucle ??? recursividad es anti bucle !! por asi dcirlo
o sea si usas recursividad no pods usar bucles ya sean for while do while xq lo q ac la recursividad s repetir varias vcs una llamada a una funcion (metodo ) hasta q una condicion d cort se cumpla y salga con 1 resultado
x ejemplo
Código: Java
if
(
n
==
0
)
{
n
=
1
;
return
n
;
}
else
{
return
factorial
(
n
-
1
)
*
n
aca factorial c llama el metodo
y se llama asi mismo restandole al argumento n una unidad (o sea n-1)y lo hace
hasta q n valga cero cuando n vale cero sale con un uno devuelve el resultado d acr 1*factorial(2)*factorial(3)*factorial(4) por eso
q no ac falta un while sino esta d mas por eso cicla infinitamente
espero t sirva sino ya sabs pregunta d vuelta !! [/color]
kas09013
Nuevo Miembro
Mensajes: 12
Re: error Exception in thread "main" java.lang.StackOver
«
Respuesta #6 en:
Martes 24 de Mayo de 2011, 20:02 »
0
Muchas garcias!
si ya ahora si corre bien , pero que cres! no hace lo que quiero creo que lo no hice bien por que no los acomoda como el ordenamiento de seleccion! o.O lo ordena como inserccion !u.U ya me estresee u.u empezzare de nuevo a crearlo si tienes un ejemplo de seleccion recursivo te lo agradeceria muucho. Sino de todas formas muchisiimas gracias
kas09013
Nuevo Miembro
Mensajes: 12
Re: error Exception in thread "main" java.lang.StackOver
«
Respuesta #7 en:
Martes 24 de Mayo de 2011, 20:46 »
0
ya lo hicee!
pero no me los ordena bien alguna idea?
import java.io.*;//Libreria De Java Para Ingresar Datos Desde Teclado
class SeleccionRecursivo2{// Nombre de La Clase
public static int Seleccion(int v[], int n){
int i, minimo,l;
if (n>=1) {
minimo=0;
for(i=1;i<n;i++)
if(v
<v[minimo])
minimo=i;
i=v[0];
v[0]=v[minimo];
v[minimo]=i;
return Seleccion(v,n-1);
}else{
return 0;
}
}
public static void main(String args[])throws IOException{
BufferedReader res1=new BufferedReader(new InputStreamReader(System.in));
long tiempoInicio = System.currentTimeMillis();
int n;
int v[]=new int [15];//Declaracion De Arreglo
int res;// Declaracion De Variable
System.out.println ( "n||************** Metodo De Odenacion Seleccion **************|| n|| || ");
System.out.println ( "|| 1.-Cantidad De Numeros A Ordenar: ||");
System.out.print( "|| ");
n=Integer.parseInt(res1.readLine());//Lee Los Datos Introducidos Desde Teclado
System.out.println ( "|| 2.-Numeros A Ordenar: ||");
for (int i=0; i<n; i++){// Ciclo For Para Pedir que Indroduzca Los Valores
System.out.print( "|| ");
v
=Integer.parseInt(res1.readLine());}// Lee y Almacena Los Datos Desde teclado En El Arreglo
System.out.println("|| 3.-Ordenacion De Numeros || n");
for (int i=0; i<n; i++){//Ciclo For Para La Ordenacion de Numeros
System.out.print("|");
System.out.print(v
+ "|");
}
System.out.println(" ");
res=Seleccion(v,n);//Llama All Metodo anterior Para Que Devuelva Datos
long totalTiempo = System.currentTimeMillis() - tiempoInicio;// Funcion Que Mide El Tiempo Y Calcula El Tiempo Total Empleado A Partir De La Diferencia Del Tiempo Inicial Y Final
System.out.println("n||El tiempo total de la ejecucion es :" + totalTiempo + " miliseg");
System.out.println ( "n||**********************************************************||");
}
} //fin clase seleccion recursivo
kas09013
Nuevo Miembro
Mensajes: 12
Re: error Exception in thread "main" java.lang.StackOver
«
Respuesta #8 en:
Martes 24 de Mayo de 2011, 22:51 »
0
esto de recursividad no me sale, lo eh vuelto a cambiar por que no hacia bien los cambios si lo acomodaba pero no por orden de seleccion eh cambiado el codigo pero solo me imprime el primer cambio alguna sugerencia?
Código: Java
import
java.io.*
;
//Libreria De Java Para Ingresar Datos Desde Teclado
class
SeleccionRecursivo5
{
// Nombre de La Clase
public
static
int
Seleccion
(
int
v
[
]
,
int
n,
int
m
)
{
int
i
=
0
, j, min, k, l
;
int
cambio
;
if
(
m
<
n
)
{
min
=
v
[
i
]
;
// Asignacion Del Valor En La Variable Min En El Arreglo a[i]
k
=
0
;
// Asignacion De 0 A La Variable k
cambio
=
0
;
//Asignacion de 0 A La Variable cambio
for
(
j
=
m
+
1
;
j
<
n
;
j
++
)
//For Para Seguir Ordenando Numeros
if
(
v
[
j
]
<
min
)
//If Que Compara Valor Del Arreglo a[j] Con min
min
=
v
[
j
]
;
//Asignacion Del Valor De La Variable min En El Arreglo a[j]
k
=
j
;
//Asigna Valor De k En j
cambio
=
1
;
//A Cambio Le Asigna El valor De 1
if
(
cambio
==
1
)
{
// Comparacion Del Valor de Cambio
v
[
k
]
=
v
[
i
]
;
// Asignacion Del Valor Del arrreglo a[k] en a[i]
v
[
i
]
=
min
;
// Asignacion Del Valor Del Arreglo a[i] En La Variable Min
System
.
out
.
println
(
" "
)
;
for
(
l
=
0
;
l
<
n
;
l
++
)
{
// For Para Imprimir La Ordenacion De Los Numeros
System
.
out
.
print
(
"|"
)
;
System
.
out
.
print
(
v
[
l
]
+
"|"
)
;
}
}
return
Seleccion
(
v,n,m
+
1
)
;
}
else
{
return
0
;
}
}
public
static
void
main
(
String
args
[
]
)
throws
IOException
{
BufferedReader
res1
=
new
BufferedReader
(
new
InputStreamReader
(
System
.
in
)
)
;
long
tiempoInicio
=
System
.
currentTimeMillis
(
)
;
int
n,m
=
0
;
int
v
[
]
=
new
int
[
15
]
;
//Declaracion De Arreglo
int
res
;
// Declaracion De Variable
System
.
out
.
println
(
"n||************** Metodo De Odenacion Seleccion **************|| n|| || "
)
;
System
.
out
.
println
(
"|| 1.-Cantidad De Numeros A Ordenar: ||"
)
;
System
.
out
.
print
(
"|| "
)
;
n
=
Integer
.
parseInt
(
res1.
readLine
(
)
)
;
//Lee Los Datos Introducidos Desde Teclado
System
.
out
.
println
(
"|| 2.-Numeros A Ordenar: ||"
)
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
// Ciclo For Para Pedir que Indroduzca Los Valores
System
.
out
.
print
(
"|| "
)
;
v
[
i
]
=
Integer
.
parseInt
(
res1.
readLine
(
)
)
;
}
// Lee y Almacena Los Datos Desde teclado En El Arreglo
System
.
out
.
println
(
"|| 3.-Ordenacion De Numeros || n"
)
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
//Ciclo For Para La Ordenacion de Numeros
System
.
out
.
print
(
"|"
)
;
System
.
out
.
print
(
v
[
i
]
+
"|"
)
;
}
System
.
out
.
println
(
" "
)
;
res
=
Seleccion
(
v,n,m
)
;
//Llama All Metodo anterior Para Que Devuelva Datos
long
totalTiempo
=
System
.
currentTimeMillis
(
)
-
tiempoInicio
;
// Funcion Que Mide El Tiempo Y Calcula El Tiempo Total Empleado A Partir De La Diferencia Del Tiempo Inicial Y Final
System
.
out
.
println
(
"n||El tiempo total de la ejecucion es :"
+
totalTiempo
+
" miliseg"
)
;
System
.
out
.
println
(
"n||**********************************************************||"
)
;
}
}
//f
kas09013
Nuevo Miembro
Mensajes: 12
Re: error Exception in thread "main" java.lang.StackOver
«
Respuesta #9 en:
Martes 24 de Mayo de 2011, 23:08 »
0
gracias por tu ayudaa ya pude terminarlo
tomas_sauron
Miembro activo
Mensajes: 56
Re: error Exception in thread "main" java.lang.StackOver
«
Respuesta #10 en:
Miércoles 25 de Mayo de 2011, 06:08 »
0
Ak lo tngo m costo 1 toke xq hacia mucho no hacia metodos d ordenamiento jajaja
espero t sirva
Código: Java
import
java.io.*
;
class
SeleccionRecursivo
{
public
void
selSort1
(
int
[
]
vector,
int
ini,
int
ult
)
{
int
aux
;
if
(
ini
<
ult
)
{
if
(
vector
[
ini
]
>
vector
[
ult
]
)
{
aux
=
vector
[
ult
]
;
vector
[
ult
]
=
vector
[
ini
]
;
vector
[
ini
]
=
aux
;
selSort1
(
vector,ini,ult
-
1
)
;
}
else
{
selSort1
(
vector,ini,ult
-
1
)
;
}
}
}
public
void
selSort
(
int
[
]
vector,
int
ini,
int
ult
)
{
if
(
ini
<
ult
)
{
selSort1
(
vector,ini,ult
)
;
selSort
(
vector, ini
+
1
, ult
)
;
}
}
}
//-------------------------main----------------
import
java.io.*
;
class
SeleccionRecursivo2
{
public
static
void
main
(
String
args
[
]
)
throws
IOException
{
SeleccionRecursivo selSort
=
new
SeleccionRecursivo
(
)
;
BufferedReader
res1
=
new
BufferedReader
(
new
InputStreamReader
(
System
.
in
)
)
;
long
tiempoInicio
=
System
.
currentTimeMillis
(
)
;
int
n
;
int
v
[
]
=
new
int
[
15
]
;
//Declaracion De Arreglo
int
res
;
// Declaracion De Variable
System
.
out
.
println
(
"n||************** Metodo De Odenacion Seleccion **************|| n|| || "
)
;
System
.
out
.
println
(
"|| 1.-Cantidad De Numeros A Ordenar: ||"
)
;
System
.
out
.
print
(
"|| "
)
;
n
=
Integer
.
parseInt
(
res1.
readLine
(
)
)
;
//Lee Los Datos Introducidos Desde Teclado
System
.
out
.
println
(
"|| 2.-Numeros A Ordenar: ||"
)
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
// Ciclo For Para Pedir que Indroduzca Los Valores
System
.
out
.
print
(
"|| "
)
;
v
[
i
]
=
Integer
.
parseInt
(
res1.
readLine
(
)
)
;
}
// Lee y Almacena Los Datos Desde teclado En El Arreglo
selSort.
selSort
(
v,
0
, n
-
1
)
;
System
.
out
.
println
(
"|| 3.-Ordenacion De Numeros || n"
)
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
//Ciclo For Para La Ordenacion de Numeros
System
.
out
.
print
(
"|"
)
;
System
.
out
.
print
(
v
[
i
]
+
"|"
)
;
}
System
.
out
.
println
(
" "
)
;
}
}
Saludos!!
PD:es totalmente recursivo
no utiliza bucles for while o do while
[/color]
kas09013
Nuevo Miembro
Mensajes: 12
Re: error Exception in thread "main" java.lang.StackOver
«
Respuesta #11 en:
Jueves 26 de Mayo de 2011, 05:42 »
0
Muchisimas gracias!!! mee az salvadoo
gracias!!!!!!!!
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
Java
(Moderador:
arielb
) »
error Exception in thread "main" java.lang.StackOver