Java - Ayuda a entender lo siguiente.

Nikoss

Hola, estoy aprendiendo a programar java y me han mandado un ejercicio que pide seleccionar el número en la posición del medio de 3 números solo con operadores ternarios.

Ejemplo:

a= 1
b=2
c=3

El número del medio es el 2.

Una forma de resolverlo es esta:

a<c

b>a
b<c
entonces del medio es el b.

Bien buscando por internet he encontrado lo siguiente:

if ( (a - b) * (c - a) >= 0 )
return a;
else if ( (b - a) * (c - b) >= 0 )
return b;
else
return c;

Que con operadores ternarios quedaría de la siguiente forma:

double sMedio = ((sNuma - sNumb)*(sNumc - sNuma) >=0) ? sNuma : ( (sNumb - sNuma) * (sNumc - sNumb) >= 0 ? sNumb: sNumc);

Mi pregunta es la siguiente (igual es muy obvia):

A que "principio" lógica o lo que sea matemática se debe que (a - b)*(c - a) >=0 (es decir positivo) entonces el número del medio sea en este caso el a.

Me gustaría entender esto y he buscado por internet a ver si encontraba algo parecido pero no lo he podido localizar.

Espero haber dejado clara la pregunta, perdonar pero a estas horas estoy ya un poco fuera jaja ;)
Un saludo y gracias!

elkaoD

Buah no tengo ni puta idea pero... ¿por qué no usas " (a >= b && b >= a) "?

1 respuesta
BrUn

El principio lógico es muy sencillo.

Si a es mayor que b (a-b) sera positivo, y si c es mayor que a (c-a) sera positivo, por lo tanto positivo * positivo = positivo =>0

Por lo tanto, a es mayor que b pero menor que c, por lo tanto es el del medio.

EDIT: Es esto lo que preguntas? :P

1 respuesta
Buffoncete
  1. usad [ code]
    2.

tenemos 3 números, A B y C

int result = (A > B) ? (B > C) ? B: (A > C ) ? C: A: (A > C) ? A : C;

--

Otra cosa, no mireis por internet soluciones...

Y nunca nunca useis operadores ternarios, los carga sonar.

1 respuesta
T

Si a>b => (a-b)>0
Si a <b => (a-b)<0

Si c>a => (c-a) >0
Si c<a => (c-a)> a

Si b<a<c entonces (a-b) * (c-a) >0 ya que como se ha visto (a-b)>0 y (c-a)>0. a es el del medio.

Si no quiere decir que b es el del medio o c es el del medio.
Se comprueba de la misma forma para b.
Si no es ni a ni b será c.

1 respuesta
Nikoss

#2 #3 #4 #5

Gracias a todos ;)

Usuarios habituales