Foros del Web » Programación para mayores de 30 ;) » Java »

Problema de abstracción

Estas en el tema de Problema de abstracción en el foro de Java en Foros del Web. Bueno, tengo un problema con la abstracción de un problema dado. No se como enfocarlo bien para que me salga el resultado deseado. El problema ...
  #1 (permalink)  
Antiguo 15/09/2015, 08:18
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años, 1 mes
Puntos: 31
Problema de abstracción

Bueno, tengo un problema con la abstracción de un problema dado. No se como enfocarlo bien para que me salga el resultado deseado.

El problema es el siguiente:

Tengo una huerta de naranjas, y quiero controlar cuantas naranjas recojo organizadas según las siguientes características: diámetros,colores,maduraciones,formas y pesos.

Los posibles valores de cada características se ven en los siguientes arrays:
Código:
String diametros[]={"Pequeño","Mediano","Grande"};
String colores[]={"Naranja","Amarilla","Verde"};
String maduraciones[]={"Pasada","Óptima","Ligeramente inmadura","Completamente inmadura"};
String formas[]={"Redonda","Otra forma"};
String pesos[]={"Menos 100g","Entre 100 y 200g","Entre 200 y 300g","Entre 300 y 400g","Entre 400 y 500g","Mayor 500g"};
Dado este problema, tengo que organizar los Kg que recojo de cada tipo. Y con todo ello me he construido el siguiente código JAVA:

Código:
import javax.swing.JOptionPane;

public class PequeñosCodigos{

	public static void main(String[] args){

		int naranjas[][][][][]=new int[3][3][4][2][6];
		String diametros[]={"Pequeño","Mediano","Grande"};
		String colores[]={"Naranja","Amarilla","Verde"};
		String maduraciones[]={"Pasada","Óptima","Ligeramente inmadura","Completamente inmadura"};
		String formas[]={"Redonda","Otra forma"};
		String pesos[]={"Menos 100g","Entre 100 y 200g","Entre 200 y 300g","Entre 300 y 400g","Entre 400 y 500g","Mayor 500g"};

		int diametro,color,maduracion,forma,peso;
		do{
			diametro=JOptionPane.showOptionDialog (null,"Elije un tamaño:","Naranjas",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,null,diametros,diametros[0]);
			color=JOptionPane.showOptionDialog (null,"Elije un color:","Naranjas",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,null,colores,colores[0]);
			maduracion=JOptionPane.showOptionDialog (null,"Elije una Maduracion:","Naranjas",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,null,maduraciones,maduraciones[1]);
			forma=JOptionPane.showOptionDialog (null,"Elije una Forma:","Naranjas",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,null,formas,formas[0]);
			peso=JOptionPane.showOptionDialog (null,"Elije un color:","Naranjas",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,null,pesos,pesos[1]);
			naranjas[diametro][color][maduracion][forma][peso]+=Integer
					.parseInt (JOptionPane.showInputDialog ("Introduce El peso para la elección anterior"));

		} while(JOptionPane.showConfirmDialog (null,"¿Repetir?","WARNING",
				JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION);

		for (int i=0;i<naranjas.length;i++){
			System.out.println ((i+1)+".- Diametro: "+diametros[i]);
			for (int j=0;j<naranjas[i].length;j++){
				System.out.println ("\t"+(i+1)+"."+(j+1)+".- Color: "+colores[j]);
				for (int k=0;k<naranjas[i][j].length;k++){
					System.out.println ("\t\t"+(i+1)+"."+(j+1)+"."+(k+1)+".- Maduración: "+maduraciones[k]);
					for (int l=0;l<naranjas[i][j][k].length;l++){
						System.out.println ("\t\t\t"+(i+1)+"."+(j+1)+"."+(k+1)+"."+(l+1)+".- Forma: "+formas[l]);
						for (int m=0;m<naranjas[i][j][k][l].length;m++){
							if(naranjas[i][j][k][l][m]!=0)
								System.out.println ("\t\t\t\t"+(i+1)+"."+(j+1)+"."+(k+1)+"."+(l+1)+"."+(m+1)+".- Peso: "+pesos[m]
										+" =\t"+naranjas[i][j][k][l][m]+"kg");
						}
					}
				}
			}
		}
	}
}
Cuando se ejecuta este programa, hay algunas veces en el que ramas enteras en la visualización del esquema que se ve no tienen naranjas... y sin embargo salen. Me gustaría que saliera un resultado similar al que se ve aquí... solo que si en un ramal no hay valores, que no salga nada de dicho ramal.

Última edición por Kritik; 15/09/2015 a las 08:25
  #2 (permalink)  
Antiguo 15/09/2015, 13:02
(Desactivado)
 
Fecha de Ingreso: enero-2015
Mensajes: 393
Antigüedad: 9 años, 3 meses
Puntos: 52
Respuesta: Problema de abstracción

Hola.

No uso java, pero en general se recomienda en lenguajes OOP como java u otros, crear un modelo de datos mas "duro" que te permita expresar tu problema como una serie de clases con propiedades, en lugar de arrays y valores de tipo string o numericos sueltos.

En este caso yo crearía una clase Naranja que contenga los "parámetros" o propiedades de las naranjas (Diametro, Color, Maduración, etc) y luego metería instancias de esa clase en un Dictionary<T, int> (creo que en java se llama Map) ya que solo te interesa un unico valor numerico por cada combinación de propiedades.

Si te interesa, escribí un ejemplo de cómo lo resolvería, aunque no está en java te puede dar algunas ideas: http://ideone.com/7nZxRf
  #3 (permalink)  
Antiguo 15/09/2015, 15:59
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años, 1 mes
Puntos: 31
Respuesta: Problema de abstracción

Tienes razón, seria mas fácil con instanciaciones. Pero es que este problema ha surgido a partir de que a mi profesor no se le ocurría una forma gráfica de presentar los datos de un ejemplo de un array de 5 dimensiones. Y a mi se me ocurrió hacerlo en forma de esquema. Pero sigue siendo para explicar un ejemplo de array de 5 dimensiones.

Etiquetas: programa, string, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:05.