Foro de elhacker.net

Programación => Java => Mensaje iniciado por: 4dr14n31t0r en 20 Noviembre 2015, 14:43 pm



Título: Problema dificil de arrays
Publicado por: 4dr14n31t0r en 20 Noviembre 2015, 14:43 pm
El problema que me he propuesto a mi mismo consiste en crear un array de n dimensiones en tiempo de ejecucion.
(cuidado, no confundir con array de longitud n. Si las dimensiones son 2 es una matriz, de 3 una matriz tridimensional, etc.)
Al principio parece imposible, pero se me ocurrió que si utilizo clases genéricas puedo hacer un array de una dimension más tal y como muestra el ssiguiente código:
Código
  1. package test;
  2.  
  3. public class ClaseGenerica<T> {
  4.  
  5. ClaseGenerica<T[]> t;
  6. T u;
  7.  
  8. Test2<?> u = new Test2<Integer>();
  9. for(int i = 0; i < 10; i++){
  10. u.t = new Test2<>();
  11. u = u.t;
  12. }
  13. public static void main(String... args){
  14.  
  15. ClaseGenerica<Integer> t = new Test2<>();
  16. t.t = new ClaseGenerica<>();
  17. t.t.t = new ClaseGenerica<>();
  18. t.t.t.t = new ClaseGenerica<>();
  19. t.t.t.t.t = new ClaseGenerica<>();
  20. t.t.t.t.t.t = new ClaseGenerica<>();
  21. t.t.t.t.t.t.t = new ClaseGenerica<>();
  22. t.t.t.t.t.t.t.t = new ClaseGenerica<>();
  23. t.t.t.t.t.t.t.t.t = new ClaseGenerica<>();
  24. t.t.t.t.t.t.t.t.t.t = new ClaseGenerica<>();
  25. t.t.t.t.t.t.t.t.t.t.t = new ClaseGenerica<>();
  26. //En total el array tiene 10 dimensiones, no se molesten en contarlos
  27. t.t.t.t.t.t.t.t.t.t.t.u = new Integer[0][][][][][][][][][]; //No da error de compilación
  28. //Como pueden ver, no he necesitado declarar un array de N dimensiones, solo instanciarlo
  29.  
  30. }
  31.  
  32. }

Es un poco evidente que esto se puede hacer tambien con un bucle for y el operador '?' tal y como muestro a continuación, pero el problema viene después al querer instanciar ese array, que es lo que me gustaria a mi saber.

Código
  1. package test;
  2.  
  3. public class ClaseGenerica<T> {
  4.  
  5. ClaseGenerica<T[]> t;
  6. T u;
  7.  
  8. public static void main(String... args){
  9.  
  10. ClaseGenerica<?> t = new ClaseGenerica<Integer>();
  11. for(int i = 0; i < 10; i++){
  12. t.t = new ClaseGenerica<>();
  13. t = t.t;
  14. }
  15. t.u = new Integer[0][][][][][][][][][]; //Obviamente, error de compilación
  16. }
  17.  
  18. }
¿Alguna idea de como solventar este problema? No es que tenga mucha utilidad práctica, pero es por curiosidad