Ejercicios programación Java

De MediaWiki
Ir a la navegación Ir a la búsqueda

Sumario

Fuentes

  • Algunos de los ejercicios listados fueron obtenidos de las siguientes fuentes:


Recuerda

  • El código debe estar indentado (tabulado correctamente). Lo debe de hacer automáticamente el IDE Netbeans.
  • Cada vez que hay una apertura con llave ({) debe tener un cierre de llave correspondiente (}). Por lo tanto, si el IDE no lo pone automáticamente, escribirlo antes de empezar a implementar el código interior.
  • Java distingue mayúsculas de minúsculas. Una variable de nombre edad es diferente de otra de nombre Edad.
  • Respeta las reglas de nomenclatura de Clases, variables, constantes y métodos.
  • Todas las sentencias en Java deben acabar en punto y coma (;)

Ejercicios UD0: Uso de NetBeans

  • Crea un nuevo proyecto Java de nombre 'ProyectoJava' con una clase principal de nombre 'Principal' dentro del paquete 'mispaquetes'.
Modifica el método main para que al ejecutar la clase muestre tu nombre.
Compila y ejecuta la clase comprobando que funciona adecuadamente.


  • Cambia a la vista Archivos y comprueba que el bytecode fue generado y se encuentra en el directorio build.
Compila y ejecuta la clase desde una consola (terminal en Linux). Recuerda que para compilar una clase dentro de un paquete tienes que situarte en la carpeta del proyecto y el nombre de la clase a compilar tiene que ir precedido del nombre del paquete de la forma 'paquete/Clase.java'.
Utiliza la opción que nos da NetBeans de abrir una terminal dentro de su entorno (botón derecho => Herramientas => Open in terminal).
Ejecuta la clase compilada desde consola. Recuerda que en este caso, el nombre de la clase es paquete.Clase


  • Modifica desde Netbeans el nombre del paquete en la clase creada y cámbialo por mispaquetes2. ¿ Qué sucede ?
Haz lo necesario para subsanar el error. Recuerda utilizar la función Reestructurar de Netbeans.


  • Al hacer el paso anterior, cambiamos la clase Principal del proyecto (ahora está en otro paquete). Debemos modificar sus propiedades para que coja la nueva clase.
Edita la configuración del proyecto y cambia la clase Principal (si intentamos ejecutar el proyecto sin cambiar la clase, el IDE nos pedirá que escojamos la nueva clase a 'ejecutar' => realmente busca una clase con el método main y lo ejecuta).


  • Comprueba desde la vista de Archivos de Netbeans como quedan en build las carpetas de los paquetes creados. Haz uso de la opción 'Compilar y limpiar' de Netbeans para que borre las carpetas que ya no son necesarias.


  • Utiliza la función Reestructurar de Netbeans para cambiar el nombre del paquete a 'nuevos.paquetes'.
¿ Cual es el resultado ?. Cada paquete representa físicamente una carpeta a nivel de S.O. Podéis comprobarlo mirando la vista de 'Archivos' de Netbeans.


  • Cambia el nombre de la clase a ProyectoJava2 sin utilizar la reestructuración. ¿ Qué pasa ? ¿ Qué tendrías que hacer para que se pueda compilar la clase ?


  • Personalización del NetBeans:


  • Combinación de teclas útiles en Netbeans.
  • fori + Tab: Genera el código necesario para hacer un for.
  • iff + Tab: Genera los bloques if.
  • sout + Tab o soutv + Tab: Genera los System.out.println(“”).
  • sw + Tab: Genera el switch.
  • whilexp + Tab: Genera los bloques While.
  • Ctrl + Space: Completa el código que estamos escribiendo.
  • Alt + Insert: Agrega constructores, métodos accesores, propiedaes, overrides, etc...
  • Alt + Enter: Se usa sobre el texto subrayado para ver la sugerencia que nos hace el IDE cuando hay algún error de sintaxis.
  • Ctrl + R: Si lo hacemos sobre el identificador, renombra todas las ocurrencias.


Ejercicios UD1: Identificación de los elementos de un programa informático

  • En este punto entraría:
  • Estructura de un programa en Java.
  • Variables.
  • Dentro de este punto entrarían las variables de tipo double / float.
En este enlace disponéis de varios ejemplos de como representa un ordenador internamente un número real.
  • Constantes.
  • Literales.
  • Operadores.
  • Conversión de tipos.
  • Comentarios.


Ejercicio 1: Validez de identificadores

Obtenidos en parte desde este sitio web.
  • Indica qué identificadores de los siguientes son válidos y cuales no lo son. En el caso que no sean válidos detalla el por qué: casa, -numero, micasa1, MES_1, mes_1, _a890, numero_”, 3numero, a890


  • Tenemos que crear variables para medir la temperatura de un horno, almacenar un número de teléfono, un interés bancario, los campos para guardar los datos personales de una persona, las partes de un ordenador. Indica los nombres que les darías a cada una de las variables.


  • Indica los nombres que les darías a cada una de las constantes: constante para medir 32 grados de fiebre, almacenar el teléfono de urgencias 112, la primera vocal del alfabeto y la velocidad de la luz.


Solución Ejercicio 1

  • Indica qué identificadores de los siguientes son válidos y cuales no lo son. En el caso que no sean válidos detalla el por qué: casa, -numero, micasa1, MES_1, mes_1, _a890, numero_”, 3numero, a890
  • Solución: Mirando los apuntes podemos comprobar como un identificador debe comenzar con una letra, $ o _ pero por convenio no se debe utilizar $ y _
Por lo tanto, en el caso anterior no son válidos: -numero,_a890,3numero
Por otra banda no se puede utilizar ninguno de los caracteres especiales (las comillas dobles): numero_”


  • Tenemos que crear variables para medir la temperatura de un horno, almacenar un número de teléfono, un interés bancario, los campos para guardar los datos personales de una persona, las partes de un ordenador. Indica los nombres que les darías a cada una de las variables.
  • Solución: tempHorno; telefono; interesBancario; nombreCompleto, direccion, telefono, codigoPostal,pais; marcaMonitor, marcaCpu, marcaHd, capacidadHD
Nota: Fijarse que se hiciéramos uso de la POO, podríamos crear una clase Monitor (por ejemplo) que tuviera las propiedades (variables) marca, tamaño,...


  • Indica los nombres que les darías a cada una de las constantes: constante para medir 32 grados de fiebre, almacenar el teléfono de urgencias 112, la primera vocal del alfabeto y la velocidad de la luz.
  • Solución: GRADOS_32, TFNO_URGENCIAS;VOCAL_1; VELOCIDAD_LUZ

Tipos de variables

Teoría: Tipos de variables

  • En este punto vamos a detenernos en el tipo de variable float/double.
Como comentamos en clase, dichos tipos de datos son utilizados para guardar datos con parte decimal, siendo uno de ellos más preciso al tener mayor cantidad de bits (el double).
El uso de este tipo de datos (tanto a nivel de programación como de base de datos) es el problema de la precisión.
Veamos el problema con un ejemplo:
1         double temp = 0.2d;
2         temp += 0.1f;
3         temp += 0.1f;
4         temp += 0.1f;
5         System.out.println("Dato:" + temp);
Produce la siguiente salida: Dato:0.5000000044703483
¿ Cómo puede ser ? Estamos utilizando el tipo double que es el que más rango de datos puede almacenar. ¿ Cómo puede ser que tenga esos dígitos del final ?
Esto es debido al proceso de 'codificación' de nuestro sistema decimal a un sistema binario, que es el que entiende el ordenador.
  • Detengámonos en la forma que utilizamos para pasar un dato decimal a binario.
  • Si es entero, vamos dividiendo por 2 y anotando el resto, repitiendo el proceso resultado hasta obtener un 1 o un 0.
Por ejemplo:
13 / 2 = 6, resto 1 ==> Número en binario: 1
6 / 2 = 3, resto 0 ==> Número en binario: 01
3 / 2 = 1, resto 1 ==> Número en binario: 101
Resultado de la última operación 1 ==> Número en binario: 1101
Ejerc prog 01.jpg
Imagen obtenida de este enlace
El proceso contrario, pasar de binario a decimal la parte entera de un número, consiste en las sumas parciales de elevar a 2 el número de posición menos uno de cada uno los bits con valor 1 del número binario.
Así, 1101 = 2^3 + 2^2+2^0 = 8+4+1 = 13
Como podemos comprobar, todos los números enteros van a tener su correspondiente binario (dentro del rango de números que puedan representar el número de bits).
Así, con 8 bits voy a poder representar 2^8 números enteros, o lo que es lo mismo, números desde el 0 hasta 255 (2^8 = 256, pero hay que contar el número 0).


  • Si es decimal la cosa se complica.
Un número decimal binario de valor ,1 vale 1/2
Un número decimal binario de valor ,01 vale 1/4
Un número decimal binario de valor ,001 vale 1/8
y así sucesivamente.
¿ Qué problema tenemos ?
Que todo número binario decimal va a tener su correspondiente número decimal, pero no todo decimal va a tener su correspondiente número binario de forma 'exacta'.
Por ejemplo, entre 0.50 y 0,75 vamos a tener una serie de números, que para obtenerlos, vamos a tener que sumarles 'fracciones' parciales 1/x, de tal forma que la suma de todas ellas sumen el número decimal.
El problema es que no podemos utilizar infinitas fracciones ya que el número de bits que utiliza el ordenador para guardar un número real es limitado, por lo tanto vamos a tener un error (muy pequeño) pero un cierto error en aquellos números decimales que no tengan una representación exacta.
Ejerc prog 02.jpg
Imagen obtenida de este enlace
Como vemos en la imagen el número real 1/3 no tiene una representación exacta...


  • Nota: Aún no hemos llegado a la programación orientada a objetos y el uso de clases, pero a modo de información indicar que si queremos tener un resultado exacto de operaciones con números decimales, deberíamos hacer uso de la clase BigDecimal.


  • Debido a este problema nunca podemos comparar dos números float/double de la forma var1==var2, ya que pueden tener valores diferentes debido a lo anterior.
Una forma de solucionarlo es restando sus dos valores de forma absoluta (para que siempre de positivo) y comparándolo con un valor muy pequeño:
1 if (Math.abs(float1 - float2) < 1e-5){
2 
3 }

