• Martes 30 de Abril de 2024, 04:56

Autor Tema:  mis primeros pasos  (Leído 1657 veces)

luismago

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
mis primeros pasos
« en: Jueves 3 de Septiembre de 2009, 23:35 »
0
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
  1. import java.io.*;
  2. class quicksort
  3. {
  4.     float vec[];
  5.     int tam,ind;
  6.  
  7.     public quicksort (int tama)
  8.     {
  9.     tam = tama;
  10.     vec = new float [15];
  11.     }
  12.  
  13.  
  14.     public void llenar() throws IOException
  15.     {
  16.     String texto;
  17.     for (ind = 1 ; ind <= tam ; ind++)
  18.     {
  19.         do{
  20.         System.out.print( "ingrese un numero: ");
  21.         texto = lee.readLine();
  22.         } while (texto.length()==0);
  23.         Float dec=new Float(texto);
  24.         vec [ind]=dec.floatValue();
  25.     }
  26.     }
  27.  
  28.  
  29.     public void imprimir()
  30.     {
  31.     for (ind = 1 ; ind <= tam ; ind++)
  32.     {
  33.         System.out.print (vec [ind] + "  ");
  34.     }
  35.     }
  36.  
  37.  
  38.  public void quicksor (int vec[],int izq, int der)
  39.  {
  40.     i=izq;
  41.     j=der;
  42.     int medio=vec[(izq+der)/2];
  43.     do{
  44.         while(vec[i]>medio);
  45.         {
  46.             i=i+1;
  47.         }
  48.         while(vec[j]<medio);
  49.         {
  50.             j=j-1;
  51.         }
  52.         if(i<=j)
  53.         {
  54.             aux=vec[i];
  55.             vec[i]=vec[j];
  56.             vec[j]=aux;
  57.         }
  58.        
  59.        }while(i<j);
  60.        if(izq<j)
  61.        {
  62.         quicksort(vec,izq,j);
  63.        }
  64.        if(i<der)
  65.        {
  66.         quicksort(vec,i,der);
  67.        }
  68.  }
  69.    
  70.      public static void main (String arg []) throws IOException
  71.     {
  72.         DataInputStream fuente = new DataInputStream (System.in);
  73.         String texto;
  74.         int nro;
  75.         do
  76.         {
  77.         System.out.print ("ingrese la dimencion");
  78.         texto = fuente.readLine ();
  79.         }
  80.         while (texto.length () == 0);
  81.         nro = Integer.parseInt (texto);
  82.         if (nro < 0)
  83.         System.out.print ("no se realisa calculos con negativos");
  84.         else
  85.         {
  86.         quicksort ordena = new quicksort (nro);
  87.         ordena.llenar();
  88.         System.out.print ("el verctor ingresado es: ");
  89.         ordena.imprimir();
  90.         System.out.print ("el vector ordenado es: ");
  91.         ordena.quicksor();
  92.         ordena.imprimir();
  93.         }
  94.     }
  95. }
  96.  

Nagisa

  • Miembro MUY activo
  • ***
  • Mensajes: 119
  • Nacionalidad: es
    • Ver Perfil
Re: mis primeros pasos
« Respuesta #1 en: Viernes 4 de Septiembre de 2009, 19:14 »
0
Buenas:

Varios fallos en el método quicksor. Te pongo tu código y al lado el comentario.

Código: Java
  1.  
  2. public void quicksor (int vec[],int izq, int der) {
  3.     i=izq; // No declaras tipo de i
  4.     j=der; // No declaras tipo de j
  5.     int medio=vec[(izq+der)/2];
  6.     do{
  7.         while(vec[i]>medio);  // Sobra el ';'
  8.         {
  9.             i=i+1;
  10.         }
  11.        
  12.         while(vec[j]<medio);   // Sobra el ';'
  13.         {
  14.             j=j-1;
  15.         }
  16.        
  17.         if(i<=j) {
  18.             aux=vec[i]; // No declaras tipo de aux
  19.             vec[i]=vec[j];
  20.             vec[j]=aux;
  21.         }
  22.     } while(i<j); // OJO: Esta esta bien, aqui no sobra el ';'
  23.    
  24.     if(izq<j) {
  25.         quicksort(vec,izq,j); // Realmente esta intentando crear un objeto de la clase quicksort. El metodo es quicksor (sin la t al final).
  26.     }
  27.    
  28.     if(i<der) {
  29.         quicksort(vec,i,der); // Realmente esta intentando crear un objeto de la clase quicksort. El metodo es quicksor (sin la t al final).
  30.     }
  31. }
  32.  
  33.  

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
  1.  
  2.     public void quicksor () {
  3.         quicksor (this.vec, 0, this.tam - 1);
  4.     }
  5.  
  6.  

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
  1.  
  2.     public void llenar() throws IOException {
  3.         DataInputStream lee = new DataInputStream(System.in);
  4.         String texto;
  5.  
  6.         for (int i = 0; i <= tam-1; i++) {
  7.             do{
  8.                 System.out.print( "ingrese un numero: ");
  9.                 texto = lee.readLine();
  10.             } while (texto.length()==0);
  11.             vec[i] = Integer.parseInt(texto);
  12.         }
  13.     }
  14.  
  15.  
  16.     public void imprimir() {
  17.         for (int i = 0; i <= tam-1; i++) {
  18.             System.out.print (vec [i] + "  ");
  19.         }
  20.     }
  21.  
  22.  

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
  1.  
  2. // ...
  3.             if(i<=j) {
  4.                 int aux = vec[i]; // No declaras tipo de aux
  5.                 vec[i] = vec[j];
  6.                 vec[j] = aux;
  7.                 i++;
  8.                 j--;
  9.             }
  10. //...
  11.  
  12.  

