Diferencia entre revisiones de «Ejercicios programación Java»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 1138: Línea 1138:
 
         }
 
         }
 
</syntaxhighlight>  
 
</syntaxhighlight>  
 +
 +
:<u>Atención</u> 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)/4'''d'''
  
 
<u>Nota:</u> Fijarse como las instrucciones asociadas a las condiciones que deben cumplir cada uno de los números se repiten.
 
<u>Nota:</u> Fijarse como las instrucciones asociadas a las condiciones que deben cumplir cada uno de los números se repiten.

Revisión del 18:33 3 oct 2017

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.


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<1 || 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)/4;
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);

Ejercicios: Conversión de tipos

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