Programación General > Java
mis primeros pasos
(1/1)
luismago:
holas como andan yo soy nuevo en el foro, me estoy iniciando en el java y tengo un codigo que no me funciona correctamente poprfavor les pido le den una revisada y me den pautas a seguir uso el "jcreator"
--- Código: Java ---import java.io.*;class quicksort{ float vec[]; int tam,ind; public quicksort (int tama) { tam = tama; vec = new float [15]; } public void llenar() throws IOException { DataInputStream lee=new DataInputStream(System.in); String texto; for (ind = 1 ; ind <= tam ; ind++) { do{ System.out.print( "ingrese un numero: "); texto = lee.readLine(); } while (texto.length()==0); Float dec=new Float(texto); vec [ind]=dec.floatValue(); } } public void imprimir() { for (ind = 1 ; ind <= tam ; ind++) { System.out.print (vec [ind] + " "); } } public void quicksor (int vec[],int izq, int der) { i=izq; j=der; int medio=vec[(izq+der)/2]; do{ while(vec[i]>medio); { i=i+1; } while(vec[j]<medio); { j=j-1; } if(i<=j) { aux=vec[i]; vec[i]=vec[j]; vec[j]=aux; } }while(i<j); if(izq<j) { quicksort(vec,izq,j); } if(i<der) { quicksort(vec,i,der); } } public static void main (String arg []) throws IOException { DataInputStream fuente = new DataInputStream (System.in); String texto; int nro; do { System.out.print ("ingrese la dimencion"); texto = fuente.readLine (); } while (texto.length () == 0); nro = Integer.parseInt (texto); if (nro < 0) System.out.print ("no se realisa calculos con negativos"); else { quicksort ordena = new quicksort (nro); ordena.llenar(); System.out.print ("el verctor ingresado es: "); ordena.imprimir(); System.out.print ("el vector ordenado es: "); ordena.quicksor(); ordena.imprimir(); } }}
Nagisa:
Buenas:
Varios fallos en el método quicksor. Te pongo tu código y al lado el comentario.
--- Código: Java --- public void quicksor (int vec[],int izq, int der) { i=izq; // No declaras tipo de i j=der; // No declaras tipo de j int medio=vec[(izq+der)/2]; do{ while(vec[i]>medio); // Sobra el ';' { i=i+1; } while(vec[j]<medio); // Sobra el ';' { j=j-1; } if(i<=j) { aux=vec[i]; // No declaras tipo de aux vec[i]=vec[j]; vec[j]=aux; } } while(i<j); // OJO: Esta esta bien, aqui no sobra el ';' if(izq<j) { quicksort(vec,izq,j); // Realmente esta intentando crear un objeto de la clase quicksort. El metodo es quicksor (sin la t al final). } if(i<der) { quicksort(vec,i,der); // Realmente esta intentando crear un objeto de la clase quicksort. El metodo es quicksor (sin la t al final). }}
Además, la llamada inicial desde el main() a quicksor la haces sin parámetros. O bien los pones, o bien te creas una versión del método que se encarge de calcularlos. Sería algo así:
--- Código: Java --- public void quicksor () { quicksor (this.vec, 0, this.tam - 1); }
Además, en la declaración de vec lo defines como array de floats, pero en el método quicksor lo usas como array de int. Cambia uno de los dos.
Todas estas correcciones (salvo los ; de los while) te las detecta automáticamente un IDE tipo eclipse. Prueba a cambiar de IDE :)
Otro detalle. Los indices en java van de 0 a n-1, por lo que al acceder a las posiciones del array tienes que tenerlo en cuenta. Esto te afecta a cuando lo llenas y lo pintas. Estos métodos quedarían asi:
--- Código: Java --- public void llenar() throws IOException { DataInputStream lee = new DataInputStream(System.in); String texto; for (int i = 0; i <= tam-1; i++) { do{ System.out.print( "ingrese un numero: "); texto = lee.readLine(); } while (texto.length()==0); vec[i] = Integer.parseInt(texto); } } public void imprimir() { for (int i = 0; i <= tam-1; i++) { System.out.print (vec [i] + " "); } }
Además, hay algún error en el código por que se me queda enbuclado. Voy a echarle un vistazo, a ver si lo veo.
EDITADO: Ya he visto el fallo en el método de ordenación. Al intercambiar los elementos no actualizas las índices. El método quicksor quedaría así:
--- Código: Java --- // ... if(i<=j) { int aux = vec[i]; // No declaras tipo de aux vec[i] = vec[j]; vec[j] = aux; i++; j--; }//...
Saludos!!
luismago:
gracias por tus consejos mira que soy algo descuidado hice todo lo qeu me digiste y me sale un problemita
"" ';' expected "" ese mensaje me sale
y estoy usando es "jcreator" porfa una ultima idea ayudenme
gracias salu2
--- Código: Java ---import java.io.*;class quicksort{ float vec[]; int tam,ind; public quicksort (int tama) { tam = tama; vec = new float [15]; } public void llenar() throws IOException { DataInputStream lee = new DataInputStream(System.in); String texto; for (int i = 0; i <= tam-1; i++) { do{ System.out.print( "ingrese un numero: "); texto = lee.readLine(); } while (texto.length()==0); vec[i] = Integer.parseInt(texto); } } public void imprimir() { for (int i = 0; i <= tam-1; i++) { System.out.print (vec [i] + " "); } } public void quicksor () { quicksor (this.vec, 0, this.tam - 1); int i=izq; int j=der; int aux; int medio=vec[(izq+der)/2]; do{ while(vec[i]>medio) { i=i+1; } while(vec[j]<medio) { j=j-1; } if(i<=j) { int aux = vec[i]; vec[i] = vec[j]; vec[j] = aux; i++; j--; } }while(i<j) if(izq<j) { quicksor(vec,izq,j); } if(i<der) { quicksor(vec,i,der); } } public static void main (String arg []) throws IOException { DataInputStream fuente = new DataInputStream (System.in); String texto; int nro; do { System.out.print ("ingrese la dimencion"); texto = fuente.readLine (); } while (texto.length () == 0); nro = Integer.parseInt (texto); if (nro < 0) System.out.print ("no se realisa calculos con negativos"); else { quicksort ordena = new quicksort (nro); ordena.llenar(); System.out.print ("el verctor ingresado es: "); ordena.imprimir(); System.out.print ("el vector ordenado es: "); ordena.quicksor(); ordena.imprimir(); } }}
Nagisa:
En la linea 63 te falta un ';'
Navegación
Ir a la versión completa