Ejercicio 2: Tipos de variables

  • Identifica los tipos de variables que encuentres en esta clase, atendiendo a si son:
  • Variables de tipos primitivos/de referencia.
  • Variables/Constantes
  • Variables miembro/locales
 1 class Computador{
 2 
 3     final int MAYOR_EDAD=100;
 4     int capacidade; 
 5     String marca; 
 6    
 7     void calcularPotencia(){
 8         float indice=0; 
 9        
10        
11     }
12     String obtenerDescripcion(){
13         String temporal=""; 
14         final String CADENA_FIJA="TE ENCUENTRAS EN:";
15 
16       
17         return temporal;
18     }
19    
20 }


Solución Ejercicio 2
 1 class Computador{
 2 
 3     final int MAYOR_EDAD=100; => primitivo, constante, miembro
 4    
 5     int capacidade; => primitivo, variable, miembro
 6     String marca; => referencia, variable, miembro
 7    
 8     void calcularPotencia(){
 9         float indice=0; => primitivo, variable, local
10     }
11     String obtenerDescripcion(){
12         String temporal=""; => referencia, variable, local
13         final String CADENA_FIJA="TE ENCUENTRAS EN:"; => referencia, constante, local
14 
15        
16         return temporal;
17     }
18    
19 }

Ejercicio 3: Definir variables y tipos

  • Define las variables y constantes con un nombre adecuado y un tipo correcto que serían necesarios para dar solución a los siguientes problemas:
  • Se quiere crear una clase que guarde información personal de sus empleados (incluidos teléfono y email).
  • Se quiere crear un método que a partir de un radio dado, calcule el diámetro, la longitud y el área.
  • Se quiere crear un método que en base a un conjunto de notas de cada uno de los alumnos, calcule la media de todas ellas.
  • Se quiere crear una clase que guarde información sobre los coches de alquiler de los que dispone.
  • Se quiere crear un método que calcule el importe total del precio de un producto con su iva.


Solución Ejercicio 3

  • Se quiere crear una clase que guarde la dirección y nombre de sus empleados (incluidos teléfono y C.P.).
  • Solución:
1 String nombre;
2 String apellidos;
3 String fechaNac;   // Si queremos guardar la fecha de nacimiento, Java dispone de una clase Date.
4 String direccion;
5 String telefono;   // ¿ No debería ser un número ? 
6 String codigoPostal; // ¿ No debería ser un número ?
Os indico alguna de las razones por las que no sería necesario que teléfono y código postal sean número:
  • El código postal y el teléfono aportan información con parte de sus dígitos. Así el C.P., por ejemplo, 15660 indicaría que es de Coruña. Extraer esas 'partes' es mucho más fácil si el tipo de dato es String.
  • No vamos a realizar operaciones matemáticas con ellas. Si tuviéramos un campo edad, sí que sería numérico, ya que podríamos querer obtener la media de edad de todos los empleados, o cual de ellos es mayor.
  • Si alguno de los datos tiene ceros al comienzo, no podrían ser guardados dentro de un campo de tipo numérico.


  • Se quiere crear un método que a partir de un radio dado, calcule el diámetro, la longitud y el área.
  • Solución:
1 float radio;
2 float diametro;
3 float longitud;
4 float area;
5 final float PI;
Podríamos utilizar double para guardar los datos. De hecho, las operaciones trigonométricas de senos, cosenos,...devuelven un double. Todo dependerá del dato de entrada que utilicemos y de la precisión que queramos tener.


  • Se quiere crear un método que en base a un conjunto de notas de cada uno de los alumnos, calcule la media de todas ellas.
  • Solución:
1 float media;
2 float nota;  // Ponemos float ya que la nota podría venir con números decimales y llega el tipo float para guardar dos dígitos.
El enunciado habla de un conjunto de notas. En este caso estamos definiendo el nombre y tipo de una nota. Para guardar un conjunto de notas tendremos que hacer uso de unas estructuras de datos más complejas, como arrays o listas.


  • Se quiere crear una clase que guarde información sobre los coches de alquiler de los que dispone.
  • Solución:
1 String marca;
2 String matricula;
3 int km;


  • Se quiere crear un método que calcule el importe total del precio de un producto con su iva.
  • Solución:
1 final float IVA;
2 float precioFinal;

Ejercicio 4: Crear variables, tipos e incializarlas

  • Crea una variable para cada uno de los siguientes datos e inicialízala (cuando se indique su valor).
Cada variable se escribirá en una línea.
Nota: Fíjate en las advertencias errores que muestra NetBeans
  • peso
  • Edad: 12
  • Temperatura Exterior: -45 ºC
  • Temperatura interior: 13 ºC
  • Radio del universo: 13 x 10-97m
  • Gastos: 1443.14 €
  • Poblacion existente en China: 1.325.254.589 habitanes
  • Sexo: H
  • float: 3;
  • Peso de un tomate: 0.23 Kg
  • letra del NIF
  • NIF


Solución Ejercicio 4

  • Es esta solución se hace uso del método printf el cual permite mostrar información con un formato determinado. Más información en este enlace.


 1     public static void main(String[] args) {
 2         // TODO code application logic here
 3 
 4         float peso;
 5         byte edad=12;  // Si tenemos dudas de si 127 va a ser una edad alcanzable, mejor poner un short
 6         byte tempExterior=-45;
 7         byte tempInterior=13;
 8         double radioUniverso=13e97;
 9         float gastos=1443.14f;
10         int poblacionChina=1325254589;  // Si queremos tener un margen mayor pondríamos un long
11         char sexo='H';  // En programación, a los datos que pueden guardar solamente dos valores se les asigna un tipo boolean
12         // float es una palabra reservada y no se puede utilizar como nombre de variable;
13         float pesoTomate = 0.23f;
14         char letraNif;
15         String nif="11111111A";
16 
17         // Al ser variables locales (están definidas dentro del metodo main) las no inicializadas no tienen valor y por tanto no pueden visualizarse.
18         
19         System.out.println("Edad:" + edad);
20         System.out.printf("Edad:%d años %n", edad);
21 
22         System.out.println("Temperatura exterior:" + tempExterior);
23         System.out.printf("Temperatura exterior:%d ºC %n", tempExterior);
24 
25         System.out.println("Temperatura interior:" + tempInterior);
26         System.out.printf("Temperatura interior:%d ºC %n", tempInterior);
27         
28         System.out.println("Radio Universo:" + radioUniverso);
29         System.out.printf("Radio Universo:%,.2f %n", radioUniverso);  // Muestra la coma separando los miles y dos dígitos decimales
30 
31         System.out.println("Gastos:" + gastos);
32         System.out.printf("Gastos: %,.2f Euros %n", gastos);
33         
34         System.out.println("Población en China:" + poblacionChina);
35         System.out.printf("Población en China: %,d personas. %n", poblacionChina);
36 
37         System.out.println("Sexo:" + sexo);
38         System.out.printf("Sexo: %C %n", sexo);  // C en maíscula pasa a letra a maiúscula
39 
40         System.out.println("Peso del tomate:" + pesoTomate);
41         System.out.printf("Peso del tomate: %.2f Kilogramos %n" , pesoTomate);
42 
43         System.out.println("NIF:" + nif);
44         System.out.printf("NIF:%s%n" , nif);
45         
46     }

Ejercicio 5: Tipos de datos enumerados

  • Crea un tipo de dato enumerado con los días de la semana.
  • Crea un tipo de dato enumerado que guarde las etapas por las que pasa el ser humano: bebé, niño, adolescente, adulto, anciano.


  • Crea una variable de cada tipo y asígnale un valor inicial.

Solución Ejercicio 5

 1 public class OlaMundo {
 2 
 3    enum Dias {Lunes,Marte,Miercoles,Jueves,Viernes,Sabado,Domingo};
 4    enum EtapasHumano {BEBE,NIÑO,ADOSLESCENTE,ADULTO,ANCIANO};
 5     /**
 6      * @param args the command line arguments
 7      */
 8     public static void main(String[] args) {
 9         // TODO code application logic here
10 
11         Dias dia = Dias.Jueves;
12         EtapasHumano misEtapas = EtapasHumano.ADOSLESCENTE;
13         
14     }
15     
16 }

Ejercicio 6: Literales y caracteres escape

  • Recordar: Un literal es cada uno de los valores posibles que pueda tener cada uno de los tipos primitivos de datos, tipo String o tipo null.


  • Asigna a una variable de tipo carácter, el carácter B, el código UTF en decimal, el código UTF en octal y el código UTF en hexadecimal.
  • Asigna a una variable de tipo booleano un valor.
  • Asigna a una variable de tipo entero el número 100 en decimal y en hexadecimal.
  • Asigna el valor 32324 a una constante de tipo long.
  • Expresa de tres formas diferentes el valor 3.1416.
  • Muestra la siguiente cadena: El "otro día" vino a verme.
  • Muestra utilizando una única instrucción println dos frases en líneas diferentes.
  • Define e inicializa dos variables (nombre y edad). Muestra en dos líneas diferentes cada una de las frases utilizando una única instrucción println las frases: "Bienvenido 'XXXXXXX'." "Tienes XX años".

Solución Ejercicio 6

  • Asigna a una variable de tipo carácter, el carácter B, el código UTF en decimal, el código UTF en octal y el código UTF en hexadecimal.
1         char letraB='B';
2         char letraBEnDecimal=66;
3         char letraBEnOctal=0102;  // Empieza por 0 (cero)
4         char letraBEnHex=0x42;              // Empieza por 0x (cero x)
5         System.out.println(letraB);
6         System.out.println(letraBEnDecimal);
7         System.out.println(letraBEnOctal);
8         System.out.println(letraBEnHex);


  • Asigna a una variable de tipo booleano un valor.
1 boolean basico = false;
  • Asigna a una variable de tipo entero el número 100 en decimal y en hexadecimal.
1         int valor;
2         
3         valor = 100;
4         System.out.println(valor);
5         valor = 0x64;
6         System.out.println(valor);
  • Asigna el valor 32324123456 a una constante de tipo long.
1 final long C_NUMERO=32324123456L;
  • Expresa de tres formas diferentes el valor 3.1416.
