Autor Tema: Ayuda con JAVA ARRAYS TRIDIMENSIONALES  (Leído 4749 veces)

Mayam

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Ayuda con JAVA ARRAYS TRIDIMENSIONALES
« en: 31 de Octubre 2013, 15:30 »
Hola comunidad, soy nuevo aquì y me estoy iniciando en la programaciòn en java, aùn soy lo que dirìamos un principiante, pero le pongo muchas ganas y voy avanzando bien!

El problema:

Necetito realizar un programa que ordene objetos en un espacio tridimensional, pensè en utilizar un array tridimensional, que es sencillo de crear y sencillo de llenar, pero el problema està en que yo no necesito ordenar los objetos que ingresan al array de cualquier forma, sino que el orden debe cumplir ciertas condiciones sí o sí!

Algunas de las condiciones necesarias:

1º) Si el objeto ingresado es de tipo 1, debe ocupar un solo espacio del array, si es de tipo 2 debe ocupar 2 espacios contiguos horizontales del array, como si fueran cajas de 1 espacio y de 2 espacios, con la consecuente condición de que cuando llege al final de la fila y halla sólo 1 espacio libre no me permita ingresar una caja de 2 espacios porque no hay más lugar para ponerla... esta es una de las condiciones.

2º) si el objeto ingresado es de tipo 1, no puede ir arriba de un tipo 2, es decir, el llenado debe impedirme ingresar cajas de forma tal que 2 cajas de tipo 1 vayan encima de 1 caja de tipo 2, por más que el espacio lo permita, de la misma manera, no puede ocurrir que una caja de tipo 2 vaya encima de una tipo 1, pero sí que vaya encima de 2 tipo uno!

3º) debo además ordenar por carga y descarga, es decir, las cajas se cargan en diferentes lugares y se descargan en diferentes lugares, con lo cual necesito que se ordenen de tal forma que no me quede abajo de todo una caja que debo descargar primero y así sucesivamente...

4º) Pero no es lo último, además de lo anterior, necesito que el espacio en 3 dimensiones que utilizo distribuya los pesos de las cajas de forma tal que si divido el espacio en dos partes iguales por fila, cada parte pese lo mismo, o con una leve diferencia, y si divido por columnas en 2 partes iguales también pesen lo mismo o con leve diferencia.

He pensado utilizar un array tridimensional, pero no me asegura ninguna de las condiciones necesarias anteriores, y el mètodo "SORT" no me sirve para ordenar el espacio como yo necesito.

Por último es necesario aclararles que puede ser posible y hasta deseable, dependiendo de la cantidad de cajas a guardar en el espacio planteado, que queden lugares libres sin llenar, con lo que necesitaría que el programa pueda "guardar" cajas, o "ponerlas en espera" si cuando las agarra no cumplen las condiciones necesarias y insertarlas luego cuando las condiciones se cumplan, en otro lugar.

Como ven, el problema no es nada sencillo, por lo menos para mí que recién comienzo con java y apenas voy conociendo algunos métodos y cómo se declaran y demás...

Si alguien sabe de algún o algunos métodos que se usen para este tipo de cosas, o tiene alguna idea que pueda ayudarme o guiarme a una posible solución, aunque sea a medias, se lo voy a agradecer muchísimo!!!

Gracias a todos.

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:Ayuda con JAVA ARRAYS TRIDIMENSIONALES
« Respuesta #1 en: 31 de Octubre 2013, 21:29 »
Hola! He leído lo que planteas y lo primero que te diría es que el problema que pretendes resolver va bastante más allá de lo que sería una "iniciación a java" pues tiene distintos factores de complejidad.

Inicialmente el problema lo plantearía enfocándolo aproximadamente de la siguiente manera:

- Definiría una clase "Caja" que tenga tres atributos, por ejemplo celda1, celda2 y celda3. En cada momento una celda puede estar ocupada o no.

- Definiría una clase "Elemento" que represente un objeto de los que tienes que meter en cajas, la clase Elemento tendría un atributo que es el espacio ocupado y otros atributos que puedan ser necesarios

- Definiría una clase "Contenedor" que representa el lugar donde colocas las cajas de cara a la carga y descarga.

Una vez definidas clases, métodos, etc. empezaría la definición de la algoritmia del problema, que tampoco es nada sencilla.

Lo primero sería saber concebir clases, definir métodos de ordenación, etc. para lo cual te recomiendo que mires los cursos disponibles:

Curso básico Java: https://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

Curso avanzado Java: https://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=58&Itemid=180

Aunque el problema no se resuelve sólo sabiendo Java, tiene un componente de algoritmia también importante.
Responsable de departamento de producción aprenderaprogramar.com

Mayam

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re:Ayuda con JAVA ARRAYS TRIDIMENSIONALES
« Respuesta #2 en: 01 de Noviembre 2013, 15:34 »
Hola César, gracias por la guía, es cierto que el problema va más allá de un inicio en java, en realidad no soy exactamente un principiante bàsico básico, se algo, no demasiado, pero me manejo bastante bien con los fundamentos de la programación y su lógica, conozco las sentencias necesarias, while, for, if, etc, se crear objetos y darles atributos, se crear clases y se darles package a todas, y demás cosas básicas.

