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

[0] Índice de Mensajes

Ir a la versión completa