Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Dem0ny en 2 Enero 2010, 22:20 pm



Título: Array y bucle for
Publicado por: Dem0ny en 2 Enero 2010, 22:20 pm
Hola!

Al grano! Estoy haciendo un programa en el cual segun lo tengo diseñado, un metodo reciba 2 vectores y posteriormente invoque a otro metodo, sin devolver nada. Vamos bien.. pero ahora bien, al recibir, 2 vectores debo comparar la uno de ellos en función de otro. Me explico.

Supongamos que tengo un metodo (inventado sobre la marcha) que recibe una lista de x nombres de dependientas de un establecimiento y tienen otro vector que recibe una lista correspondiente al nombre con el dinero que cobra cada dependienta. Quiero almacenar en 2 nuevas matrices... los nombres y el dinero exacto que cobran las dependientas que tengan mas de 1000 euros.

Código
  1. public static void Saldo (String []nombres, int dinero[]{
  2.                //Creo los nuevos vectores apuntando a null ya que no se la longitud de las nuevas matr.
  3.                String nombre2[] = null;
  4.                int dinero2[] = null;
  5.               //Inicio bucle for...para recorrer e ir añadiendo segun los requerimientos:
  6.              for(int i=0; nombres.legth;i++){
  7.                   if(dinero[i]>=5){
  8.                        nombre2[i]=nombre[i];
  9.                        dinero2[i] = dinero[i];
  10.                    }
  11.             }
  12.           metodo_imprimir (nombre2,dinero2);
  13.    }
  14.  

El error viene dado por una excepción por el null de las dos matrices. (NullpointerException). Que para este caso en concreto por mas que miro... nose.. creo que se me escapa algo y nose qué.

También pensé en crear un contador, dentro de la matriz para que cuando acabase el bucle se quedara definida la dimension del vector, pero es una tonteria, teniendo en cuenta que eso lo hace la variable i del bucle for.

Otra cosa que pense es inicializar las matrices dentro del bucle pero no tiene sentido, el error seguiría viniendo al ser declaradas como null y cada interación del bucle volveria a crear la matriz. No sé si me comprendeis.

Algo se me escapa, alguien me ayuda?

P.D. El programa no es el real, es meramente un ejemplo..

P.D.2. La duda real sería, ¿Como utilizar un array unidimensional con una longitud variable que no sabemos y que viene dada dependiendo de otra dentro de un bucle for?

Saludos!


Título: Re: Array y bucle for
Publicado por: Dem0ny en 2 Enero 2010, 22:21 pm
He tenido un problema con el navegador y sin querer he posteado 3 veces. Disculpen las molestias, borrare ahoramismo los post.


Título: Re: Array y bucle for
Publicado por: Leyer en 2 Enero 2010, 22:38 pm
y por que no la inicializas al inicio String nombre2[] = new String [nombres.length];  :huh:


Título: Re: Array y bucle for
Publicado por: Dem0ny en 2 Enero 2010, 22:42 pm
Este es el post bueno.

Por la sencilla razón de que la dimensión de la matriz nueva no es igual que la de la matriz antigua, me explico:

Si tu tienes 20 empleados con 20 nombres y con 20 sueldos... y quieres saber cuales de ellos pasan de 1000 euros... Tu no sabes cuantos hay, creas un programa para saberlo.

Por tanto no tienes forma de inicializar antes con 10 o 12 o 15 empleados ...

Comprendes?


Título: Re: Array y bucle for
Publicado por: Leyer en 2 Enero 2010, 23:31 pm
entiendo
Código
  1. public void method_1(String []nombres, int dinero[]){
  2. String nombre2[] = null;
  3.        int dinero2   [] = null;
  4.        int c=0, y=0;
  5.        for(int i=0;
  6.         i<dinero.length;i++){
  7.         if(dinero[i]>=5)c++;
  8.         if(i==dinero.length-1){
  9.            nombre2 =new String[c];
  10.            dinero2 =new int   [c];  
  11.           for(int index=0;
  12.           index<dinero.length;index++){    
  13.             if(dinero[index]>=5){
  14.             nombre2[y] = nombres[index];
  15.                         dinero2[y] = dinero [index];
  16.                         y++;
  17.             }
  18.             }
  19.             }
  20.        }
  21. }

Saludos.!


Título: Re: Array y bucle for
Publicado por: Dem0ny en 2 Enero 2010, 23:50 pm
que yo me entere, creas una variable,  que pueda calcular la longitud con contadores y demás. y una vez calculada la longitud tienes ya todo. Para hacerlo normal...

No se podría hacer en un solo bucle verdad? Daría error al completar nombre2 y dinero2 no?


Título: Re: Array y bucle for
Publicado por: Leyer en 2 Enero 2010, 23:57 pm
-.-! si se podria pero se nececitarian comprobaciones innecesarias el cual reduces con otro for ademas por que lo quieres hacer con un solo for?? si es por velocidad creo que estas midiendo mal la velocidad de java


Título: Re: Array y bucle for
Publicado por: panaka en 3 Enero 2010, 00:03 am
No se si has visto la respuesta que te puse en uno de los otros post y el uso de ArrayList, pero creo que es lo mas simple y con solo un bucle.

Saludos


Título: Re: Array y bucle for
Publicado por: Dem0ny en 3 Enero 2010, 00:06 am
Postealo si no te importa porfavor.

@LEYER: Lo digo porque esto es un ejemplo tonto de un programilla que tengo que hacer para clase y nada intento hacerlo lo mas simplificado posible ya que se valora el tema de orden de complejidad y demás lios... intento poner los menos bucles posibles :D


Título: Re: Array y bucle for
Publicado por: Leyer en 3 Enero 2010, 00:21 am
haa ok, bueno yo no use array list como lo iso panaka ya que estas trabajando con arreglos pero si lo usas te simplificara mas las cosas pero tendras que modificar los parametos a quien le devolveras los nuevos valores


Título: Re: Array y bucle for
Publicado por: panaka en 3 Enero 2010, 17:55 pm
A ver si no entendi mal tienes dos Arrays un con nombres y otro con sueldos, doy por hecho de que estan por orden, quieres recibir un nuevo par de Arrays en donde tengas los nombres y los sueldos de los de mas de 1000 €

public static void Saldo (String []nombres, int dinero[]{
  ArrayList nombresD1000 = new ArrayList();
  ArrayList sueldosD1000 = new ArrayList();

  for (i = 0; i < nombres.length; i++){
     if (dinero[ i ] >1000){
        nombresD1000.add(nombres[ i ]);
        sueldosD1000.add(dinero[ i ]);
     }

  }

Algo asi, lo he hecho directamente en texto plano sin el IDE y no se si los array eran con .length o .size xDD pero bueno para que te hagas una idea.




}



Título: Re: Array y bucle for
Publicado por: Dem0ny en 3 Enero 2010, 20:11 pm
Vale, una pregunta ahora..

Tengo un pequeño fallo que es en el metodo de imprimir la matriz... que imprime otra matriz normal, creada sin arraylist... y me da error al mandarle 2 variables relacionadas con arraylist a ese metodo... tengo que crear un método alternativo que reciva Arraylist nombresD1000 y sueldosD1000¿

No podría ese metodo hacerlo compatible para que lleguen simplemente dos matrices, normales y que sea compatible con los 2 arrayList?


Título: Re: Array y bucle for
Publicado por: panaka en 3 Enero 2010, 23:51 pm
Claro si tu a un metodo le indicas que recibe Array y le pasas un arrayList pues te da error, en la extraccion un ArrayList se extrae con .get(). Tienes 2 opciones, hacerte un metodo nuevo adaptado a los ArrayList o usar el metodo de ArrayLIst .toArray().

Saludos