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

Multiples If's Anidados

Estas en el tema de Multiples If's Anidados en el foro de Java en Foros del Web. Bien mi problema es el siguiente.Yo tengo una request con 4 posibles variables (idpedido,idtasa,idexpediente,idalbaran) Pues bien tengo que ver todas las posibilidades entre ellos ya ...
  #1 (permalink)  
Antiguo 15/02/2008, 09:10
 
Fecha de Ingreso: febrero-2008
Mensajes: 4
Antigüedad: 16 años, 2 meses
Puntos: 0
Multiples If's Anidados

Bien mi problema es el siguiente.Yo tengo una request con 4 posibles variables (idpedido,idtasa,idexpediente,idalbaran)

Pues bien tengo que ver todas las posibilidades entre ellos ya que puede ser que introduzcan o no.Es decir, yo puedo tener el idpedido y el idtasa y no tener el idexpediente ni el idalbaran.O puedo tener el idalbaran con el idpedido y el idtasa etc etc...He probado a hacerlo con if's y else's pero me sale algo monstruoso y poco eficiente...algun consejo para realizar estas comprobaciones de una forma mas eficiente?
  #2 (permalink)  
Antiguo 15/02/2008, 14:53
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Multiples If's Anidados

Logicamente, de palabra, sin lenguaje de programación, ¿eres capaz de expresarlo de forma concisa?

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 16/02/2008, 01:04
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: Multiples If's Anidados

Hola:

Quizás pueda servirte una idea de este estilo. El tener o no tener esas cosas son variables booleanas. Si imaginas que son bits, te componen un número de cuatro bits, que te da valores enteros entre 0 y 15 ambos incluidos. Me explico, si no tienes nada son todo ceros y te sale cero. Si sólo tienes idalbaran, los demás son cero e idalbaran es 1, que en binario sería 0001 que es un 1.

De esta forma puedes hacer un switch-case. Es muy posible que muchas de las opciones no puedas tratarlas -caso de no tener nada- o que las trates muy similar. Puedes agruparl los tratamientos iguales dentro de varios cases consecutivos.

De todas formas, como dice GreenEyed, quedaría lo más claro y fácil si eres capaz de definir cuantos tratamientos distintos tienes que hacer y expresar de palabra en forma sencilla como elegir uno u otro. La idea que yo te aporto quizás sea útil sólo si hay muchos posibles tratamientos distintos.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #4 (permalink)  
Antiguo 16/02/2008, 10:48
 
Fecha de Ingreso: febrero-2008
Mensajes: 4
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: Multiples If's Anidados

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

Quizás pueda servirte una idea de este estilo. El tener o no tener esas cosas son variables booleanas. Si imaginas que son bits, te componen un número de cuatro bits, que te da valores enteros entre 0 y 15 ambos incluidos. Me explico, si no tienes nada son todo ceros y te sale cero. Si sólo tienes idalbaran, los demás son cero e idalbaran es 1, que en binario sería 0001 que es un 1.

De esta forma puedes hacer un switch-case. Es muy posible que muchas de las opciones no puedas tratarlas -caso de no tener nada- o que las trates muy similar. Puedes agruparl los tratamientos iguales dentro de varios cases consecutivos.

De todas formas, como dice GreenEyed, quedaría lo más claro y fácil si eres capaz de definir cuantos tratamientos distintos tienes que hacer y expresar de palabra en forma sencilla como elegir uno u otro. La idea que yo te aporto quizás sea útil sólo si hay muchos posibles tratamientos distintos.

Se bueno.
Es una buena idea esa que me planteas...La forma tratarlo que estoy utilizando es

If(IdAlbaran!=null && IdPedido!=null && IdTasa!=null&& IdExpediente!=null)
{
getAllFilter(FilterRequest);
}
else If(IdAlbaran!=null && IdPedido!=null && Id Tasa!=null & IdExpediente==null)
{
getAlbaranPedidoTasa(FilterRequest);
}

y asi sucesivamente..me salen 16 casos..y lo que no quisiera es pasar por cada uno de los if de esa forma...pero claro estoy viendo que tal y como he planteado la cosa...me va a tocar hacerlo asi.
  #5 (permalink)  
Antiguo 16/02/2008, 13:58
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Multiples If's Anidados

¿Que es lo que realmente quieres hacer? Por que si tienes 16 posibilidades diferentes de ejecucion... pues tendras 16 bloques de codigo, lo pongas como lo pongas.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #6 (permalink)  
Antiguo 16/02/2008, 14:14
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Re: Multiples If's Anidados

Otra forma de hacer lo mismo:
Creo que era lo que "chuidiang" quiso dar a entender...

Código:
package org.example;

public class example {

	public static String arg1;
	public static String arg2;
	public static String arg3;
	public static String arg4;
	
	public static void main(String[] args) {
		int b = 0;
		
		b += assignBit(arg1, 0x1); // bitflags 0001 = 1
		b += assignBit(arg2, 0x2); // bitflags 0010 = 2
		b += assignBit(arg3, 0x4); // bitflags 0100 = 4
		b += assignBit(arg4, 0x8); // bitflags 1000 = 8
		// b += assignBit(argN, 0x10); // bitflags 10000 = 16
		
		switch (b) {
			case 0: // 0             : everything is null
			case 1: // 1             : arg1 != null [others == null]
			case 2: // 2             : arg2 != null [others == null] 
			case 3: // 2 + 1       : arg1 != null and arg2 != null [others == null]
			case 4: // 4             : arg3 != null [otheres == null]
			case 5: // 4 + 1       : arg3 != null and arg1 != null [others == null]
			case 6: // 4 + 2       : arg3 != null and arg2 != null [others == null]
			case 7: // 4 + 2 + 1 : arg1 != null and arg2 != null and arg3 != null [others == null]
			case 8: // 8             : arg4 != null [others == null]
			case 9: // 8 + 1       : arg4 != null and arg1 != null [others == null]
				// etc, etc....
			default:
		}
		
		// OR USE java.util.BitSet in place of [int b]
	}

	public static int assignBit(String arg, int val) {
		if(arg != null) if (!arg.isEmpty()) return val;
		return 0;
	}
	
}

Última edición por HackmanC; 16/02/2008 a las 14:44
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 01:44.