1         double valorDecimal = 3.1416;
2         System.out.println(valorDecimal);
3         valorDecimal = 31416e-4;
4         System.out.println(valorDecimal);
5         valorDecimal = 0.31416e1f;
6         System.out.println(valorDecimal);
  • Muestra la siguiente cadena: El "otro día" vino a verme.
1         System.out.println("El \"otro día\" vino a verme");


  • Muestra utilizando una única instrucción println dos frases en líneas diferentes.
1 System.out.println("Vi a Juan el otro día.\nEspero que esté bien...");
  • Define e inicializa dos variables (nombre y edad). Muestra en dos líneas diferentes cada una de las frases utilizando una única instrucción println las frases: "Bienvenido 'XXXXXXX'." "Tienes XX años".
1         String nome = "Angel Fernandez";
2         int edad=32;
3         
4         System.out.println("Bienvenido '" + nome + "'.\n" + "Tienes " + edad + " anos");


Entrada de datos

Teoría

  • Información obtenida de:
  • Antiguamente para leer información del teclado (en aplicaciones de tipo consola) era necesario utilizar el objeto 'in' de la clase System.
Recordar que la clase System está dentro del paquete java.lang el cual es importado automáticamente.
El problema que tiene este método es que leemos la información como bytes y es necesario realizar una conversión al tipo de dato correspondiente.
Por ejemplo:
1 // Lectura de un byte
2 int aByte = System.in.read();
3 
4 // Lectura de hasta 50 bytes
5 byte [] buffer = new byte[50];
6 System.in.read(buffer);
El problema de leer bytes, es que luego debemos convertirlos. Por ejemplo, si tecleamos una letra A mayúscula, el byte leído es el 65, que se corresponde a la A mayúscula en código ASCII.
Si tecleamos un 6 y un 7, es decir, un 67, leeremos dos bytes 54 y 55, correspondientes a los caracteres ASCII del 6 y del 7, NO leeremos un 67.


  • Antes de java 1.5, la forma de leer más fácilmente cosas que no sean bytes (leer cadenas de texto o números), era usar las clases InputStreamReader y BufferedReader conjuntamente.
La primera es capaz de convertir esos bytes a caracteres. La segunda es capaz de leer hasta un fin de línea.
La forma de instanciar (crear objetos) estas clases para usarlas con System.in es la siguiente:
1 InputStreamReader isr = new InputStreamReader(System.in);
2 BufferedReader br = new BufferedReader (isr);
Con esto, podemos leer líneas completas usando el BufferedReader br. Así, por ejemplo, si escribimos una A, con
1 String cadena = br.readLine();
obtendremos en la variable cadena una "A".
Sin embargo, seguimos necesitando hacer la conversión si queremos leer números. Por ejemplo, si escribimos un entero 32, en cadena obtendremos "32". La conversión se haría con
1 int numero = Integer.parseInt (br.readLine());
y debemos, por supuesto, capturar la excepción en caso de que la cadena no se pueda convertir a String.


  • A partir del JDK 5 podemos hacer uso de una clase para poder leer datos desde el teclado de una forma más sencilla a como se hacía antes.
  • Primero es necesario importar el paquete donde se encuentra la clase:
1 package paquete;
2 
3 import java.util.Scanner;
4 
5 public class NombreClase {
6 
7 
8 }


  • Después debemos crear un objeto de la clase Scanner, enviando como parámetro el objeto in de la clase System:
1 public class NombreClase {
2 
3     public static void main(String[] args) {
4         
5         Scanner sc = new Scanner(System.in);
6     }
7 
8 }
  • Empezamos a leer del teclado. Deberemos llamar a los métodos nextXXXXX siendo XXXXX el tipo de dato que queramos leer.
 1 public class NombreClase {
 2 
 3     public static void main(String[] args) {
 4         
 5         Scanner sc = new Scanner(System.in);
 6 
 7         int numero = sc.nextInt();  // Lee un entero
 8         String cadena = sc.nextLine(); // Lee una cadena
 9     }
10 
11 }


Nota: Falta controlar las excepciones que se dan cuando introducimos un dato que no se corresponde con el tipo de variable que va a guardar ese dato.


Ejercicio 7: Entrada de datos

  • Utilizando la clase Scanner, lee por teclado un número int, uno tipo byte, tipo boolean, una cadena de caracteres y un número real.
Muestra por pantalla los valores leídos.


Solución Ejercicio 7: Entrada de datos
  • Utilizando la clase Scanner, lee por teclado un número de cada tipo, una cadena de caracteres y un número real.
 1 package proyectojava;
 2 
 3 import java.util.Scanner;
 4 
 5 /**
 6  *
 7  * @author clase
 8  */
 9 public class ProyectoJava {
10  
11     /**
12      * @param args the command line arguments
13      */
14     public static void main(String[] args) {
15         // TODO code application logic here
16         String nombre;
17         byte edad;
18         int usuarios;
19         boolean mayor;
20         double resultado;
21         
22         String cadena;
23         
24         Scanner sc = new Scanner(System.in);
25         System.out.println("Introduce un nombre:");
26         nombre = sc.nextLine();
27         System.out.println("Introduce una edad (menor que 128):");
28         edad = sc.nextByte();
29         System.out.println("Introduce un número de usuarios:");
30         usuarios = sc.nextInt();
31         System.out.println("Indica (true/false) si eres mayor de edad:");
32         mayor = sc.nextBoolean();
33         System.out.println("Indica un resultado con decimales:");
34         resultado = sc.nextDouble();
35 
36         cadena = nombre + "\n" + edad + "\n" + usuarios + "\n" + mayor + "\n" + resultado;
37         
38         System.out.println(cadena);
39     }
40     
41 }


Ejercicios: Operadores y expresiones

  • Aunque aún no hemos visto las instrucciones condicionales, vamos a hacer una introducción en este punto, para que podamos realizar ejercicios un poco más entretenidos.
En java, la instrucción que implementa la condición SI (verdadero) ENTONCES ejecuta un conjunto de instrucciones es la siguiente:
1 if (expresión que devuelve true o false) {     // Todo lo que se encuentra entre llaves es lo que tiene que ejecutar en caso de que se cumpla la condición
2 
3      // Aquí van las instrucciones que queramos que se ejecuten cuando la condición del if se cumple
4 }
Como vemos, la expresión que devuelva true/false tiene que ir entre paréntesis, y el conjunto de instrucciones que se van a ejecutar están dentro del bloque indicado por la apertura de llaves y el cierre de llaves.


Tenemos una ampliación de dicha orden para que ejecute un conjunto de instrucciones en caso de que no se cumpla la condición indicada en la parte if:
1 if (expresión que devuelve true o false) {     // Todo lo que se encuentra entre llaves es lo que tiene que ejecutar en caso de que se cumpla la condición
2 
3 
4 }
5 else{
6 
7      // Aquí van las instrucciones que queramos que se ejecuten cuando la condición del if NO se cumple
8 
9 }


  • La condición del if es cualquier expresión que devuelva true o false.
Ejemplos de expresiones:
  • var_tipo_numero > 10
  • var_tipo_numero != 10 // Indica distinto a
  • var_tipo_numero == 10 // IMPORTANTE: Si ponemos un único igual estaremos asignando el valor 10 a contador, no preguntando si su valor es 10.
  • var_tipo_boolean == false


  • Nota: En programación, en otros lenguajes, como PHP, C,... se entiende por valor FALSE cualquier expresión que devuelva un valor igual a cero, y se entiendo por TRUE cualquier expresión que devuelva un valor diferente a cero.


Ejercicios: Operadores aritméticos / asignación / condicional / de relación

Nota: En Java podemos hacer uso de la clase Math para realizar operaciones exponenciales, logarítmicas, trigonométricas, de raíz cuadrada...Por ejemplo:

  • Math.PI: Devuelve el número PI.
  • Math.abs(valor): Devuelve el valor absoluto de 'valor'.
  • Math.sqrt(valor): Devuelve la raíz cuadrada de 'valor'.
  • Math.paw(base,exponente): Devuelve el resultado de elevar la base al exponente.


  • Indica que resultado se obtiene en cada una de las siguientes instrucciones:
  • int temp=0; temp++; ++temp; System.out.println(++temp); int valor=temp++; System.out.println(valor++);


  • Indica que tipo de dato va a devolver cada operación y si será correcta la asignación.
  • byte r = 500/2;
  • int r = 10/2;
  • float r = 10.22/2;
  • float r = 10.22f/2;


  • Lee un número entero por teclado y determina si es múltiplo de 5. En caso de que lo sea, muestra un mensaje tanto con println como con printf mostrando el número, indicando que es múltiplo de 5 y el resultado de la división.
Nota: Recuerda que ya vimos en un enlace anterior como leer datos del teclado.


  • Lee un número entero por teclado y guarda su valor en una variable. Lee otro número y suma su valor al anterior (utiliza una expresión reducida de la suma). Lee otro número y resta su valor a la suma de los dos números anteriores (utiliza una expresión reducida de la suma). Muestra el resultado.


  • Se quiere calcular el área de una circunferencia. Define las variables / constantes necesarias y lee los datos necesario por teclado. Muestra el resultado (con println y printf) en caso de que los datos introducidos sean correctos (positivos distinto de cero). En caso contrario muestra un mensaje de error indicando cual es el problema.


  • Lee un número entero por teclado y guarda su valor. En caso de que el número introducido sea negativo, se guardará el valor 1 y en caso de que sea mayor que 500 se guardará el valor 500. Utiliza el operador ternario.


  • Lee dos números por teclado y determina cual de ellos es mayor o igual.


  • Lee dos números por teclado y muestra un mensaje si tienen valores diferentes.


  • Lee tres números por teclado e indica cual de ellos es el mayor (idea => puedes hacer uso de una variable auxiliar, piensa como lo harías tú con un papel :) )
Comprueba también si los tres son iguales


  • Lee un número con decimales por teclado. Compáralo con la constante definida por ti de nombre MI_VALOR y valor 3,141. Muestra un mensaje cuando sean iguales. Recuerda el problema de la precisión.
En este ejercicio se necesita un método de la clase Math que devuelve el valor absoluto: Math.abs(número)


  • Lee dos números por teclado, guarda sus datos en dos variables de nombre numero1, numero2, intercambia sus valores.
