Diferencia entre revisiones de «Ejercicios programación Java»
Ir a la navegación
Ir a la búsqueda
| Línea 61: | Línea 61: | ||
:* Estructura de un programa en Java. | :* Estructura de un programa en Java. | ||
:* Variables. | :* Variables. | ||
| − | ::* Dentro de este punto entrarían las variables de tipo double / float. En [http://www6.uniovi.es/~antonio/uned/ieee754/ejemplos.html este enlace] disponéis de varios ejemplos de como representa un ordenador internamente un número real. | + | ::* Dentro de este punto entrarían las variables de tipo double / float. |
| + | ::: En [http://www6.uniovi.es/~antonio/uned/ieee754/ejemplos.html este enlace] disponéis de varios ejemplos de como representa un ordenador internamente un número real. | ||
:* Constantes. | :* Constantes. | ||
:* Literales. | :* Literales. | ||
Revisión del 07:52 26 sep 2017
Sumario
- 1 Fuentes
- 2 Recuerda
- 3 Ejercicios UD0: Uso de NetBeans
- 4 Ejercicios UD1: Identificación de los elementos de un programa informático
- 4.1 Ejercicio 1: Validez de identificadores
- 4.2 Ejercicio 2: Tipos de variables
- 4.3 Ejercicio 3: Definir variables y tipos
- 4.4 Ejercicio 4: Crear variables, tipos e incializarlas
- 4.5 Ejercicio 5: Tipos de datos enumerados
- 4.6 Ejercicio 6: Literales y caracteres escape
- 4.7 Entrada de datos
- 4.8 Ejercicios: Operadores y expresiones
- 4.9 Ejercicios: Conversión de tipos
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:
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
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.
- Os indico alguna de las razones por las que no sería necesario que teléfono y código postal sean número:
- 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 echo, 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
Ejercicios: Operadores aritméticos
- 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 = 20/10;
- int r = 10/2;
- float r = 10.22/2;
- float r = 10.22f/2;
Solución Ejercicios: Operadores aritméticos
- 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.
Ejercicios: Conversión de tipos
Página creada por Angel D. Fernández González