3
« en: Domingo 22 de Mayo de 2011, 04:17 »
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||**********************************************************||");
}
}