Tendrás que hacer uso de una variable auxiliar (piensa como lo harías tú en un papel)
Durante el proceso muestra las siguientes cadenas:
El número "1" tiene de valor 'XXXX'
El número "2" tiene de valor 'YYYY'
Intercambiamos sus valores....
Ahora el número "1" tiene de valor 'YYYY'
Ahora el número "2" tiene de valor 'XXXX'



Solución Ejercicios: Operadores Operadores aritméticos / asignación / condicional / de relación
  • Indica que resultado se obtiene en cada una de las siguientes instrucciones:
  • int temp=0; temp++; ++temp; System.out.println(++temp); int valor=temp++; System.out.println(valor++);
1 int temp=0;  // Asigna a la variable 'temp' el valor 0
2 temp++;   // Aumenta el valor de temp y pasa a valer 1
3 ++temp;   // Aumenta el valor de temp y pasa a valer 2
4 System.out.println(++temp);  // Primero suma y después muestra su valor, por lo tanto muestra 3
5 int valor=temp++;  // Asigna a valor lo que vale temp (que es 3)  y después incremente el valor de temp en 1 que pasa a valer 4
6 System.out.println(valor++);  // Imprime la variable valor (que vale 3) y después aumenta su valor en 1 (pasará a valer 4).
7 // temp y valor valen 4 al llegar a este punto


  • Indica que tipo de dato va a devolver cada operación y si será correcta la asignación.
  • byte r = 500/2; // Incorrecto. El resultado sobrepasa la capacidad del tipo byte. Sería necesario hacer una conversión y se perdería información.
  • int r = 10/2; // Correcto. Devuelve un número de tipo int (al no haber ninguno float o double). El resultado se puede guardar en un int
  • float r = 10.22/2; // Incorrecto. Al no poner nada, Java toma el número 10.22 como un double. El resultado de dividir será double y por tanto no se puede asignar a un float, ya que tiene menor capacidad. Sería necesario hacer una conversión y se perdería información.
  • float r = 10.22f/2; // Correcto. Uno de los operando es tipo float (indicado por la 'f') y el otro operando al no indicar nada es int, por lo tanto el resultado es float.


  • Lee un número entero por teclado y determina si es múltiplo de 5. En caso de que lo sea, muestra un mensaje tanto con println como con printf mostrando el número, indicando que es múltiplo de 5 y el resultado de la división.
1         int valor = 0;
2 
3         System.out.println("Introduce un número entero:");
4         valor = scanner.nextInt();
5         
6         if (valor%5==0){
7             System.out.println("El número " + valor + " es múltiplo de 5.\nEl cociente es " + valor/5);
8             System.out.printf("El número %d es múltiplo de 5.\nEl cociente es %d", valor, valor/5);
9         }


  • Lee un número entero por teclado y guarda su valor en una variable. Lee otro número y suma su valor al anterior (utiliza una expresión reducida de la suma). Lee otro número y resta su valor a la suma de los dos números anteriores (utiliza una expresión reducida de la resta). Muestra el resultado.
 1         int valor1=0, valor2=0;
 2  
 3         System.out.println("Introduce un número entero:");
 4         valor1 = scanner.nextInt();
 5         System.out.println("Introduce un número entero:");
 6         valor2 = scanner.nextInt();
 7         
 8         valor2 += valor1;
 9         
10         System.out.println("Introduce un número entero:");
11         int valor3 = scanner.nextInt();
12         
13         valor2 -= valor3;
14         
15         System.out.println("El resultado es " + valor2);
16         System.out.printf("El resultado es %d", valor2);


  • Se quiere calcular el área de una circunferencia. Define las variables / constantes necesarias y lee los datos necesario por teclado. Muestra el resultado (con println y printf) en caso de que los datos introducidos sean correctos (positivos distinto de cero). En caso contrario muestra un mensaje de error indicando cual es el problema.
1         final double PI = 3.14159;  // Se puede usar la constante definida en la las Math => Math.PI
2         double areaCircunf=0d;      // Local => Siempre la inicializamos
3         double radio = 0d;
4         
5         System.out.println("Introduce el radio:");
6         radio = scanner.nextDouble();
7         
8         System.out.println("El resultado es " + radio);
9         System.out.printf("El resultado es %.2f", radio);


  • Lee un número entero por teclado y guarda su valor. En caso de que el número introducido sea negativo, se guardará el valor 1 y en caso de que sea mayor que 500 se guardará el valor 500. Utiliza el operador ternario.
Muestra el valor.
 1         int valor1=0;
 2         
 3         System.out.println("Introduce un número entero:");
 4         valor1 = scanner.nextInt();
 5 
 6         valor1 = (valor1<0) ? 1 : valor1;
 7         valor1 = (valor1>500) ? 500 : valor1;
 8         
 9         System.out.println("El resultado es " + valor1);
10         System.out.printf("El resultado es %d", valor1);


  • Lee dos números por teclado y determina cual de ellos es mayor o igual.
 1         int valor1=0, valor2=0;
 2         
 3         System.out.println("Introduce un número entero:");
 4         valor1 = scanner.nextInt();
 5         System.out.println("Introduce un número entero:");
 6         valor2 = scanner.nextInt();
 7 
 8         if (valor1 >= valor2){
 9             System.out.println("El número " + valor1 + " es mayor o igual que " + valor2);
10             System.out.printf("El número %d es mayor o igual que %d", valor1, valor2);
11         }
12         else{
13             System.out.println("El número " + valor2 + " es mayor que " + valor1);
14             System.out.printf("El número %d es mayor o igual que %d", valor2, valor1);
15         }


  • Lee dos números por teclado y muestra un mensaje si tienen valores diferentes.
 1         int valor1=0, valor2=0;
 2         
 3         System.out.println("Introduce un número entero:");
 4         valor1 = scanner.nextInt();
 5         System.out.println("Introduce un número entero:");
 6         valor2 = scanner.nextInt();
 7 
 8         if (valor1!=valor2){
 9             System.out.println("El número " + valor1 + " es diferente a " + valor2);
10             System.out.printf("El número %d es diferente a %d", valor1, valor2);
11         }
12         else{
13             System.out.println("El número " + valor1 + " es igual a " + valor2);
14             System.out.printf("El número %d es igual a %d", valor1, valor2);
15         }


  • Lee tres números por teclado e indica cual de ellos es el mayor (idea => puedes hacer uso de una variable auxiliar, piensa como lo harías tú con un papel :) )
Comprueba también si los tres son iguales
 1         int valor1=0, valor2=0, valor3=0;
 2         
 3         System.out.println("Introduce un número entero:");
 4         valor1 = scanner.nextInt();
 5         System.out.println("Introduce un número entero:");
 6         valor2 = scanner.nextInt();
 7         System.out.println("Introduce un número entero:");
 8         valor3 = scanner.nextInt();
 9 
10         if (valor1==valor2) {
11             if (valor2==valor3){
12                 System.out.println("El número " + valor1 + " es igual a " + valor2 + " e igual a "  + valor3);
13                 System.out.printf("El número %d es igual a %d e igual a %d", valor1, valor2, valor3);
14             }
15         }
16         else {
17             if (valor1 > valor2){
18                 if (valor1 > valor3) {
19                     System.out.println("El número " + valor1 + " es mayor que " + valor2 + " y que "  + valor3);
20                     System.out.printf("El número %d es mayor que %d y que %d", valor1, valor2, valor3);
21                 }
22                 else {
23                     System.out.println("El número " + valor3 + " es mayor que " + valor1 + " y que "  + valor2);
24                     System.out.printf("El número %d es mayor que %d y que %d", valor3, valor1, valor2);
25                 }
26             }
27             else{
28                 if (valor2 > valor3) {
29                     System.out.println("El número " + valor2 + " es mayor que " + valor1 + " y que "  + valor3);
30                     System.out.printf("El número %d es mayor que %d y que %d", valor2, valor1, valor3);
31                 }
32                 else{
33                     System.out.println("El número " + valor3 + " es mayor que " + valor1 + " y que "  + valor2);
34                     System.out.printf("El número %d es mayor que %d y que %d", valor3, valor1, valor2);
35                 }
36             }
37         }


Otra forma de hacerlo es haciendo uso de una variable auxiliar que vaya guardando el mayor valor:
 1         int valor1=0, valor2=0, valor3=0;
 2         int auxiliar = 0;
 3         
 4         System.out.println("Introduce un número entero:");
 5         valor1 = scanner.nextInt();
 6         System.out.println("Introduce un número entero:");
 7         valor2 = scanner.nextInt();
 8         System.out.println("Introduce un número entero:");
 9         valor3 = scanner.nextInt();
10 
11         if (valor1==valor2) {
12             if (valor2==valor3){
13                 System.out.println("El número " + valor1 + " es igual a " + valor2 + " e igual a "  + valor3);
14                 System.out.printf("El número %d es igual a %d e igual a %d", valor1, valor2, valor3);
15             }
16         }
17         else {
18             auxiliar = valor1;
19             if (auxiliar < valor2){
20                 auxiliar = valor2;
21             }
22             if (auxiliar < valor3){
23                 auxiliar = valor3;
24             }
25             
26             System.out.println("El número mayor es " + auxiliar);
27         }


  • Lee un número con decimales por teclado. Compáralo con la constante definida por ti de nombre MI_VALOR y valor 3,141. Muestra un mensaje cuando sean iguales. Recuerda el problema de la precisión.
En este ejercicio se necesita un método de la clase Math que devuelve el valor absoluto: Math.abs(número)
 1         final float MI_VALOR = 3.141f;
 2         
 3         float decimal1 = 0f;
 4        
 5         System.out.println("Introduce un número decimal:");
 6         decimal1 = scanner.nextFloat();
 7         
 8         if (Math.abs(decimal1-MI_VALOR) < 1e-3){  // Solo mira hasta la tercera coma
 9             System.out.println("El número " + decimal1 + " es igual a " + MI_VALOR);
10             System.out.printf("El número %.10f es igual a %.10f", decimal1, MI_VALOR);
11         }        
12         else{
13             System.out.printf("El número %.10f NO es igual a %.10f", decimal1, MI_VALOR);
14         }
Un ejemplo de uso:
1 Introduce un número decimal:
2 10,141
3 El número 10,1409997940 NO es igual a 3,1410000324


  • Lee dos números por teclado, guarda sus datos en dos variables de nombre numero1, numero2, intercambia sus valores.
