Skip to content

6 Sentencias y Expresiones

Sentencias

Una sentencia es la unidad mínima de ejecución de un programa. Un programa se compone de un conjunto de sentencias que acaban resolviendo un problema. Al final de cada una de las sentencias encontraremos un punto y coma (;).

Veamos algunos ejemplos de sentencias en java:

  • Sentencias de declaración: int x;
  • Invocaciones o llamadas a métodos de tipo void: System.out.println("Bienvenidos a Programación");
  • Sentencias de control de flujo: alteran el flujo de ejecución para tomar decisiones o repetir sentencias.

Expresiones

Una expresión es una combinación de operadores y operandos que se evalúa generándose un único resultado de un tipo determinado.

La diferencia entre las sentencias y las expresiones es que las expresiones devuelven un valor y las sentencias no devuelven nada.

Prioridad entre operadores

A veces hay expresiones con operadores que resultan confusas. Por ejemplo:

resultado=8+4/2;

Es difícil saber el resultado. ¿Cuál es? ¿seis o diez? La respuesta es 10 y la razón es que el operador de división siempre precede en el orden de ejecución al de la suma. Es decir, siempre se ejecuta antes la división que la suma. Siempre se pueden usar paréntesis para forzar el orden deseado:

resultado=(8+4)/2;

Ahora no hay duda, el resultado es seis.

¿Cómo podemos saber en qué orden se van a ejecutar los operadores en una expresión en Java? Pues se ejecutan en función de una prioridad, es decir, primero se ejecuta el que tenga más prioridad. La siguiente tabla muestra todos los operadores Java ordenados de mayor a menor prioridad. La primera línea de la tabla contiene los operadores de mayor prioridad y la última los de menor prioridad. Los operadores que aparecen en la misma línea tienen la misma prioridad.

Cuando una expresión tenga dos operadores con la misma prioridad, la expresión se evalúa según su asociatividad.

Nivel Operador Descripción Asociatividad
1 []
.
()
acceso elementos array
acceso miembros objetos
paréntesis
de izquierda a derecha
2 ++
--
unario post-incremento
unario post-incremento
no asociativos
3 ++
--
+
-
!
~
unario pre-incremento
unario pre-decremento
unario más
unario menos
unario lógico NOT
unario NOT a nivel de bits
de derecha a izquierda
4 ()
new
cast
creación objetos
de derecha a izquierda
5 *
/
%
multiplicación
división
módulo
de izquierda a derecha
6 +
-
+
suma
resta
concatenación cadenas
de izquierda a derecha
7 <<
>>
>>>
desplazamiento a nivel de bits de izquierda a derecha
8 <
<=
>
>=
instanceof
relacionales no asociativos
9 ==
!=
igual
distinto
de izquierda a derecha
10 & AND nivel de bits de izquierda a derecha
11 ^ XOR nivel de bits de izquierda a derecha
12 | OR nivel de bits de izquierda a derecha
13 && AND de izquierda a derecha
14 || OR de izquierda a derecha
15 ?: ternario condicional de derecha a izquierda
16 =
+=
-=
*=
/=
%=
&=
^
|=
<<<=
>>=
>>=
asignaciones de derecha a izquierda

Por ejemplo:resultado = 9 / 3 * 3; En este caso, la multiplicación y la división tienen la misma prioridad y su asociatividad es de izquierda a derecha por lo que se realiza primero la operación que esté más a la izquierda, que en este caso es la división. El resultado por lo tanto es nueve. Si se desea que se haga primero la multiplicación, habría que utilizar un paréntesis: resultado = 9 / (3 * 3); En este caso, el resultado sería 1.

Otro ejemplo: x = y = z = 17; Como la asociatividad de la asignación es de derecha a izquierda, primero se asigna el valor 17 a z, luego a y y por último a x.Esto se puede realizar porque el operador de asignación devuelve el valor asignado.

Algunos operadores son no asociativos, por ejemplo, la expresión x <= y <= z es inválida ya que el valor devuelto por estos operadores es de un tipo diferente (booleano) al de los operandos que necesita (numérico o carácter).

Evaluación de cortocircuito

La evaluación de cortocircuito denota la semántica de algunos operadores booleanos en algunos lenguajes de programación en los cuales si con la evaluación de la primera expresión ya se conoce el resultado, ya no se evalúan el resto de expresiones. En Java, se utiliza la evaluación de cortocircuito.

Por ejemplo, veamos la siguiente expresión que utiliza operadores AND:

12 < 9 && 5 > 1 && 8 <= 13

Se evalúa la primera expresión 12 < 9 dando false. Como el resultado va a ser false independientemente del resultado de la segunda y tercera expresión, entonces no se evalúan ni la segunda 5 > 1 ni la tercera expresión 8<= 13, sino que solamente se evalúa la primera, dando como resultado false. Lo mismo ocurre con el operador OR:

8 <= 13 || 12 < 9 || 5 > 1

Se evalúa la primera expresión 8 <= 13 dando true. Como el resultado va a ser true independientemente del resultado de la segunda y tercera expresión, entonces no se evalúan ni la segunda 12 < 9 ni la tercera expresión 5 > 1, sino que solamente se evalúa la primera, dando como resultado true.

Ejercicio 1

Suponiendo realizadas las siguientes sentencias de asignación: lado1 = 3; precio = 325,6; lado2 = 4; comprar = false; hipotenusa = 5; ch = '7'. Determinar cuáles de las expresiones siguientes dan un resultado booleano y cuáles no. Para aquellas que produzcan un resultado booleano determinar si el resultado es verdadero o falso. Para las que no lo sean, explicar la razón. Indicar también si existe alguna expresión errónea, y crea una aplicación Java para comprobar los resultados.

  1. 5 * precio - 1.50
  2. (precio < 300 + 0.1 * precio) ||comprar
  3. sqrt(lado1) + sqrt(lado2) = sqrt(hipotenusa)
  4. (!comprar) && (precio + 125.3)
  5. (ch <= 'A') && comprar
  6. ch = '7' || !comprar
Ejercicio 2

Calcula el resultado de las siguientes expresiones de forma manual, y luego creando un programa JAVA:

  1. 3 * 5 - 4 / 2
  2. 3 - (3*5)2 / 4
  3. 32 - 5 * 2
  4. 7 - 4 * 2 - 5 * 2
  5. 5 + 4 < 7 + 8
  6. 4 < 5 * 4 / 2 - 7
  7. 3 + 6 * 14
  8. 8 + 7 * 3 + 4 * 6
  9. -4 * 7 + 23 / 4 - 5
  10. 12 + 3 * 7 + 5 * 4
  11. !(4 > 6)
  12. 73 / 2 + 6
Ejercicio 3

Dados los siguientes valores para las variables booleanas a,b y c (a = true, b = false y c = true), evaluar las expresiones que aparecen a continuación y crear un programa JAVA para comprobar las soluciones:

  1. a && b || a && c
  2. (a || b) && (!a || c)
  3. a || b && c
  4. !(a || b) && c
Ejercicio 4

Dado los siguientes valores de las variables x, y, j y k, añadir los paréntesis que sean necesarios para que las expresiones que las siguen evalúen a verdadero: x = 10; y = 19; j = true; k = false.

  1. x == y || j
  2. x >= y || x <=y && j
  3. !j || j
  4. !k && k
Ejercicio 5

Sea n un dato de tipo Entero que suponemos positivo. Empareja las expresiones con la descripción que les corresponda:

a) El mayor número par no superior a n.

b) El primer número par mayor o igual que n

c) El primer impar mayor o igual que n

1) (n / 2)*2

2) n + (n+1) % 2

3) ((n+1)/2)*2