Saludos!!
   

luismago

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: mis primeros pasos
« Respuesta #2 en: Viernes 4 de Septiembre de 2009, 22:12 »
0
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
  1. import java.io.*;
  2. class quicksort
  3. {
  4.     float vec[];
  5.     int tam,ind;
  6.  
  7.     public quicksort (int tama)
  8.     {
  9.     tam = tama;
  10.     vec = new float [15];
  11.     }
  12.  
  13.  
  14.     public void llenar() throws IOException
  15.      {
  16.          DataInputStream lee = new DataInputStream(System.in);
  17.          String texto;
  18.  
  19.          for (int i = 0; i <= tam-1; i++) {
  20.              do{
  21.                  System.out.print( "ingrese un numero: ");
  22.                  texto = lee.readLine();
  23.              } while (texto.length()==0);
  24.              vec[i] = Integer.parseInt(texto);
  25.          }
  26.      }
  27.  
  28.  
  29.      public void imprimir()
  30.      {
  31.          for (int i = 0; i <= tam-1; i++)
  32.           {
  33.              System.out.print (vec [i] + "  ");
  34.           }
  35.        }
  36.  
  37.  
  38.  public void quicksor ()
  39.  {
  40.     quicksor (this.vec, 0, this.tam - 1);
  41.     int i=izq;
  42.     int j=der;
  43.     int aux;
  44.     int medio=vec[(izq+der)/2];
  45.     do{
  46.         while(vec[i]>medio)
  47.         {
  48.             i=i+1;
  49.         }
  50.         while(vec[j]<medio)
  51.         {
  52.             j=j-1;
  53.         }
  54.          if(i<=j)
  55.          {
  56.                  int aux = vec[i];
  57.                  vec[i] = vec[j];
  58.                  vec[j] = aux;
  59.                  i++;
  60.                  j--;
  61.          }
  62.        
  63.        }while(i<j)
  64.      
  65.        if(izq<j)
  66.        {
  67.         quicksor(vec,izq,j);
  68.        }
  69.        if(i<der)
  70.        {
  71.         quicksor(vec,i,der);
  72.        }
  73.  }
  74.    
  75.      public static void main (String arg []) throws IOException
  76.     {
  77.         DataInputStream fuente = new DataInputStream (System.in);
  78.         String texto;
  79.         int nro;
  80.         do
  81.         {
  82.         System.out.print ("ingrese la dimencion");
  83.         texto = fuente.readLine ();
  84.         }
  85.         while (texto.length () == 0);
  86.         nro = Integer.parseInt (texto);
  87.         if (nro < 0)
  88.         System.out.print ("no se realisa calculos con negativos");
  89.         else
  90.         {
  91.         quicksort ordena = new quicksort (nro);
  92.         ordena.llenar();
  93.         System.out.print ("el verctor ingresado es: ");
  94.         ordena.imprimir();
  95.         System.out.print ("el vector ordenado es: ");
  96.         ordena.quicksor();
  97.         ordena.imprimir();
  98.         }
  99.     }
  100. }
  101.  

Nagisa

  • Miembro MUY activo
  • ***
  • Mensajes: 119
  • Nacionalidad: es
    • Ver Perfil
Re: mis primeros pasos
« Respuesta #3 en: Miércoles 9 de Septiembre de 2009, 21:23 »
0
En la linea 63 te falta un ';'