Tendrás que hacer uso de una variable auxiliar (piensa como lo harías tú en un papel)
Durante el proceso muestra las siguientes cadenas:
El número "1" tiene de valor 'XXXX'
El número "2" tiene de valor 'YYYY'
Intercambiamos sus valores....
Ahora el número "1" tiene de valor 'YYYY'
Ahora el número "2" tiene de valor 'XXXX'
 1         int valor1=0, valor2=0;
 2         int auxiliar=0;
 3         
 4         System.out.println("Introduce un número entero:");
 5         valor1 = scanner.nextInt();
 6         System.out.println("Introduce un número entero:");
 7         valor2 = scanner.nextInt();
 8 
 9         System.out.println("El número 1 tiene valor " + valor1);
10         System.out.println("El número 2 tiene valor " + valor2);
11         System.out.println("Intercambiamos sus valores");
12         
13         auxiliar = valor1;
14         valor1 = valor2;
15         valor2 = auxiliar;
16         
17         System.out.println("Ahora el número 1 tiene valor " + valor1);
18         System.out.println("Ahora el número 2 tiene valor " + valor2);

Ejercicios: Operadores lógicos y de bits

Siempre que se pida imprimir algo hacer uso de la función printf.


  • Lee un número entero por teclado y en el caso de que no sea mayor que diez, saca un mensaje de texto (utiliza el operador lógico not (!))


  • Lee dos números por teclado y si son iguales o si el primero es par y positivo sacará el mensaje "FELICIDADES", mostrando los números introducidos.
En el caso de que la suma de los dos números sea impar y los dos sean mayores que cero, sacará el mensaje "LA PRÓXIMA VEZ SERÁ", mostrando los dos números introducidos.


  • Pide los datos necesarios para calcular la media de 4 notas (números sin decimales). Comprueba utilizando los operadores lógicos que los datos introducidos son correctos (entre 1-10). En caso de que no lo sean, utilizando un único printf y una cadena 'auxiliar' muestra un mensaje en el que se indique qué número no cumplen. En caso de que todos sean correctos, calcula la media y muestra una cadena con los datos y el resultado. Utiliza los tipos de datos correctos.
Recuerda que para concatenar cadena podemos hacer uso del '+'.
Para saber si una cadena está vacía, pondremos: (cadena.length()==0)


  • Lee por teclado cinco números y cuenta los que son pares e impares.
Si la cantidad de pares es mayor que la de impares y la cantidad de pares está entre 2-5 incluidos, mostraremos el mensaje FELICIDADES.
Si la cantidad de pares es igual o menor que la de impares, multiplicaremos por 2 la cantidad (utilizar desplazamiento de bits)


  • Lee por teclado un número y comprueba si el bit 7 está activo (vale 1). Utiliza un operador de bits.


  • Lee dos números por teclado y saca por pantalla:
  • Si nº1 > 5 o nº2 > 5 => Sacamos por pantalla: "BIEN!!!".
  • Si (nº1 > 5 y nº2 > 5) o (nº1 <= 5 y nº2 <= 5) => Sacamos por pantalla: "REGULAR!!!".
Utiliza un único if-else
Haz una tabla con las condiciones y los resultados para darte una pista :)
nº1 > 5 | 0 | 0 | 1 | 1 |
nº2 > 5 | 0 | 1 | 0 | 1 |
Resultado | | | | |
Solución Ejercicios: Operadores lógicos y de bits

Nota: En todos los ejercicios se hace uso de un objeto de la clase Scanner para leer la información del teclado, como vimos en un punto anterior.


  • Lee un número entero por teclado y en el caso de que no sea mayor que diez, saca un mensaje de texto (utiliza el operador lógico not (!))
1         int numero=0;
2         
3         numero = scanner.nextInt();
4         if (!(numero>10)){
5             System.out.printf("El número %d no es mayor que diez",numero);
6         }


  • Lee dos números por teclado y si son iguales o si el primero es par y positivo sacará el mensaje "FELICIDADES", mostrando los números introducidos.
En el caso de que la suma de los dos números sea impar y los dos sean mayores que cero, sacará el mensaje "LA PRÓXIMA VEZ SERÁ", mostrando los dos números introducidos.
 1         int numero1=0;
 2         int numero2=0;
 3         
 4         System.out.println("Primer número:");
 5         numero1 = scanner.nextInt();
 6         System.out.println("Segundo número:");
 7         numero2 = scanner.nextInt();
 8         
 9         // Fijarse que hacemos uso del || y de esta forma si la primera cndición no se cumple, ya no mira la segunda
10         if ((numero1==numero2) ||(numero1%2==0 && numero1>0)){
11             System.out.printf("\"Feliciades\"%nEl número1 es %d y el numero2 es %d%n",numero1,numero2);
12         }
13         // Fijarse que no va en un else ya que el enunciado no indica que sean excluyentes
14         if ((numero1+numero2)%2>0 && (numero1>0 & numero2>0)){
15             System.out.printf("\"La próxima vez será\"%nEl número1 es %d y el numero2 es %d%n",numero1,numero2);
16         }


  • Pide los datos necesarios para calcular la media de 4 notas (números sin decimales). Comprueba utilizando los operadores lógicos que los datos introducidos son correctos (entre 1-10). En caso de que no lo sean, utilizando un único printf y una cadena 'auxiliar' muestra un mensaje en el que se indique qué número no cumplen. En caso de que todos sean correctos, calcula la media y muestra una cadena con los datos y el resultado. Utiliza los tipos de datos correctos.
 1         // Fijarse que con byte llega (son notas sin decimales) y se pueden declarar en una única línea
 2         byte nota1=0, nota2=0, nota3=0, nota4=0;
 3         double media=0f;   // Declaramos todas las variables en el mismo sitio.
 4         String mensaje=""; // Cadena auxiliar 
 5 
 6         System.out.println("Primera nota:");
 7         nota1 = scanner.nextByte();
 8         if (nota1<0 || nota1>10){
 9             mensaje="La nota1 no cumple los criterios.\n";
10         }
11         System.out.println("Segunda nota:");
12         nota2 = scanner.nextByte();
13         if (nota2<0 || nota2>10){
14             mensaje+="La nota2 no cumple los criterios.\n"; // Concatenamos
15         }
16         System.out.println("Tercera nota:");
17         nota3 = scanner.nextByte();
18         if (nota3<0 || nota3>10){
19             mensaje+="La nota3 no cumple los criterios.\n"; // Concatenamos
20         }
21         System.out.println("Cuarta nota:");
22         nota4 = scanner.nextByte();
23         if (nota4<0 || nota4>10){
24             mensaje+="La nota4 no cumple los criterios.\n"; // Concatenamos
25         }
26         
27         if (mensaje.length()>0){
28             System.out.printf("%s",mensaje);
29         }
30         else{
31             media = (nota1+nota2+nota3+nota4)/4d;
32             System.out.printf("Los datos son:%d-%d-%d-%d y el resultado es:%.2f",nota1,nota2,nota3,nota4,media);
33         }
Atención Al definir las notas como de tipo byte, esta operación ((nota1+nota2+nota3+nota4)/4) la va a tratar como byte y por tanto no va a guardar los decimales. Podéis hacer la prueba poniendo de notas: 5,5,5,6. Para solucionarlo, tenemos que hacer que alguno de los operandos sea un double, para que el resultado sea double y por tanto tenga decimales. Podríamos poner double en vez de byte para las notas, pero hay una opción más sencilla, que es convertir el dividendo (el número 4) a decimal. Para hacerlo sólo tenemos que poner la letra 'd' al lado del número de la forma: (nota1+nota2+nota3+nota4)/4d

Nota: Fijarse como las instrucciones asociadas a las condiciones que deben cumplir cada uno de los números se repiten.

Cuando en programación tengáis un conjunto de instrucciones que se repiten (sólo cambia el valor a comprobar) serán candidatas a llevarlas a un método al que llamaremos enviando la nota a comprobar.


  • Lee por teclado cinco números y cuenta los que son pares e impares.
Si la cantidad de pares es mayor que la de impares y la cantidad de pares está entre 2-5 incluidos, mostraremos el mensaje FELICIDADES.
Si la cantidad de pares es igual o menor que la de impares, sumaremos a la cantidad de pares, la de impares y multiplicaremos por 2 la cantidad (utilizar desplazamiento de bits) mostrando el resultado.
 1         int numero1=0, numero2=0, numero3=0, numero4=0, numero5=0;
 2         int pares=0,impares=0;
 3 
 4         System.out.println("Primer número:");
 5         numero1 = scanner.nextInt();
 6         if (numero1%2==0){
 7             pares++;
 8         }
 9         else{
10             impares++;
11         }
12         System.out.println("Segundo número:");
13         numero2 = scanner.nextInt();
14         if (numero2%2==0){
15             pares++;
16         }
17         else{
18             impares++;
19         }
20         System.out.println("Tercer número:");
21         numero3 = scanner.nextInt();
22         if (numero3%2==0){
23             pares++;
24         }
25         else{
26             impares++;
27         }
28         System.out.println("Cuarto número:");
29         numero4 = scanner.nextInt();
30         if (numero4%2==0){
31             pares++;
32         }
33         else{
34             impares++;
35         }
36         System.out.println("Quinto número:");
37         numero5 = scanner.nextInt();
38         if (numero5%2==0){
39             pares++;
40         }
41         else{
42             impares++;
43         }
44         
45         if (pares>impares && ((pares>=2) & (pares<=5))){
46             System.out.println("FELICIDADES");
47         }
48         else{   // Ahora lleva else ya que la condición es la contraria
49             pares += impares;
50             System.out.println("PARES:" + pares);
51             pares = pares << 1;
52             
53             System.out.printf("Resultado:%d",pares);
54         }


  • Lee por teclado un número y comprueba si el bit 7 está activo (vale 1). Utiliza un operador de bits.
