Foro de elhacker.net

Programación => Java => Mensaje iniciado por: 4dr14n31t0r en 19 Enero 2016, 14:28 pm



Título: Problema de arrays
Publicado por: 4dr14n31t0r en 19 Enero 2016, 14:28 pm
¿Existe algun metodo equivalente a ... ?
Código:
Arrays.asList(1,2,3,4,5,6,7,8,9,0).toArray()
En otras palabras: ¿Conocen algun metodo que devuelva un array que contenga todos sus argumentos?
Algo como esto:
Código:
public static <T[]> funcionQueDevuelveArray(T... t){
return t;
}
Seria muy practico, asi que tendria que haberlo digo yo.


Título: Re: Problema de arrays
Publicado por: 0xFer en 19 Enero 2016, 19:27 pm
Tu código ya lo hace muy bien;

Código
  1. public int[] foo(int ... nums){
  2.    return nums;
  3. }
  4.  
  5. int[] Arreglo = foo(5,4,4,2,4);
  6.  

Vaya, es que no sé para qué querrías hacer eso  :huh:


Título: Re: Problema de arrays
Publicado por: crack81 en 19 Enero 2016, 19:45 pm
Exacto yo tampoco le veo sentido si lo que quieres es inicializar un arreglo
pues basta que hagas esto

Código
  1. int []arreglo={1,2,3,4,5};



Título: Re: Problema de arrays
Publicado por: 4dr14n31t0r en 19 Enero 2016, 20:43 pm
Dices que para inicializar un arreglo puedes usar
Código:
int[] i = {1,2,3,4,5,6,7,8,9,0};
Pero, ¿Te has fijado que, por ejemplo, si lo declaras e instancias en distintas lineas de ese modo te da error de compilación?
De todos modos, que no sepas para que pueda servir algo no significa que no sea util. De momento solo quiero saberlo por curiosidad.
Además,(y esto va para el tipo de mas arriba) ya se que puedo hacer un código tal que asi:
Código:
//No se porque los ingleses le llaman "foo" a las funciones que usan de ejemplo
//En los diccionarios de ingles tampoco encuentro nada =/
public <T[]> foo(T ... nums){
    return nums;
}
int[] Arreglo = foo(5,4,4,2,4);
Pero la pregunta es si YA EXISTE un metodo como ese implantado en java para no tener que crearlo una y otra vez cada vez que quiera darle uso


Título: Re: Problema de arrays
Publicado por: 0xFer en 19 Enero 2016, 20:57 pm
Nadie ha dicho que no sea útil, al menos yo no pretendía hacerlo, lo que quise decir es que no conozco cuál es la utilidad. Me gustaría conocerla, todo conocimiento viene bien.

Citar
¿Te has fijado que, por ejemplo, si lo declaras e instancias en distintas lineas de ese modo te da error de compilación?

Se puede así:

Código
  1. int[] Arreglo;
  2. Arreglo = new int[]{24,2,2};

y no veo mucha diferencia.

Suerte.


Título: Re: Problema de arrays
Publicado por: 4dr14n31t0r en 19 Enero 2016, 21:19 pm
¡OSTRAS! ¡PUES NO LO SABIA!
Cuando lo intentaba en lineas diferentes hacia esto:
Código:
int[] i;
i = {1,2,3,4,5,6,7,8,9,0}//Error de compilación
Ahora si entiendo porque preguntabas si tenia una utilidad =D
Lo de la funcion era simplemente para hacer
Código:
int[]{1,2,3,4,5,6,7,8,9,0}
De la unica forma que se me ocurria, es decir, devolviendo el array de los argumentos de la funcion.

¿Por cierto, donde aprendiste eso? he visto muchos tutoriales en internet y en ninguno de ellos lo enseñan =/ De hecho, no sale ni en el tutorial oficial de Oracle:
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

De todos modos voy a dar este tema por zanjado, aunque todavia esta pendiente tu respuesta.


Título: Re: Problema de arrays
Publicado por: 0xFer en 19 Enero 2016, 22:17 pm
Código
  1. int[] arreglo;

Con eso te creas una referencia a un arreglo, pero solo una referencia, es decir, puede estar apuntando a nada( una referencia nula) o puede estar apuntando a un arreglo. En el caso anterior es simplemente una referencia nula.

con new puedes crear un objeto y hacer que una referencia apunte al objeto. Puedes crear tantos objetos quieras y hacer que la referencia apunte a ellos:
   
Código
  1. int[] arreglo;
  2. arreglo = new int[] {3,4,1};
  3. arreglo = new int[] {3,4,1,4,2,3};
  4. arreglo = new int[] {3,4,1,4,2,3,4,2,4,2};
          
la referencia "arreglo" se queda con el último objeto creado, pero ¿Qué pasa con los objetos anteriores? Pues java tiene algo que se llama recolector de basura y te hace el favor de eliminar los objetos que ya no estas utilizando cuando le parezca conveniente, ¿y siempre lo hace? Pues por algo java consume mucha Memoria RAM, pero no tienes que estar preocupándote de eliminar los objetos.

Esto solo es válido para los objetos, no es lo mismo con las variables primitivas int,char,float etc..
Ahora no sé si lo que escribí fue en vano, al menos creo que entenderás que un arreglo es una especie de objeto por si ya sabías el resto.


Edito: El código que no sabías es sólo una forma diferente de hacer esto;

Código
  1. // declares an array of integers
  2.        int[] anArray;
  3.  
  4.        // allocates memory for 10 integers
  5.        anArray = new int[10];
  6.  
  7.        // initialize first element
  8.        anArray[0] = 100;
  9.        // initialize second element
  10.        anArray[1] = 200;
  11.        // and so forth
  12.        anArray[2] = 300;
  13.        anArray[3] = 400;
  14.        anArray[4] = 500;
  15.        anArray[5] = 600;
  16.        anArray[6] = 700;
  17.        anArray[7] = 800;
  18.        anArray[8] = 900;
  19.        anArray[9] = 1000;

Suerte.


Título: Re: Problema de arrays
Publicado por: 4dr14n31t0r en 20 Enero 2016, 00:27 am
Todo eso que me has dicho ya lo savia U,u
El caso es que en cada tutorial que veia me hablaban de una forma de inicializar los arrays asi:
Código:
int[] array = {1,2,3,4,5,6,7,8,9,0};
Sin embargo esta forma solo es valida cuando se inicializa al mismo tiempo que se declara. El caso es que nunca en mi vida vi algo como
Código:
new int[]{1,2,3,4,5,6,7,8,9,0};
ya que lo mas parecido que vi era
Código:
int[] array = {1,2,3,4,5,6,7,8,9,0};
Asi que te pregunto donde has visto eso porque en todos los tutoriales, incluso en el tutorial oficial de oracle, no sale algo como eso. Pero todo lo demas que dijiste ya lo sabia.


Título: Re: Problema de arrays
Publicado por: 0xFer en 20 Enero 2016, 00:45 am
Yo lo descubrí. Me puse a buscar por Internet y encontré que otras personas lo utilizan( como era de esperar, claro):
Usado en una linea  (http://stackoverflow.com/questions/3160347/java-how-initialize-an-array-in-java-in-one-line)
Vaya, aquí lo usan muchas veces (http://stackoverflow.com/questions/8068470/java-initialize-an-int-array-in-a-constructor)

Suerte.