Fundamentos del lenguaje
Las variables, constantes y enumeraciones
1. Las variables
Las variables nos van a permitir almacenar en memoria diferentes valores útiles para el funcionamiento de nuestra aplicación durante su ejecución. Se debe declarar obligatoriamente una variable antes de utilizarla en el código. Al declarar una variable debemos definir sus características. Según la ubicación de su declaración una variable pertenecerá a una de las categorías siguientes:
-
Declarada en el interior de una clase, la variable es una variable de instancia. Sólo existirá si una instancia de la clase está disponible. Cada instancia de clase tendrá su propio ejemplar de la variable.
-
Declarada con la palabra clave static en el interior de una clase, la variable es una variable de clase. Se puede acceder a ella directamente por el nombre de la clase y existe en un único ejemplar.
-
Declarada en el interior de una función, la variable es una variable local. Sólo existe durante la ejecución de la función y sólo se puede acceder a ella desde el código de ésta.
-
Los parámetros de las funciones se pueden considerar como variables locales. La única diferencia reside en la inicialización de la variable efectuada durante la llamada a la función.
a. Nombre de las variables
Veamos las reglas que se deben respetar para nombrar a las variables.
-
El nombre de una variable empieza obligatoriamente por una letra.
-
Puede tener letras, cifras o el carácter de subrayado (_).
-
Puede contener un número cualquiera de caracteres (por razones prácticas, es mejor limitarse a un tamaño razonable).
-
Se hace una distinción entre minúsculas y mayúsculas (la variable EDADDELCAPITAN es diferente a la variable edaddelcapitan).
-
Las palabras clave del lenguaje no deben utilizarse como nombre de variable.
-
Por convenio, los nombres de variable se ortografían con letras minúsculas salvo la primera letra de cada palabra si el nombre de la variable incluye varias palabras (edadDelCapitan).
b. Tipo de variables
Al determinar un tipo para una variable, indicamos cuál es la información que vamos a poder almacenar en esta variable y las operaciones que podremos efectuar con ella.
Java dispone de dos categorías de tipos de variables:
-
Los tipos por valor: la variable contiene realmente...
Los operadores
Los operadores son palabras claves del lenguaje que permiten ejecutar operaciones en el contenido de ciertos elementos, en general variables, constantes, valores literales, o retornos de funciones. La combinación de uno o varios operadores y elementos en los cuales los operadores van a apoyarse se llama una expresión. Estas expresiones se evalúan en tiempo de ejecución en función de los operadores y de los valores asociados.
Java dispone de dos tipos de operadores:
-
Los operadores unarios que trabajan sólo en un operando.
-
Los operadores binarios que necesitan dos operandos.
Se pueden utilizar los operadores unarios con la notación prefijada. En este caso, el operador se sitúa antes del operando. También la notación puede aparecer postfijada, en cuyo caso, el operador se sitúa después del operando. La posición del operador determina el momento en el que éste se aplica a la variable. Si el operador está prefijado, se aplica en el operando antes que éste sea utilizado en la expresión. Con la notación postfijada del operador se aplica en la variable sólo después de su uso en la expresión. Esta distinción puede influir en el resultado de una expresión.
int i;
i=3;
System.out.println(i++);
Muestra 3 porque el incremento se ejecuta después de la utilización de la variable con la instrucción println.
int i;
i=3;
System.out.println(++i);
Muestra 4 porque el incremento se ejecuta antes de utilizar la variable con la instrucción println.
Si la variable no se utiliza en una expresión, las dos versiones llevan al mismo resultado.
La siguiente línea de código:
i++;
es equivalente a la línea de código:
++i;
Se pueden repartir los operadores en siete categorías.
1. Los operadores unarios
Operador |
Acción |
- |
Valor negativo |
~ |
Complemento a uno |
++ |
Incremento |
-- |
Decremento |
! |
Negación |
Sólo se puede utilizar el operador ! (exclamación) en variables de tipo boolean o en expresiones que producen un tipo boolean (comparación).
2. Los operadores de asignación
El único operador disponible en esta categoría es el operador =. Permite asignar un valor a una variable. Se utiliza el mismo operador sea cual sea el tipo de la variable (numérico, cadena de caracteres...)....
Las estructuras de control
Las estructuras de control permiten modificar el orden de ejecución de las instrucciones en nuestro código. Java dispone de dos tipos de estructuras:
-
Las estructuras de decisión: orientarán la ejecución del código en función de los valores que pueda tomar una expresión de evaluación.
-
Las estructuras de bucle: permiten ejecutar una sección de código cierto número de veces, hasta que o mientras una condición se cumpla.
1. Estructuras de decisión
Existen dos soluciones posibles.
a. Estructura if
Se pueden usar hasta cuatro sintaxis para la instrucción if.
if (condición)instrucción;
Si la condición es verdadera, la instrucción se ejecuta. La condición debe ser una expresión que, una vez evaluada, debe devolver un valor boolean true o false. Con esta sintaxis, sólo la instrucción situada después del if será ejecutada si la condición es verdadera. Para ejecutar varias instrucciones en función de una condición debemos utilizar la sintaxis siguiente.
if (condición)
{
Instrucción 1;
...
Instrucción n;
}
En este caso, se ejecutará el grupo de instrucciones situado entre las llaves si la condición es verdadera.
También podemos especificar una o varias instrucciones que se ejecutarán si la condición es falsa.
if (condición)
{
Instrucción 1;
...
Instrucción n;
}
else
{
Instrucción 1;
...
Instrucción n;
}
También podemos anidar las condiciones en la sintaxis.
if (condición1)
{
Instrucción 1
...
Instrucción n
}
else if (condición2)
{
Instrucción 1
...
Instrucción n
}
else if (condición3)
{
Instrucción 1
...
Instrucción n
}
else
{
Instrucción 1
...
Instrucción n
}
En este caso, se comprueba la primera condición. Si es verdadera, se ejecuta el bloque de código correspondiente, y si no, se comprueba la siguiente y así sucesivamente. Si no se verifica ninguna condición...
Ejercicios
Ejercicio 1
Crear una tabla de diez cadenas de caracteres y, a continuación, rellenar esta tabla con direcciones de correo electrónico. Calcular a continuación, a partir de la información incluida en la tabla, el segmento de mercado de cada uno de los proveedores de acceso.
Pista: en una dirección de correo electrónico, el proveedor de acceso es la parte de la dirección situada después del carácter @ de la dirección de correo electrónico.
Ejercicio 2
Generar tres números aleatorios comprendidos entre 0 y 1000 y, a continuación, verificar si se ha obtenido dos números pares seguidos de un número impar. Si no fuera el caso, repita hasta tener la combinación par, par, impar. Mostrar, a continuación, el número de ensayos realizados para obtener dicha combinación.
Pista: la clase Math proporciona el método estático random que genera un número aleatorio comprendido entre 0 y 1.
Ejemplo: double num=Math.random();
Ejercicio 3
Generar un número aleatorio comprendido entre 0 y 1000. Pedir, a continuación, al usuario adivinar el número escogido por el ordenador. Para ello, debe introducir un número comprendido entre 0 y 1000. Se compara el número introducido con el calculado por el ordenador y se muestra en la consola "es mayor" o "es menor" en función del caso....
Correcciones
Corrección del ejercicio 1
Descompongamos el problema.
En primer lugar hay que crear y rellenar la tabla que contiene las direcciones de correo electrónico que queremos procesar. La tabla direcciones juega este rol, y se inicializa en las líneas 13 a 23.
A continuación es preciso extraer, de las direcciones, la información relativa al nombre del proveedor. El resultado se almacena en una nueva tabla llamada listaProveedores. Este procesamiento se realiza en las líneas 25 a 29.
Esta tabla se analiza, a continuación, para extraer los distintos nombres de proveedor, que se almacenan en una nueva tabla nombresProveedores. Las líneas 31 a 48 realizan este trabajo recorriendo la tabla listaProveedores y verificando si cada nombre ya está presente en la tabla nombresProveedores gracias a la función busquedaProveedor. Devuelve el índice de la posición si se encuentra el proveedor, o -1 en caso de no encontrarlo. En este caso, el nombre del proveedor se agrega a la tabla nombresProveedores. A continuación, se incrementa el contenido del tamaño correspondiente a la tabla numCliente.
Para terminar, se recorre la tabla nombresProveedores y se recupera en la tabla numCliente el número de veces que aparece el proveedor, para calcular, a continuación, el porcentaje (líneas 49 a 63).
1. package ejercicios.capitulo2.ejercicio1;
2.
3. public class Principal
4. {
5. static String[] direcciones;
6. static String[] listaProveedores;
7. static String[] nombresProveedores;
8. static int[] numCliente;
9. static int posicion;
10. static String proveedor;
11. public static void main(String[] args)
12. {
13. direcciones=new String[10];
14. direcciones[0]="jpp@telefonica.es";
15. direcciones[1]="tom@gmail.com";
16. direcciones[2]="fred@telefonica.es";
17. direcciones[3]="victor@telefonica.es"; ...