1         int numero;
2         
3         System.out.println("Primer número:");
4         numero = scanner.nextInt();
5 
6         if ((numero & 128)==128){   // El séptimo bit tiene el valor 128
7             System.out.println("El bit 7 está activo");
8         }


  • Lee dos números por teclado y saca por pantalla:
  • Si nº1 > 5 o nº2 > 5 => Sacamos por pantalla: "BIEN!!!".
  • Si (nº1 > 5 y nº2 > 5) o (nº1 <= 5 y nº2 <= 5) => Sacamos por pantalla: "REGULAR!!!". Fijarse que la segunda condición es la contraria a la de la primera línea.
Utiliza un único if-else.
Haz una tabla con las condiciones y los resultados para darte una pista :)
nº1 > 5 | 0 | 0 | 1 | 1 |
nº2 > 5 | 0 | 1 | 0 | 1 |
Resultado | Reg|Bie|Bie|Reg|
Por lo tanto tenemos que utilizar un or exclusivo.
 1         int numero1=1,numero2=0;
 2         
 3         System.out.println("Primer número:");
 4         numero1 = scanner.nextInt();
 5         System.out.println("Segundo número:");
 6         numero2 = scanner.nextInt();
 7 
 8         if (numero1>5 ^ numero2>5){
 9             System.out.println("BIEN");
10         }
11         else{
12             System.out.println("REGURAL");
13         }

Ejercicios: Operadores de Cadena

  • En la comparación de cadenas podemos usar el método equals o el método compareTo.
Existen varias diferencias entre ambos, aunque en el caso de las cadenas puedan servir para lo mismo.
Diferencias:
  • equals está implementado en la clase Object por lo tanto todos las clases en Java disponen del método. No así compareTo, que necesita tener implementado una interface.
  • equals es más rápido que compareTo.
  • equals devueve true/false en función de si los objetos son iguales o no (en el caso de las cadenas, son iguales si el contenido es el mismo). compareTo devuelve un número que puede indicar que un objeto es igual a otro, que sea mayor o que sea menor. Hace una comparación léxica de las cadenas.


  • Otro método interesante que encontramos en la clase String es indexOf, el cual nos devuelva la posición en la cadena de una determinada cadena a buscar dentro de ella. Una de las formas a utilizar (tiene varias) es: cadena.indexOf("cadena_buscar",posición_inicial), que devolverá la posición de 'cadena_buscar' dentro de 'cadena'. Si no la encuentra devuelve -1.
  • En los siguientes ejercicios será obligatorio el uso de 'printf' cuando queramos imprimir alguna variable.
Será obligatorio utilizar la función 'concat' siempre que se pida unir dos o más cadenas.


  • Lee una cadena y si es Luis o Pedro pide un número por teclado. Si el número es impar, sumaremos a su valor 5 y en el caso de que se par, sumaremos a su valor 10.
En caso contrario (no es Luis ni Pedro) sacaremos un mensaje con el nombre introducido.
  • Lee una cadena por teclado y en el caso de que tenga una longitud menor a 20, leerás otra cadena que se concatenará a la primera cadena leída, con un guión entre ambas.
Se debe mostrar por pantalla la cadena final.


  • Lee una cadena por teclado en el que se pida nombre u apellidos con el formato: apellido1 apellido2,nombre (suponemos que el formato está correcto).
Descompón esa cadena y guarda en tres variables, el nombre, el primer apellido y el segundo apellido.
Muestra los valores de cada variable junto con su longitud.
Concatena los tres valores de la forma 'nombre apellido1 apellido2' en una variable de tipo cadena, utilizando una única instrucción y sácalo por pantalla.
Nota: Vas a tener que hacer uso del método 'indexOf'.
Recuerda que el método concat() devuelve una cadena, que a su vez, también dispone del método concat() y así sucesivamente.


  • Lee un nombre por teclado y conviértelo a mayúsculas. Guarda el resultado y concaténalo a la misma cadena con minúsculas. Muestra el resultado.


  • Lee un número por teclado y conviértelo a una cadena a la que concatenarás el valor de una constante con el valor "NUMERO". Muestra la cadena "NUMERO XX" siendo XX el número leído.


Solución Ejercicios: Operadores de Cadena
  • Lee una cadena y si es Luis o Pedro pide un número por teclado. Si el número es impar, sumaremos a su valor 5 y en el caso de que se par, sumaremos a su valor 10.
En caso contrario (no es Luis ni Pedro) sacaremos un mensaje con el nombre introducido.
 1         String cadena="";
 2         int numero=0;
 3         
 4         System.out.println("Introduce cadena:");
 5         cadena = scanner.nextLine();
 6         
 7         if (cadena.equals("Luis") || cadena.equals("Pedro")){
 8             System.out.println("Introduce un número:");
 9             numero = scanner.nextInt();
10             if (!(numero%2==0)){    // Valdría numero%2!=0
11                 numero += 5;
12             }
13             else{
14                 numero += 10;
15             }
16         }
17         else{
18             System.out.printf("El nombre introducido es %s%n",cadena);
19         }
20         System.out.printf("El número tiene de valor %d%n",numero);


  • Lee una cadena por teclado y en el caso de que tenga una longitud menor a 20, leerás otra cadena que se concatenará a la primera cadena leída, con un guión entre ambas.
Se debe mostrar por pantalla la cadena final.
 1         String cadena1="";
 2         String cadena2="";
 3         
 4         System.out.println("Introduce una cadena:");
 5         cadena1 = scanner.nextLine();
 6         
 7         if(cadena1.length()<20){
 8             System.out.println("Introduce otra cadena:");
 9             cadena2 = scanner.nextLine();
10             cadena1 = cadena1.concat("-").concat(cadena2);
11         }
12 
13         System.out.printf("La cadena final es:%s",cadena1);


  • Lee una cadena por teclado en el que se pida nombre u apellidos con el formato: apellido1 apellido2,nombre (suponemos que el formato está correcto).
Descompón esa cadena y guarda en tres variables, el nombre, el primer apellido y el segundo apellido.
Muestra los valores de cada variable junto con su longitud.
Concatena los tres valores de la forma 'nombre apellido1 apellido2' en una variable de tipo cadena, utilizando una única instrucción y sácalo por pantalla.
Nota: Vas a tener que hacer uso del método 'indexOf'.
Recuerda que el método concat() devuelve una cadena, que a su vez, también dispone del método concat() y así sucesivamente.
 1         String cadena="";
 2         String nombre="", apellido1="",apellido2="";
 3         String nombreCompleto="";  // Donde guardaremos el nombre con el nuevo formato 
 4         int posBranco=0, posComa=0;
 5         
 6         System.out.println("Introduce un nombre con el formato apellido1 apellido2,nombre:");
 7         cadena = scanner.nextLine();
 8         
 9         posBranco = cadena.indexOf(" "); // Buscamos el primer espacio en blanco. Si no pasamos la posición busca desde el principio.
10         posComa = cadena.indexOf(",",posBranco-1);  // Podemos buscar a partir del espacio
11         
12         apellido1 = cadena.substring(0,posBranco);
13         apellido2 = cadena.substring(posBranco+1,posComa);
14         nombre = cadena.substring(posComa+1);  // Si no ponemos segundo número copia hasta el final
15 
16         System.out.printf("Apellido1:%s - longitud:%d%n",apellido1,apellido1.length());
17         System.out.printf("Apellido2:%s - longitud:%d%n",apellido2,apellido2.length());
18         System.out.printf("Nombre:%s - longitud:%d%n",nombre,nombre.length());
19 
20         nombreCompleto = nombre.concat(" ").concat(apellido1).concat(" ").concat(apellido2);
21         System.out.printf("El nuevo nombre es:%s",nombreCompleto);


  • Lee un nombre por teclado y conviértelo a mayúsculas. Guarda el resultado y concaténalo a la misma cadena con minúsculas. Muestra el resultado.
1         String nombre="";
2         
3         System.out.println("Introduce un nombre:");
4         nombre = scanner.nextLine();
5 
6         nombre = nombre.toUpperCase().concat(nombre.toLowerCase());
7         
8         System.out.printf("El nuevo nombre es:%s",nombre);


  • Lee un número por teclado y conviértelo a una cadena a la que concatenarás el valor de una constante con el valor "NUMERO". Muestra la cadena "NUMERO XX" siendo XX el número leído.
1         final String NUMERO="NUMERO";
2         int numero=0;
3         String cadena="";
4         
5         System.out.println("Introduce un número:");
6         numero = scanner.nextInt();
7         cadena = NUMERO.concat(" ").concat(String.valueOf(numero));
8         
9         System.out.printf("El nuevo nombre es:%s",cadena);

Comentarios

  • Como vimos en clase, en Java se pueden hacer tres tipos de comentario:
  • Comentario de línea: //
  • Comentario de bloque: /* Comentario de bloque. Pueden ir varias línea. La última línea debe acabar con */
  • Comentario javadoc: /** Como comentario de bloque. Pueden ir varias línea. La última línea debe acabar con */


  • La documentación es un aspecto muy importante a la cual no se le suele dar mucha importación, pero es fundamental para poder realizar un mantenimiento del software desarrollado.
  • Por eso, a partir de este punto, todos los ejercicios deben estar comentarios.

Comentarios de línea

  • Se pondrán dentro de los bloques de programación, y estarán asociados a instrucciones concretas, como pueden ser declaraciones de variables, como para aclarar instrucciones de código.
Por ejemplo:
1 double numero1=0d, numero2=0d;  // Números a leer
2 double sumaConRedondeo=0d;  // Guarda la suma de los números sin redondear. Redondeamos la suma
3 double sumaSinRedondeo=0d;  // Guarda la suma de los números ya redondeados. No redondeamos la suma


Otro ejemplo:
1 ......
2 
3 if ((cont%2==0) && (cont>10) && (cont<100)){   // Entra si es par entre 10 y 100
4 
5 
6 // Si hay una gran cantidad de instrucciones que hacen que el cierre de llave esté muy abajo, es recomendable poner un comentario al final de la llave indicando que bloque cierra
7 
8 
9 }  // Fin del if: Entra si es par entre 10 y 100


Al final de cada método se puede comentar el fin del mismo
 1 ........
 2 
 3 public static void hacerCalculo(){
 4 
 5 
 6 ...............
 7 
 8 
 9 
10 
11 
12 } // Fin del método hacerCalculo


  • En instrucciones 'obvias' no es necesario poner comentarios.