me cuesta aún entender un poco el tema de los parámetros en los métodos y un poco la herencia, aunque es claro que es herencia simple y una clase extiende de otra y así, pero aún lo estoy resolviendo mentalmente! jajaj.

Otra cosa que aún no logro entender demasiado son las "interfaces", según yo entendí son una especie de clases que aunan criterios de varias clases diferentes, aunque puedo estar equivocado...

Mi problema es teóricamente sencillo y prácticamente dificilísimo!

debo, como planteé antes, crear un programa para optimizar la carga de contenedores en un barco (ahora con más detalles!!), las reglas son las que planteé antes, y claro, lo que es la creación de la clase "container" es sencillo... luego creé una clase barco, porque tengo 2 o 3 barcos que difieren en su espacio... dentro de la clase barco defino el método que construye un array tridimensional de objetos tipo container y la carga de ese array en el método main es sencillísima, el único problema es que hay que hacerla a mano con un "Scanner", tras lo cual estuve viendo y me conviene implementar la librería "Jexcel" para poder leer directamente la información de los contenedores que viene en formato Excel, así lo haría directamente sin tener que utilizar Scanner.

Luego imprimir la lista de contenedores en el espacio tridimensional es sencillo también, incluso pensé en crear reportes por fila, por columna, por cuartos, etc., sencillo también...

Nuevamente el problema me lo encuentro cuando quiero cumplir con las reglas necesarias de estibación, o sea, que los contenedores 2 no vayan encima de 1 solo contenedor tipo 1, que no puedan ir 2 contenedores tipo 1 encima de un tipo 2, la distribución del peso y la prioridad de descarga y carga...

creo que sólo necesito resolver el tema de las condiciones, que por lo demás es el más difícil claro está... estuve viendo y quizás me conviene utilizar, en vez de un array de 3 dimensiones un objeto "Arraylist" que es dinámico y que por ello puedo meter y sacar espacios con los métodos de que dispone arraylist...

Si utilizo Arraylist pensé en hacer 3 Arraylist separados y luego establecer comparaciones o sino utilizar un solo Arraylist tridimensional... no se, tengo que seguir aprendiendo algunas cosas para ir avanzando....

Desde ya muchas gracias por la info, voy a ver los cursos que me dejaste para ver si hallo algo para avanzar con mi problema!!! y además seguir aprendiendo!!!

Saludos.
Mayam.

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:Ayuda con JAVA ARRAYS TRIDIMENSIONALES
« Respuesta #3 en: 04 de Noviembre 2013, 08:31 »
Hola Mayam, las interfaces son un poco complicadas de entender hasta que no se ha trabajado y practicado un poco con ellas. Las interfaces tienen distintos usos:

a) Sirven para declarar variables globales que implementando la interfaz en otras clases pueden ser conocidas por todas las clases que la implementen.

b) Sirven para declarar un tipo no implementable directamente pero sí indirectamente por varias otras clases. De este modo, por ejemplo puedes construir métodos donde el tipo de un parámetro sea el tipo de la interface pero luego en realidad le pasas un objeto que es de un tipo que implementa la interfaz. A esto se le llama polimorfismo: un objeto puede ser de varios tipos al mismo tiempo. Por ejemplo imagina una interface denominada Figura que es implementada en una clase Circulo. Ahora un objeto de tipo Circulo es al mismo tiempo de tipo Circulo y de tipo Figura, por eso se dice que es polimórfico.

c) Sirven a nivel de organización del código para separar la definición de qué hace un objeto respecto de su implementación (código específico). De este modo el nombre de los objetos y métodos permanece invariable pero la implementación puede cambiar sin afectar a todo el programa. Es algo que facilita el mantenimiento de programas.

Para avanzar lo que te recomendaría es que dividas el problema en pequeños mini-problemas y vayas resolviendo uno a uno, no trates de abarcarlo todo de golpe porque así es mucho más difícil. También si es necesario haz pruebas con un problema simplificado en vez de con el problema real y cuando tengas claro cómo resolver el problema simplificado ataca la parte correspondiente del problema real.

Saludos.
Responsable de departamento de producción aprenderaprogramar.com

Mayam

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re:Ayuda con JAVA ARRAYS TRIDIMENSIONALES
« Respuesta #4 en: 05 de Noviembre 2013, 00:26 »
Gracias César! estuve pensando un poco y justamente tenía planificado comenzar por problemas más pequeños e ir de a poco (muy de a poco! jajaj) incrementando la dificultad!

Sigo mirando videotutoriales, leo cursos, practico mucho y espero poder seguir aprendiendo dado que la programación me parece de lo más fascinante cuando uno utiliza la computadora!

Así que voy a ir haciendo eso que me decís y voy a ir posteando los avances, cuando los tenga!

Saludos.
y nuevamente muchas gracias!
Mayam.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".