Por ejemplo:
1 int temp=0;
2 
3 temp++;


Comentarios de bloque

  • Comentarios que necesiten más de una línea.


Comentarios de Javadoc

Obligatorio: Es obligatorio poner los siguientes comentarios en todas las clases desarrolladas.

  • Pondremos un bloque de código al comienzo de cada clase indicando:
  • Nombre de la clase
  • Descripción general
  • Número de versión: asociado a la etiqueta @version
  • Nombre de autores: asociado a la etiqueta @author
  • Si estuviera relacionada con otra clase se puede indicar con la etiqueta @see


  • Pondremos un bloque de código al comienzo de cada constructor o método:
  • Nombre del constructor o método
  • Tipo de retorno (si el método devuelve un valor): asociado a la etiqueta @return
  • nombres y tipos de parámetros si los hay: asociado a la etiqueta @param
  • Descripción general
  • Descripción de parámetros (si los hay)
  • Descripción del valor que devuelve (si devuelve valor).


  • A nivel de 'variables' (atributos en la POO) veremos que también podemos comentarlas y su efecto en el editor NetBeans cuando hagamos uso de una clase.
  • Por ejemplo:
 1 /**
 2  * Clase: ConversionTipos
 3  * En esta clase están implementados todos los ejercicios relacionados con la conversión de tipos
 4  * @author Angel Fernández
 5  * @version: 04/10/2017/ v1.0
 6  */
 7 public class ConversionTipos {
 8 
 9     static Scanner scanner;
10     
11     /**
12      * Nombre: resolverEjercicio1
13      * Resuelve el ejercicio 1 de la lista de ejercicios de este bloque
14      * 
15      */
16     public static void resolverEjercicio1(){
17 
18 
19 
20 
21 
22 
23         
24     } // Fin del método resolverEjercicio1
25     
26     /**
27      * Método main
28      * Método principal que se va a ejecutar
29      * @param args: Array de String: Parámetros de entrada que podemos recibir cuando ejecutamos la clase
30      */
31     public static void main(String[] args) {
32 
33 
34 
35 
36         
37     }   // Fin del método main
38     
39 }   // Fin de la clase ConversionTipos

Ejercicios: Conversión de tipos

  • Documentar la clase y los métodos creados


  • Lee por teclado dos números decimales y muestra la suma de los dos de dos formas: Redondeando cada uno de ellos al entero más próximo y redondeando la suma al entero más próximo.


  • Lee tres números de tipo byte. Cada vez que leas un número, ve calculando la suma y guardando el resultado en un número entero. Muestra el resultado.


  • Lee por teclado una cadena con una serie de 5 números separados por un espacio.
Los números serán enteros.
Guarda esos números en cinco variables de tipo entero, calcula su media con decimales y muestra por pantalla utilizando un único printf la siguiente cadena: La media de num1+num2+num3+num4+num5 = resultado, siendo resultado un número en que se mostrarán 3 cifras decimales.


  • Lee una cadena de texto con el formato: Nombre:XXX siendo XXX un número entre -10 y 10. Guarda los datos en dos variables de tipo cadena y byte. Muestra la cadena: NOMBRE----XXX siendo nombre el nombre introducido en mayúsculas.
Si el número introducido está fuera del rango se mostrará el mensaje: El número introducido XXX se pasa YYY del rango posible (-10 / +10)


  • Introduce por teclado una cadena de texto con el formato: numero numero numero
Cada número representa una letra.
Guarda en una variable la cadena de texto que se corresponde con cada número.
Para hacer una prueba puedes utilizar los números 65 66 67 que representan las letras A B C. Puedes consultar la lista de caracteres ASCII en este enlace


  • Lee por teclado dos números de tipo long.
Convierte cada número a:
  • byte
  • short
  • int
Multiplica los dos números de cada tipo y muestra el resultado con el formato: Numero1=XXX y Numero2=YYY convertido a "byte" su multiplicación es igual a ZZZZZ


Solución Ejercicios: Conversión de tipos

  • Lee por teclado dos números decimales y muestra la suma de los dos de dos formas: Redondeando cada uno de ellos al entero más próximo y redondeando la suma al entero más próximo. Utiliza printf.
 1     /**
 2      * Nombre: resolverEjercicio1
 3      * Resuelve el ejercicio 1 de la lista de ejercicios de este bloque
 4      * Lee por teclado dos números decimales y muestra la suma de los dos de dos formas: Redondeando cada uno de ellos al entero más próximo y redondeando la suma al entero más próximo. Utiliza printf.
 5      */
 6     public static void resolverEjercicio1(){
 7         double numero1=0d, numero2=0d;  // Números a leer
 8         double sumaConRedondeo=0d;  // Guarda la suma de los números sin redondear. Redondeamos la suma
 9         double sumaSinRedondeo=0d;  // Guarda la suma de los números ya redondeados. No redondeamos la suma
10         
11         System.out.println("Introduce un número decimal separado por coma");
12         numero1 = scanner.nextDouble();
13         System.out.println("Introduce un número decimal separado por coma");
14         numero2 = scanner.nextDouble();
15         
16         sumaConRedondeo = Math.round(numero1+numero2);  // Conversión implícita de Long a Double
17         sumaSinRedondeo = Math.round(numero1) + Math.round(numero2);    // Conversión implícita de Long a Double
18         
19         System.out.printf("Redondeo de número1: %d%nRedondeo de número2:%d%n",Math.round(numero1),Math.round(numero2));
20         System.out.printf("Suma sin redondear:%.2f%n", sumaSinRedondeo);
21         System.out.printf("Número1: %.2f%nNúmero2:%.2f%n",numero1,numero2);
22         System.out.printf("Suma con redondeo:%.2f%n", sumaConRedondeo);
23         
24     } // Fin del método resolverEjercicio1
Líneas 8-9: La suma va a guardar número redondeados sin decimales, por lo tanto podríamos poner un long siempre que no nos pasemos de rango en la suma.
Línea 19: No podemos poner %f en el printf, ya que estamos redondeando los números y por tanto tendremos un entero.


  • Lee tres números de tipo byte. Cada vez que leas un número, ve calculando la suma y guardando el resultado en un número entero. Muestra el resultado.
 1      /**
 2      * Nombre: resolverEjercicio2
 3      * Resuelve el ejercicio 2 de la lista de ejercicios de este bloque
 4      * Lee tres números de tipo byte. Cada vez que leas un número, ve calculando la suma y guardando el resultado en un número entero. Muestra el resultado.
 5      */
 6     public static void resolverEjercicio2(){
 7         byte numero1=0,numero2=0,numero3=0;  // Número a leer del teclado.
 8         int suma=0;     // Guarda la suma de los números leídos.
 9         
10         System.out.println("Introduce un número:");
11         numero1 = scanner.nextByte();
12         suma = numero1;     // Conversión implícita
13         
14         System.out.println("Introduce un número:");
15         numero2 = scanner.nextByte();
16         suma += numero2;    // Conversión implícita
17 
18         System.out.println("Introduce un número:");
19         numero3 = scanner.nextByte();
20         suma += numero3;    // Conversión implícita
21 
22         System.out.printf("El resultado de la suma es:%d",suma);
23     }  // Fin del método resolverEjercicio2


  • Lee por teclado una cadena con una serie de 5 números separados por un espacio.
Los números serán enteros.
Guarda esos números en cinco variables de tipo entero, calcula su media con decimales y muestra por pantalla utilizando un único printf la siguiente cadena: La media de num1+num2+num3+num4+num5 = resultado, siendo resultado un número en que se mostrarán 3 cifras decimales.
Reflexiona: Vas a tener que hacer 'trozos' de cadena entre dos posiciones. En algún lugar tendrás que guardar esas posiciones intermedias => variables. Cuantas ? Sólo dos son necesarias. Piensa en ello y hazlo en papel primero. Fíjate lo que pasa con el último número.
 1      /**
 2      * Nombre: resolverEjercicio3
 3      * Resuelve el ejercicio 3 de la lista de ejercicios de este bloque
 4      * Lee por teclado una cadena con una serie de 5 números separados por un espacio. 
 5      * Los números serán enteros.
 6      * Guarda esos números en cinco variables de tipo entero, calcula su media y muestra por pantalla utilizando un único printf la siguiente cadena: La media de num1+num2+num3+num4+num5 = resultado, siendo resultado un número en que se mostrarán 3 cifras decimales.
 7      */
 8     public static void resolverEjercicio3(){
 9         int numero1=0,numero2=0,numero3=0,numero4,numero5;  // Los cinco números que van en la cadena
10         double media=0;     // La media de los números leídos.
11         String cadena="";   // Cadena de entrada por teclado
12         int posIni=0,posFinal=0;   // Variable auxiliar para guardar la posición de los números entre dos espacios en blanco.
13         
14         
15         System.out.println("Introduce la cadena con el formato:num1 num2 num3 num4 num5:");
16         cadena = scanner.nextLine();
17         
18         posFinal = cadena.indexOf(" ");
19         numero1 = Integer.parseInt(cadena.substring(posIni,posFinal));
20         
21         posIni = posFinal+1;
22         posFinal = cadena.indexOf(" ",posIni+1);
23         numero2 = Integer.parseInt(cadena.substring(posIni,posFinal));
24 
25         posIni = posFinal+1;
26         posFinal = cadena.indexOf(" ",posIni+1);
27         numero3 = Integer.parseInt(cadena.substring(posIni,posFinal));
28         
29         posIni = posFinal+1;
30         posFinal = cadena.indexOf(" ",posIni+1);
31         numero4 = Integer.parseInt(cadena.substring(posIni,posFinal));
32 
33         posIni = posFinal+1;
34         posFinal = cadena.length();
35         numero5 = Integer.parseInt(cadena.substring(posIni,posFinal));
36         
37         media = (numero1+numero2+numero3+numero4+numero5)/5d;   // Necesitamos que sea double uno de los dos operandos.
38         
39         System.out.printf("La media de %d+%d+%d+%d+%d=%,.2f",numero1,numero2,numero3,numero4,numero5,media);
40     }   // Fin del método resolverEjercicio3


  • Lee una cadena de texto con el formato: Nombre:XXX siendo XXX un número entre -10 y 10. Guarda los datos en dos variables de tipo cadena y byte. Si todo es correcto, muestra la cadena: NOMBRE----XXX siendo nombre el nombre introducido en mayúsculas.
Si el número introducido está fuera del rango se mostrará el mensaje: El número introducido XXX se pasa YYY del rango posible (-10 / +10)
 1      /**
 2      * Nombre: resolverEjercicio4
 3      * Resuelve el ejercicio 4 de la lista de ejercicios de este bloque
 4      *  Lee una cadena de texto con el formato: Nombre:XXX siendo XXX un número entre -10 y 10. Guarda los datos en dos variables de tipo cadena y byte. Muestra la cadena: NOMBRE----XXX siendo nombre el nombre introducido en mayúsculas.
 5      *  Si el número introducido está fuera del rango se mostrará el mensaje: El número introducido XXX se pasa YYY del rango posible (-10 / +10)
 6      */
 7     public static void resolverEjercicio4(){
 8         String cadena="";   // Cadena de entrada por teclado formato Nombre:XXXX
 9         byte numero=0;      // Número de la cadena
10         String nombre="";   // Nombre de la cadena
11         
12         
13         System.out.println("Introduce la cadena con el formato > Nombre:XXXX");
14         cadena = scanner.nextLine();
15         
16         nombre = cadena.substring(0,cadena.indexOf(":"));   // Fijarse como podems emplear una función dentro de otra. indexOf devuelve un número que es empleado en subString.
17         numero = Byte.parseByte(cadena.substring(cadena.indexOf(":")+1)); // Si no ponemos un número como segundo dato de la función indexOf busca hasta el final.
18         
19         if ((numero<-10) ||(numero>10)){
20             System.out.printf("El número introducido %d se pasa %d del rango posible (-10 / +10)",numero,Math.abs(numero)-10);
21         }
22         else{
23             System.out.printf("%s----%d",nombre.toUpperCase(),numero);
24         }
25         
26     }   // Fin del método resolverEjercicio3


  • Introduce por teclado una cadena de texto con el formato: numero numero numero
Cada número representa una letra.
Guarda en una variable la cadena de texto que se corresponde con cada número.
Muestra la cadena de texto.
Reflexiona: Vas a necesitar 'convertir' una cadena de texto a un char, pero esto no es posible con lo que sabemos hasta ahora. Lo que sabemos es que un char viene a ser como un número, y podemos asginarle un número que lo representará como una letra. ¿ Qué función podemos utilizar para convertir una cadena a un número ?
 1      /**
 2      * Nombre: resolverEjercicio5
 3      * Resuelve el ejercicio 5 de la lista de ejercicios de este bloque
 4      * Introduce por teclado una cadena de texto con el formato: numero numero numero     
 5      *  Cada número representa una letra.
 6      *  Guarda en una variable la cadena de texto que se corresponde con cada número.
 7      */
 8     public static void resolverEjercicio5(){
 9         String cadena="";   // Cadena de entrada por teclado formato numero numero numero
10         char letra1=0,letra2=0,letra3=0;      // Letras de la cadena
11         String texto="";   // Guarda las letras en forma de cadena
12         int pos1=0, pos2=0;         // Varaiable auxiliar para guardar la posición de los espacios en blanco
13         
14         
15         System.out.println("Introduce la cadena con el formato: numero numero numero");
16         cadena = scanner.nextLine();
17         
18         pos2 = cadena.indexOf(" ");
19         letra1 = (char)Byte.parseByte(cadena.substring(pos1,pos2));
20         texto += letra1;
21         pos1=pos2+1;
22         pos2 = cadena.indexOf(" ",pos1);
23         letra2 = (char)Byte.parseByte(cadena.substring(pos1,pos2));
24         texto += letra2;
25         letra3 = (char)Byte.parseByte(cadena.substring(pos2+1));
26         texto += letra3;
27         
28         System.out.printf("La palabra escrita es:%s",texto);
29         
30     }   // Fin del método resolverEjercicio3


Veremos mas adelante que disponemos de un tipo de dato (array) que sirve para guardar un conjunto de datos del mismo tipo. La clase String dispone de un método de nombre 'split' que permite 'dividir' una cadena en trozos, indicando la cadena que separa los trozos. Lo que devuelve dicho método es un array de cadenas, de la forma:
 1         System.out.println("Introduce la cadena con el formato: numero numero numero");
 2         cadena = scanner.nextLine();
 3         
 4         String[]trozos = cadena.split(" ");
 5         letra1 = (char)Byte.parseByte(trozos[0]);
 6         texto += letra1;
 7         letra2 = (char)Byte.parseByte(trozos[1]);
 8         texto += letra2;
 9         letra3 = (char)Byte.parseByte(trozos[2]);
10         texto += letra3;
11         
12         System.out.printf("La palabra escrita es:%s",texto);


  • Lee por teclado dos números de tipo long.
Convierte cada número a:
  • byte
  • short
  • int
Multiplica los dos números de cada tipo y muestra el resultado con el formato: Numero1=XXX y Numero2=YYY convertido a "byte" su multiplicación es igual a ZZZZZ
 1      /**
 2      * Nombre: resolverEjercicio6
 3      * Resuelve el ejercicio 6 de la lista de ejercicios de este bloque
 4      *  Lee por teclado dos números de tipo long.
 5      *  Convierte cada número a:
 6      *     byte
 7      *     short
 8      *      int
 9      * Multiplica los dos números de cada tipo y muestra el resultado con el formato: Numero1=XXX y Numero2=YYY convertido a "byte" su multiplicación es igual a ZZZZZ
10      */
11     public static void resolverEjercicio6(){
12       
13         long numero1=0,numero2=0;   // Números a leer por teclado
14         byte byte1=0,byte2=0;
15         short short1=0,short2=0;
16         int int1=0,int2=0;
17         
18         System.out.println("Introduce un número:");
19         numero1 = scanner.nextLong();
20         System.out.println("Introduce un número:");
21         numero2 = scanner.nextLong();
22         
23         byte1 = (byte)numero1;
24         byte2 = (byte)numero2;
25         
26         short1 = (short)numero1;
27         short2 = (short)numero2;
28         
29         int1 = (int)numero1;
30         int2 = (int)numero2;
31         
32         System.out.printf("Numero1=%d y Numero2=%d convertido al tipo \"byte\" su multiplicación es igual a %d%n", byte1,byte2,byte1*byte2);
33         System.out.printf("Numero1=%d y Numero2=%d convertido al tipo \"short\" su multiplicación es igual a %d%n", short1,short2,short1*short2);
34         System.out.printf("Numero1=%d y Numero2=%d convertido al tipo \"int\" su multiplicación es igual a %d%n", int1,int2,int1*int2);
35     }  // Fin del método resolverEjercicio6


Ejercicios UD2: Estructuras de selección y repetición. Excepciones

  • En este punto entraría:
  • Estructuras condicionales: if / switch.
  • Estructuras de repetición: while, do-while, for,for/in.
  • Estructuras de salto: break/continue.
  • Control de excepciones.


  • Nota: La estructura condicional 'if-else' ya la hemos trabajado en los ejercicios anteriores.
Utiliza printf cuando tengas que hacer uso de variables.

Ejercicios Estructuras condicionales

  • Introduce un número por teclado entre 1-10.
Crea un tipo enumerado que guarde los valores posibles para una nota: MUY DEFICIENTE, INSUFICIENTE, SUFICIENTE, BIEN, NOTABLE y SOBRESALIENTE.
Guarda en una variable del tipo anterior, el valor correspondiente a su valor numérico, siendo:
  • 1,2: MUY_DEFICIENTE
  • 3,4: INSUFICIENTE
  • 5: SUFICIENTE
  • 6: BIEN
  • 7,8: NOTABLE
  • 9,10: SOBRESALIENTE
Al final, saldrá un mensaje con el texto: "CON EL NÚMERO XXX HAS OBTENIDO LA NOTA:YYYYY"
Nota: Intenta hacer una versión de este programa utilizando las sentencias if/else.


  • Lee una palabra desde el teclado, teniendo que empezar por una vocal.
Obtén la primera letra de la misma, convertida a mayúscula.
En función de la letra inicial deberás formas una frase, sumando palabras a una cadena.
  • Si la letra es 'A', deberás añadir a la cadena la palabra 'AMOR' y las palabras asociadas a las letras E e I.
  • Si la letra es 'E' deberás añadir a la cadena la palabra ' ES ' y las palabras asociadas a la letra I.
  • Si la letra es 'I' deberás añadir a la cadena la palabra ' MARAVILLOSO '
  • En cualquier otro caso, la cadena guardará el texto ' NO ESTÁ BIEN'.
Al final deberá imprimirse una cadena con el texto: PALABRA_INICIAL = cadena


Solución Ejercicios Estructuras condicionales

  • Introduce un número por teclado entre 1-10.
Crea un tipo enumerado que guarde los valores posibles para una nota: MUY DEFICIENTE, INSUFICIENTE, SUFICIENTE, BIEN, NOTABLE y SOBRESALIENTE.
Guarda en una variable del tipo anterior, el valor correspondiente a su valor numérico, siendo:
  • 1,2: MUY_DEFICIENTE
  • 3,4: INSUFICIENTE
  • 5: SUFICIENTE
  • 6: BIEN
  • 7,8: NOTABLE
  • 9,10: SOBRESALIENTE
Al final, saldrá un mensaje con el texto: "CON EL NÚMERO XXX HAS OBTENIDO LA NOTA:YYYYY"


  • Lee una palabra desde el teclado, teniendo que empezar por una vocal.
Obtén la primera letra de la misma, convertida a mayúscula.
En función de la letra inicial deberás formas una frase, sumando palabras a una cadena.
  • Si la letra es 'A', deberás añadir a la cadena la palabra 'AMOR' y las palabras asociadas a las letras E e I.
  • Si la letra es 'E' deberás añadir a la cadena la palabra ' ES ' y las palabras asociadas a la letra I.
  • Si la letra es 'I' deberás añadir a la cadena la palabra ' MARAVILLOSO '
  • En cualquier otro caso, la cadena guardará el texto ' NO ESTÁ BIEN'.
Al final deberá imprimirse una cadena con el texto: PALABRA_INICIAL = cadena









Página creada por Angel D. Fernández González