Diferencia entre revisiones de «Ejercicios programación Java»

De MediaWiki
Ir a la navegación Ir a la búsqueda
 
(No se muestran 34 ediciones intermedias del mismo usuario)
Línea 69: Línea 69:
 
:* '''Alt + Enter''': Se usa sobre el texto subrayado para ver la sugerencia que nos hace el IDE cuando hay algún error de sintaxis.
 
:* '''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.
 
:* '''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 [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.
 
:* Literales.
 
:* Operadores.
 
:* Conversión de tipos.
 
:* Comentarios.
 
 
 
===Ejercicio 1: Validez de identificadores===
 
 
: Obtenidos en parte desde [https://www.jmramirez.pro/codigofuente/013-identificadores-variables-y-constantes/ 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
 
:<u>Nota:</u> 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:
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        double temp = 0.2d;
 
        temp += 0.1f;
 
        temp += 0.1f;
 
        temp += 0.1f;
 
        System.out.println("Dato:" + temp);
 
 
</syntaxhighlight>
 
 
: Produce la siguiente salida: Dato:0.50000000'''44703483'''
 
 
: ¿ 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: '''0'''1
 
:: 3 / 2 = 1, resto 1  ==> Número en binario: '''1'''01
 
:: Resultado de la última operación 1 ==> Número en binario: '''1'''101
 
 
[[Image:Ejerc_prog_01.jpg|center|400px]]
 
<center><small>Imagen obtenida de [http://recursostic.educacion.es/secundaria/edad/4esotecnologia/quincena5/4q2_contenidos_2c.htm este enlace]</small></center>
 
 
: 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.
 
 
[[Image:Ejerc_prog_02.jpg|center|400px]]
 
<center><small>Imagen obtenida de [https://en.wikipedia.org/wiki/Binary_number#Counting_in_binary este enlace]</small></center>
 
 
: Como vemos en la imagen el número real 1/3 no tiene una representación exacta...
 
 
 
* <u>Nota:</u> 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 [https://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html 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:
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
if (Math.abs(float1 - float2) < 1e-5){
 
 
}
 
</syntaxhighlight>
 
 
====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
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
class Computador{
 
 
    final int MAYOR_EDAD=100;
 
    int capacidade;
 
    String marca;
 
 
 
    void calcularPotencia(){
 
        float indice=0;
 
     
 
     
 
    }
 
    String obtenerDescripcion(){
 
        String temporal="";
 
        final String CADENA_FIJA="TE ENCUENTRAS EN:";
 
 
     
 
        return temporal;
 
    }
 
 
 
}
 
</syntaxhighlight>
 
 
 
=====Solución Ejercicio 2=====
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="3,5,6,9,12,13" >
 
class Computador{
 
 
    final int MAYOR_EDAD=100; => primitivo, constante, miembro
 
 
 
    int capacidade; => primitivo, variable, miembro
 
    String marca; => referencia, variable, miembro
 
 
 
    void calcularPotencia(){
 
        float indice=0; => primitivo, variable, local
 
    }
 
    String obtenerDescripcion(){
 
        String temporal=""; => referencia, variable, local
 
        final String CADENA_FIJA="TE ENCUENTRAS EN:"; => referencia, constante, local
 
 
     
 
        return temporal;
 
    }
 
 
 
}
 
</syntaxhighlight>
 
 
===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:'''
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
String nombre;
 
String apellidos;
 
String fechaNac;  // Si queremos guardar la fecha de nacimiento, Java dispone de una clase Date.
 
String direccion;
 
String telefono;  // ¿ No debería ser un número ?
 
String codigoPostal; // ¿ No debería ser un número ?
 
 
</syntaxhighlight>
 
 
:: 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:'''
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
float radio;
 
float diametro;
 
float longitud;
 
float area;
 
final float PI;
 
</syntaxhighlight>
 
 
:: 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:'''
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
float media;
 
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.
 
</syntaxhighlight>
 
:: 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:'''
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
String marca;
 
String matricula;
 
int km;
 
</syntaxhighlight>
 
 
 
:* Se quiere crear un método que calcule el importe total del precio de un producto con su iva.
 
:* '''Solución:'''
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
final float IVA;
 
float precioFinal;
 
</syntaxhighlight>
 
 
===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.
 
 
: <u>Nota:</u> 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 [https://www.cs.colostate.edu/~cs160/.Spring16/resources/Java_printf_method_quick_reference.pdf en este enlace].
 
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
    public static void main(String[] args) {
 
        // TODO code application logic here
 
 
        float peso;
 
        byte edad=12;  // Si tenemos dudas de si 127 va a ser una edad alcanzable, mejor poner un short
 
        byte tempExterior=-45;
 
        byte tempInterior=13;
 
        double radioUniverso=13e97;
 
        float gastos=1443.14f;
 
        int poblacionChina=1325254589;  // Si queremos tener un margen mayor pondríamos un long
 
        char sexo='H';  // En programación, a los datos que pueden guardar solamente dos valores se les asigna un tipo boolean
 
        // float es una palabra reservada y no se puede utilizar como nombre de variable;
 
        float pesoTomate = 0.23f;
 
        char letraNif;
 
        String nif="11111111A";
 
 
        // Al ser variables locales (están definidas dentro del metodo main) las no inicializadas no tienen valor y por tanto no pueden visualizarse.
 
       
 
        System.out.println("Edad:" + edad);
 
        System.out.printf("Edad:%d años %n", edad);
 
 
        System.out.println("Temperatura exterior:" + tempExterior);
 
        System.out.printf("Temperatura exterior:%d ºC %n", tempExterior);
 
 
        System.out.println("Temperatura interior:" + tempInterior);
 
        System.out.printf("Temperatura interior:%d ºC %n", tempInterior);
 
       
 
        System.out.println("Radio Universo:" + radioUniverso);
 
        System.out.printf("Radio Universo:%,.2f %n", radioUniverso);  // Muestra la coma separando los miles y dos dígitos decimales
 
 
        System.out.println("Gastos:" + gastos);
 
        System.out.printf("Gastos: %,.2f Euros %n", gastos);
 
       
 
        System.out.println("Población en China:" + poblacionChina);
 
        System.out.printf("Población en China: %,d personas. %n", poblacionChina);
 
 
        System.out.println("Sexo:" + sexo);
 
        System.out.printf("Sexo: %C %n", sexo);  // C en maíscula pasa a letra a maiúscula
 
 
        System.out.println("Peso del tomate:" + pesoTomate);
 
        System.out.printf("Peso del tomate: %.2f Kilogramos %n" , pesoTomate);
 
 
        System.out.println("NIF:" + nif);
 
        System.out.printf("NIF:%s%n" , nif);
 
       
 
    }
 
 
</syntaxhighlight>
 
 
===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====
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
public class OlaMundo {
 
 
  enum Dias {Lunes,Marte,Miercoles,Jueves,Viernes,Sabado,Domingo};
 
  enum EtapasHumano {BEBE,NIÑO,ADOSLESCENTE,ADULTO,ANCIANO};
 
    /**
 
    * @param args the command line arguments
 
    */
 
    public static void main(String[] args) {
 
        // TODO code application logic here
 
 
        Dias dia = Dias.Jueves;
 
        EtapasHumano misEtapas = EtapasHumano.ADOSLESCENTE;
 
       
 
    }
 
   
 
}
 
</syntaxhighlight>
 
 
===Ejercicio 6: Literales y caracteres escape===
 
 
* <u>'''Recordar:'''</u> 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.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        char letraB='B';
 
        char letraBEnDecimal=66;
 
        char letraBEnOctal=0102;  // Empieza por 0 (cero)
 
        char letraBEnHex=0x42;              // Empieza por 0x (cero x)
 
        System.out.println(letraB);
 
        System.out.println(letraBEnDecimal);
 
        System.out.println(letraBEnOctal);
 
        System.out.println(letraBEnHex);
 
 
</syntaxhighlight>
 
 
 
* Asigna a una variable de tipo booleano un valor.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
boolean basico = false;
 
</syntaxhighlight>
 
 
* Asigna a una variable de tipo entero el número 100 en decimal y en hexadecimal.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        int valor;
 
       
 
        valor = 100;
 
        System.out.println(valor);
 
        valor = 0x64;
 
        System.out.println(valor);
 
</syntaxhighlight>
 
 
* Asigna el valor 32324123456 a una constante de tipo long.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
final long C_NUMERO=32324123456L;
 
</syntaxhighlight>
 
 
* Expresa de tres formas diferentes el valor 3.1416.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        double valorDecimal = 3.1416;
 
        System.out.println(valorDecimal);
 
        valorDecimal = 31416e-4;
 
        System.out.println(valorDecimal);
 
        valorDecimal = 0.31416e1f;
 
        System.out.println(valorDecimal);
 
 
</syntaxhighlight>
 
 
* Muestra la siguiente cadena: El "otro día" vino a verme.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        System.out.println("El \"otro día\" vino a verme");
 
</syntaxhighlight>
 
 
 
* Muestra utilizando una única instrucción println dos frases en líneas diferentes.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
System.out.println("Vi a Juan el otro día.\nEspero que esté bien...");
 
</syntaxhighlight>
 
 
* 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".
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        String nome = "Angel Fernandez";
 
        int edad=32;
 
       
 
        System.out.println("Bienvenido '" + nome + "'.\n" + "Tienes " + edad + " anos");
 
</syntaxhighlight>
 
 
 
===Entrada de datos===
 
 
====Teoría====
 
 
* Información obtenida de:
 
:* [http://chuwiki.chuidiang.org/index.php?title=Lectura_de_teclado_en_java Enlace 1].
 
:* [http://puntocomnoesunlenguaje.blogspot.com.es/2012/08/java-scanner.html Enlace 2].
 
 
* 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:
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
// Lectura de un byte
 
int aByte = System.in.read();
 
 
// Lectura de hasta 50 bytes
 
byte [] buffer = new byte[50];
 
System.in.read(buffer);
 
 
</syntaxhighlight>
 
 
:: 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:
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
InputStreamReader isr = new InputStreamReader(System.in);
 
BufferedReader br = new BufferedReader (isr);
 
</syntaxhighlight>
 
 
: Con esto, podemos leer líneas completas usando el BufferedReader br. Así, por ejemplo, si escribimos una A, con
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
String cadena = br.readLine();
 
</syntaxhighlight>
 
 
: 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
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
int numero = Integer.parseInt (br.readLine());
 
</syntaxhighlight>
 
 
: 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:
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="3" >
 
package paquete;
 
 
import java.util.Scanner;
 
 
public class NombreClase {
 
 
 
}
 
</syntaxhighlight>
 
 
 
* Después debemos crear un objeto de la clase Scanner, enviando como parámetro el objeto in de la clase System:
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="5" >
 
public class NombreClase {
 
 
    public static void main(String[] args) {
 
       
 
        Scanner sc = new Scanner(System.in);
 
    }
 
 
}
 
 
</syntaxhighlight>
 
 
* Empezamos a leer del teclado. Deberemos llamar a los métodos '''nextXXXXX''' siendo XXXXX el tipo de dato que queramos leer.
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="7-8" >
 
public class NombreClase {
 
 
    public static void main(String[] args) {
 
       
 
        Scanner sc = new Scanner(System.in);
 
 
        int numero = sc.nextInt();  // Lee un entero
 
        String cadena = sc.nextLine(); // Lee una cadena
 
    }
 
 
}
 
 
</syntaxhighlight>
 
 
 
<u>Nota:</u> 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.
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
package proyectojava;
 
 
import java.util.Scanner;
 
 
/**
 
*
 
* @author clase
 
*/
 
public class ProyectoJava {
 
 
    /**
 
    * @param args the command line arguments
 
    */
 
    public static void main(String[] args) {
 
        // TODO code application logic here
 
        String nombre;
 
        byte edad;
 
        int usuarios;
 
        boolean mayor;
 
        double resultado;
 
       
 
        String cadena;
 
       
 
        Scanner sc = new Scanner(System.in);
 
        System.out.println("Introduce un nombre:");
 
        nombre = sc.nextLine();
 
        System.out.println("Introduce una edad (menor que 128):");
 
        edad = sc.nextByte();
 
        System.out.println("Introduce un número de usuarios:");
 
        usuarios = sc.nextInt();
 
        System.out.println("Indica (true/false) si eres mayor de edad:");
 
        mayor = sc.nextBoolean();
 
        System.out.println("Indica un resultado con decimales:");
 
        resultado = sc.nextDouble();
 
 
        cadena = nombre + "\n" + edad + "\n" + usuarios + "\n" + mayor + "\n" + resultado;
 
       
 
        System.out.println(cadena);
 
    }
 
   
 
}
 
 
</syntaxhighlight>
 
 
 
 
===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:
 
::<syntaxhighlight lang="java" line enclose="div" highlight="1,4" >
 
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
 
 
    // Aquí van las instrucciones que queramos que se ejecuten cuando la condición del if se cumple
 
}
 
</syntaxhighlight>
 
: 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:
 
::<syntaxhighlight lang="java" line enclose="div" highlight="5-9" >
 
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
 
 
 
}
 
else{
 
 
    // Aquí van las instrucciones que queramos que se ejecuten cuando la condición del if NO se cumple
 
 
}
 
</syntaxhighlight>
 
 
 
* 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
 
 
 
* <u>Nota:</u> 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====
 
 
<u>Nota:</u> En Java podemos hacer uso de la [https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html 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.
 
:<u>Nota:</u> Recuerda que ya vimos [http://wiki.cifprodolfoucha.es/index.php?title=Ejercicios_programaci%C3%B3n_Java#Entrada_de_datos 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++);
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
int temp=0;  // Asigna a la variable 'temp' el valor 0
 
temp++;  // Aumenta el valor de temp y pasa a valer 1
 
++temp;  // Aumenta el valor de temp y pasa a valer 2
 
System.out.println(++temp);  // Primero suma y después muestra su valor, por lo tanto muestra 3
 
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
 
System.out.println(valor++);  // Imprime la variable valor (que vale 3) y después aumenta su valor en 1 (pasará a valer 4).
 
// temp y valor valen 4 al llegar a este punto
 
</syntaxhighlight>
 
 
 
* 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.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        int valor = 0;
 
 
        System.out.println("Introduce un número entero:");
 
        valor = scanner.nextInt();
 
       
 
        if (valor%5==0){
 
            System.out.println("El número " + valor + " es múltiplo de 5.\nEl cociente es " + valor/5);
 
            System.out.printf("El número %d es múltiplo de 5.\nEl cociente es %d", valor, valor/5);
 
        }
 
</syntaxhighlight>
 
 
 
* 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.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="9,14" >
 
 
        int valor1=0, valor2=0;
 
 
        System.out.println("Introduce un número entero:");
 
        valor1 = scanner.nextInt();
 
        System.out.println("Introduce un número entero:");
 
        valor2 = scanner.nextInt();
 
       
 
        valor2 += valor1;
 
       
 
        System.out.println("Introduce un número entero:");
 
        int valor3 = scanner.nextInt();
 
       
 
        valor2 -= valor3;
 
       
 
        System.out.println("El resultado es " + valor2);
 
        System.out.printf("El resultado es %d", valor2);
 
 
</syntaxhighlight>
 
 
 
* 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.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        final double PI = 3.14159;  // Se puede usar la constante definida en la las Math => Math.PI
 
        double areaCircunf=0d;      // Local => Siempre la inicializamos
 
        double radio = 0d;
 
       
 
        System.out.println("Introduce el radio:");
 
        radio = scanner.nextDouble();
 
       
 
        System.out.println("El resultado es " + radio);
 
        System.out.printf("El resultado es %.2f", radio);
 
</syntaxhighlight>
 
 
 
* 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.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        int valor1=0;
 
       
 
        System.out.println("Introduce un número entero:");
 
        valor1 = scanner.nextInt();
 
 
        valor1 = (valor1<0) ? 1 : valor1;
 
        valor1 = (valor1>500) ? 500 : valor1;
 
       
 
        System.out.println("El resultado es " + valor1);
 
        System.out.printf("El resultado es %d", valor1);
 
</syntaxhighlight>
 
 
 
* Lee dos números por teclado y determina cual de ellos es mayor o igual.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        int valor1=0, valor2=0;
 
       
 
        System.out.println("Introduce un número entero:");
 
        valor1 = scanner.nextInt();
 
        System.out.println("Introduce un número entero:");
 
        valor2 = scanner.nextInt();
 
 
        if (valor1 >= valor2){
 
            System.out.println("El número " + valor1 + " es mayor o igual que " + valor2);
 
            System.out.printf("El número %d es mayor o igual que %d", valor1, valor2);
 
        }
 
        else{
 
            System.out.println("El número " + valor2 + " es mayor que " + valor1);
 
            System.out.printf("El número %d es mayor o igual que %d", valor2, valor1);
 
        }
 
</syntaxhighlight>
 
 
 
 
* Lee dos números por teclado y muestra un mensaje si tienen valores diferentes.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        int valor1=0, valor2=0;
 
       
 
        System.out.println("Introduce un número entero:");
 
        valor1 = scanner.nextInt();
 
        System.out.println("Introduce un número entero:");
 
        valor2 = scanner.nextInt();
 
 
        if (valor1!=valor2){
 
            System.out.println("El número " + valor1 + " es diferente a " + valor2);
 
            System.out.printf("El número %d es diferente a %d", valor1, valor2);
 
        }
 
        else{
 
            System.out.println("El número " + valor1 + " es igual a " + valor2);
 
            System.out.printf("El número %d es igual a %d", valor1, valor2);
 
        }
 
</syntaxhighlight>
 
 
 
 
* 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
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        int valor1=0, valor2=0, valor3=0;
 
       
 
        System.out.println("Introduce un número entero:");
 
        valor1 = scanner.nextInt();
 
        System.out.println("Introduce un número entero:");
 
        valor2 = scanner.nextInt();
 
        System.out.println("Introduce un número entero:");
 
        valor3 = scanner.nextInt();
 
 
        if (valor1==valor2) {
 
            if (valor2==valor3){
 
                System.out.println("El número " + valor1 + " es igual a " + valor2 + " e igual a "  + valor3);
 
                System.out.printf("El número %d es igual a %d e igual a %d", valor1, valor2, valor3);
 
            }
 
        }
 
        else {
 
            if (valor1 > valor2){
 
                if (valor1 > valor3) {
 
                    System.out.println("El número " + valor1 + " es mayor que " + valor2 + " y que "  + valor3);
 
                    System.out.printf("El número %d es mayor que %d y que %d", valor1, valor2, valor3);
 
                }
 
                else {
 
                    System.out.println("El número " + valor3 + " es mayor que " + valor1 + " y que "  + valor2);
 
                    System.out.printf("El número %d es mayor que %d y que %d", valor3, valor1, valor2);
 
                }
 
            }
 
            else{
 
                if (valor2 > valor3) {
 
                    System.out.println("El número " + valor2 + " es mayor que " + valor1 + " y que "  + valor3);
 
                    System.out.printf("El número %d es mayor que %d y que %d", valor2, valor1, valor3);
 
                }
 
                else{
 
                    System.out.println("El número " + valor3 + " es mayor que " + valor1 + " y que "  + valor2);
 
                    System.out.printf("El número %d es mayor que %d y que %d", valor3, valor1, valor2);
 
                }
 
            }
 
        }
 
 
</syntaxhighlight>
 
 
 
: Otra forma de hacerlo es haciendo uso de una variable auxiliar que vaya guardando el mayor valor:
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        int valor1=0, valor2=0, valor3=0;
 
        int auxiliar = 0;
 
       
 
        System.out.println("Introduce un número entero:");
 
        valor1 = scanner.nextInt();
 
        System.out.println("Introduce un número entero:");
 
        valor2 = scanner.nextInt();
 
        System.out.println("Introduce un número entero:");
 
        valor3 = scanner.nextInt();
 
 
        if (valor1==valor2) {
 
            if (valor2==valor3){
 
                System.out.println("El número " + valor1 + " es igual a " + valor2 + " e igual a "  + valor3);
 
                System.out.printf("El número %d es igual a %d e igual a %d", valor1, valor2, valor3);
 
            }
 
        }
 
        else {
 
            auxiliar = valor1;
 
            if (auxiliar < valor2){
 
                auxiliar = valor2;
 
            }
 
            if (auxiliar < valor3){
 
                auxiliar = valor3;
 
            }
 
           
 
            System.out.println("El número mayor es " + auxiliar);
 
        }
 
</syntaxhighlight>
 
 
 
 
* 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)
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        final float MI_VALOR = 3.141f;
 
       
 
        float decimal1 = 0f;
 
     
 
        System.out.println("Introduce un número decimal:");
 
        decimal1 = scanner.nextFloat();
 
       
 
        if (Math.abs(decimal1-MI_VALOR) < 1e-3){  // Solo mira hasta la tercera coma
 
            System.out.println("El número " + decimal1 + " es igual a " + MI_VALOR);
 
            System.out.printf("El número %.10f es igual a %.10f", decimal1, MI_VALOR);
 
        }       
 
        else{
 
            System.out.printf("El número %.10f NO es igual a %.10f", decimal1, MI_VALOR);
 
        }
 
</syntaxhighlight>
 
 
: Un ejemplo de uso:
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
Introduce un número decimal:
 
10,141
 
El número 10,1409997940 NO es igual a 3,1410000324
 
</syntaxhighlight>
 
 
 
* 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'
 
::<syntaxhighlight lang="java" line enclose="div" highlight="13-15" >
 
        int valor1=0, valor2=0;
 
        int auxiliar=0;
 
       
 
        System.out.println("Introduce un número entero:");
 
        valor1 = scanner.nextInt();
 
        System.out.println("Introduce un número entero:");
 
        valor2 = scanner.nextInt();
 
 
        System.out.println("El número 1 tiene valor " + valor1);
 
        System.out.println("El número 2 tiene valor " + valor2);
 
        System.out.println("Intercambiamos sus valores");
 
       
 
        auxiliar = valor1;
 
        valor1 = valor2;
 
        valor2 = auxiliar;
 
       
 
        System.out.println("Ahora el número 1 tiene valor " + valor1);
 
        System.out.println("Ahora el número 2 tiene valor " + valor2);
 
 
</syntaxhighlight>
 
 
====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=====
 
 
<u>Nota:</u> 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 (!))
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        int numero=0;
 
       
 
        numero = scanner.nextInt();
 
        if (!(numero>10)){
 
            System.out.printf("El número %d no es mayor que diez",numero);
 
        }
 
</syntaxhighlight>
 
 
 
* 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.
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        int numero1=0;
 
        int numero2=0;
 
       
 
        System.out.println("Primer número:");
 
        numero1 = scanner.nextInt();
 
        System.out.println("Segundo número:");
 
        numero2 = scanner.nextInt();
 
       
 
        // Fijarse que hacemos uso del || y de esta forma si la primera cndición no se cumple, ya no mira la segunda
 
        if ((numero1==numero2) ||(numero1%2==0 && numero1>0)){
 
            System.out.printf("\"Feliciades\"%nEl número1 es %d y el numero2 es %d%n",numero1,numero2);
 
        }
 
        // Fijarse que no va en un else ya que el enunciado no indica que sean excluyentes
 
        if ((numero1+numero2)%2>0 && (numero1>0 & numero2>0)){
 
            System.out.printf("\"La próxima vez será\"%nEl número1 es %d y el numero2 es %d%n",numero1,numero2);
 
        }
 
 
</syntaxhighlight>
 
 
 
* 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.
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="31" >
 
        // Fijarse que con byte llega (son notas sin decimales) y se pueden declarar en una única línea
 
        byte nota1=0, nota2=0, nota3=0, nota4=0;
 
        double media=0f;  // Declaramos todas las variables en el mismo sitio.
 
        String mensaje=""; // Cadena auxiliar
 
 
        System.out.println("Primera nota:");
 
        nota1 = scanner.nextByte();
 
        if (nota1<1 || nota1>10){
 
            mensaje="La nota1 no cumple los criterios.\n";
 
        }
 
        System.out.println("Segunda nota:");
 
        nota2 = scanner.nextByte();
 
        if (nota2<0 || nota2>10){
 
            mensaje+="La nota2 no cumple los criterios.\n"; // Concatenamos
 
        }
 
        System.out.println("Tercera nota:");
 
        nota3 = scanner.nextByte();
 
        if (nota3<0 || nota3>10){
 
            mensaje+="La nota3 no cumple los criterios.\n"; // Concatenamos
 
        }
 
        System.out.println("Cuarta nota:");
 
        nota4 = scanner.nextByte();
 
        if (nota4<0 || nota4>10){
 
            mensaje+="La nota4 no cumple los criterios.\n"; // Concatenamos
 
        }
 
       
 
        if (mensaje.length()>0){
 
            System.out.printf("%s",mensaje);
 
        }
 
        else{
 
            media = (nota1+nota2+nota3+nota4)/4;
 
            System.out.printf("Los datos son:%d-%d-%d-%d y el resultado es:%.2f",nota1,nota2,nota3,nota4,media);
 
        }
 
</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.
 
: 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.
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        int numero1=0, numero2=0, numero3=0, numero4=0, numero5=0;
 
        int pares=0,impares=0;
 
 
        System.out.println("Primer número:");
 
        numero1 = scanner.nextInt();
 
        if (numero1%2==0){
 
            pares++;
 
        }
 
        else{
 
            impares++;
 
        }
 
        System.out.println("Segundo número:");
 
        numero2 = scanner.nextInt();
 
        if (numero2%2==0){
 
            pares++;
 
        }
 
        else{
 
            impares++;
 
        }
 
        System.out.println("Tercer número:");
 
        numero3 = scanner.nextInt();
 
        if (numero3%2==0){
 
            pares++;
 
        }
 
        else{
 
            impares++;
 
        }
 
        System.out.println("Cuarto número:");
 
        numero4 = scanner.nextInt();
 
        if (numero4%2==0){
 
            pares++;
 
        }
 
        else{
 
            impares++;
 
        }
 
        System.out.println("Quinto número:");
 
        numero5 = scanner.nextInt();
 
        if (numero5%2==0){
 
            pares++;
 
        }
 
        else{
 
            impares++;
 
        }
 
       
 
        if (pares>impares && ((pares>=2) & (pares<=5))){
 
            System.out.println("FELICIDADES");
 
        }
 
        else{  // Ahora lleva else ya que la condición es la contraria
 
            pares += impares;
 
            System.out.println("PARES:" + pares);
 
            pares = pares << 1;
 
           
 
            System.out.printf("Resultado:%d",pares);
 
        }
 
</syntaxhighlight>
 
 
 
* Lee por teclado un número y comprueba si el bit 7 está activo (vale 1). Utiliza un operador de bits.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        int numero;
 
       
 
        System.out.println("Primer número:");
 
        numero = scanner.nextInt();
 
 
        if ((numero & 128)==128){  // El séptimo bit tiene el valor 128
 
            System.out.println("El bit 7 está activo");
 
        }
 
</syntaxhighlight>
 
 
 
* 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'''.
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="7" >
 
        int numero1=1,numero2=0;
 
       
 
        System.out.println("Primer número:");
 
        numero1 = scanner.nextInt();
 
        System.out.println("Segundo número:");
 
        numero2 = scanner.nextInt();
 
 
        if (numero1>5 ^ numero2>5){
 
            System.out.println("BIEN");
 
        }
 
        else{
 
            System.out.println("REGURAL");
 
        }
 
</syntaxhighlight>
 
 
====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 [https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(int) 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.
 
 
: <u>Nota:</u> 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.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        String cadena="";
 
        int numero=0;
 
       
 
        System.out.println("Introduce cadena:");
 
        cadena = scanner.nextLine();
 
       
 
        if (cadena.equals("Luis") || cadena.equals("Pedro")){
 
            System.out.println("Introduce un número:");
 
            numero = scanner.nextInt();
 
            if (!(numero%2==0)){    // Valdría numero%2!=0
 
                numero += 5;
 
            }
 
            else{
 
                numero += 10;
 
            }
 
        }
 
        else{
 
            System.out.printf("El nombre introducido es %s%n",cadena);
 
        }
 
        System.out.printf("El número tiene de valor %d%n",numero);
 
</syntaxhighlight>
 
 
 
* 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.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        String cadena1="";
 
        String cadena2="";
 
       
 
        System.out.println("Introduce una cadena:");
 
        cadena1 = scanner.nextLine();
 
       
 
        if(cadena1.length()<20){
 
            System.out.println("Introduce otra cadena:");
 
            cadena2 = scanner.nextLine();
 
            cadena1 = cadena1.concat("-").concat(cadena2);
 
        }
 
 
        System.out.printf("La cadena final es:%s",cadena1);
 
</syntaxhighlight>
 
 
 
* 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.
 
 
: <u>Nota:</u> 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.
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        String cadena="";
 
        String nombre="", apellido1="",apellido2="";
 
        String nombreCompleto="";  // Donde guardaremos el nombre con el nuevo formato
 
        int posBranco=0, posComa=0;
 
       
 
        System.out.println("Introduce un nombre con el formato apellido1 apellido2,nombre:");
 
        cadena = scanner.nextLine();
 
       
 
        posBranco = cadena.indexOf(" "); // Buscamos el primer espacio en blanco. Si no pasamos la posición busca desde el principio.
 
        posComa = cadena.indexOf(",",posBranco-1);  // Podemos buscar a partir del espacio
 
       
 
        apellido1 = cadena.substring(0,posBranco);
 
        apellido2 = cadena.substring(posBranco+1,posComa);
 
        nombre = cadena.substring(posComa+1);  // Si no ponemos segundo número copia hasta el final
 
 
        System.out.printf("Apellido1:%s - longitud:%d%n",apellido1,apellido1.length());
 
        System.out.printf("Apellido2:%s - longitud:%d%n",apellido2,apellido2.length());
 
        System.out.printf("Nombre:%s - longitud:%d%n",nombre,nombre.length());
 
 
        nombreCompleto = nombre.concat(" ").concat(apellido1).concat(" ").concat(apellido2);
 
        System.out.printf("El nuevo nombre es:%s",nombreCompleto);
 
 
</syntaxhighlight>
 
 
 
* 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.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        String nombre="";
 
       
 
        System.out.println("Introduce un nombre:");
 
        nombre = scanner.nextLine();
 
 
        nombre = nombre.toUpperCase().concat(nombre.toLowerCase());
 
       
 
        System.out.printf("El nuevo nombre es:%s",nombre);
 
 
</syntaxhighlight>
 
 
 
* 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.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
        final String NUMERO="NUMERO";
 
        int numero=0;
 
        String cadena="";
 
       
 
        System.out.println("Introduce un número:");
 
        numero = scanner.nextInt();
 
        cadena = NUMERO.concat(" ").concat(String.valueOf(numero));
 
       
 
        System.out.printf("El nuevo nombre es:%s",cadena);
 
 
</syntaxhighlight>
 
 
===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:
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
double numero1=0d, numero2=0d;  // Números a leer
 
double sumaConRedondeo=0d;  // Guarda la suma de los números sin redondear. Redondeamos la suma
 
double sumaSinRedondeo=0d;  // Guarda la suma de los números ya redondeados. No redondeamos la suma
 
</syntaxhighlight>
 
 
 
: Otro ejemplo:
 
::<syntaxhighlight lang="java" line enclose="div" highlight="3,9" >
 
......
 
 
if ((cont%2==0) && (cont>10) && (cont<100)){  // Entra si es par entre 10 y 100
 
 
 
// 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
 
 
 
}  // Fin del if: Entra si es par entre 10 y 100
 
</syntaxhighlight>
 
 
 
: Al final de cada método se puede comentar el fin del mismo
 
::<syntaxhighlight lang="java" line enclose="div" highlight="12" >
 
........
 
 
public static void hacerCalculo(){
 
 
 
...............
 
 
 
 
 
 
} // Fin del método hacerCalculo
 
 
</syntaxhighlight>
 
 
 
* En instrucciones 'obvias' no es necesario poner comentarios.
 
: Por ejemplo:
 
::<syntaxhighlight lang="java" line enclose="div" highlight="3" >
 
int temp=0;
 
 
temp++;
 
</syntaxhighlight>
 
 
 
 
====Comentarios de bloque====
 
 
* Comentarios que necesiten más de una línea.
 
 
 
====Comentarios de Javadoc====
 
 
<u>'''Obligatorio'''</u>: 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:
 
 
::<syntaxhighlight lang="java" line enclose="div" highlight="2-6,11-15,26-30,24,37,39" >
 
/**
 
* Clase: ConversionTipos
 
* En esta clase están implementados todos los ejercicios relacionados con la conversión de tipos
 
* @author Angel Fernández
 
* @version: 04/10/2017/ v1.0
 
*/
 
public class ConversionTipos {
 
 
    static Scanner scanner;
 
   
 
    /**
 
    * Nombre: resolverEjercicio1
 
    * Resuelve el ejercicio 1 de la lista de ejercicios de este bloque
 
    *
 
    */
 
    public static void resolverEjercicio1(){
 
 
 
 
 
 
 
       
 
    } // Fin del método resolverEjercicio1
 
   
 
    /**
 
    * Método main
 
    * Método principal que se va a ejecutar
 
    * @param args: Array de String: Parámetros de entrada que podemos recibir cuando ejecutamos la clase
 
    */
 
    public static void main(String[] args) {
 
 
 
 
 
       
 
    }  // Fin del método main
 
   
 
}  // Fin de la clase ConversionTipos
 
</syntaxhighlight>
 
 
===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 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.
 
 
 
* 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.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="8-9,19" >
 
    /**
 
    * Nombre: resolverEjercicio1
 
    * Resuelve el ejercicio 1 de la lista de ejercicios de este bloque
 
    * 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.
 
    */
 
    public static void resolverEjercicio1(){
 
        double numero1=0d, numero2=0d;  // Números a leer
 
        double sumaConRedondeo=0d;  // Guarda la suma de los números sin redondear. Redondeamos la suma
 
        double sumaSinRedondeo=0d;  // Guarda la suma de los números ya redondeados. No redondeamos la suma
 
       
 
        System.out.println("Introduce un número decimal separado por coma");
 
        numero1 = scanner.nextDouble();
 
        System.out.println("Introduce un número decimal separado por coma");
 
        numero2 = scanner.nextDouble();
 
       
 
        sumaConRedondeo = Math.round(numero1+numero2);  // Conversión implícita de Long a Double
 
        sumaSinRedondeo = Math.round(numero1) + Math.round(numero2);    // Conversión implícita de Long a Double
 
       
 
        System.out.printf("Redondeo de número1: %d%nRedondeo de número2:%d%n",Math.round(numero1),Math.round(numero2));
 
        System.out.printf("Suma sin redondear:%.2f%n", sumaSinRedondeo);
 
        System.out.printf("Número1: %.2f%nNúmero2:%.2f%n",numero1,numero2);
 
        System.out.printf("Suma con redondeo:%.2f%n", sumaConRedondeo);
 
       
 
    } // Fin del método resolverEjercicio1
 
 
</syntaxhighlight>
 
 
: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.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="8-9,19" >
 
    /**
 
    * Nombre: resolverEjercicio2
 
    * Resuelve el ejercicio 2 de la lista de ejercicios de este bloque
 
    * 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.
 
    */
 
    public static void resolverEjercicio2(){
 
        byte numero1=0,numero2=0,numero3=0;  // Número a leer del teclado.
 
        int suma=0;    // Guarda la suma de los números leídos.
 
       
 
        System.out.println("Introduce un número:");
 
        numero1 = scanner.nextByte();
 
        suma = numero1;    // Conversión implícita
 
       
 
        System.out.println("Introduce un número:");
 
        numero2 = scanner.nextByte();
 
        suma += numero2;    // Conversión implícita
 
 
        System.out.println("Introduce un número:");
 
        numero3 = scanner.nextByte();
 
        suma += numero3;    // Conversión implícita
 
 
        System.out.printf("El resultado de la suma es:%d",suma);
 
    }
 
</syntaxhighlight>
 
 
 
* 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 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.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="8-9,19" >
 
</syntaxhighlight>
 
 
 
* 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)
 
::<syntaxhighlight lang="java" line enclose="div" highlight="8-9,19" >
 
</syntaxhighlight>
 
 
 
* 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.
 
::<syntaxhighlight lang="java" line enclose="div" highlight="8-9,19" >
 
</syntaxhighlight>
 
 
 
 
* 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
 
::<syntaxhighlight lang="java" line enclose="div" highlight="8-9,19" >
 
</syntaxhighlight>
 
 
 
 
 
 
 
 
 
 
 
 
 
  
  
 +
* Podéis ver una lista completa [https://www.google.es/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiEpo72s9zWAhWHvRoKHeJCA4QQFgglMAA&url=https%3A%2F%2Fnetbeans.org%2Fproject_downloads%2Fusersguide%2Fshortcuts-80.pdf&usg=AOvVaw2DdGJjFdq93kFT7xApdChb en este documento].
  
  
 +
== Ejercicios UD1: Identificación de los elementos de un programa informático ==
  
 +
* [[Programacion Listado de ejercicios UD1 | Listado ejercicios UD1: Identificación de los elementos de un programa informático]]
  
 +
== Debugger==
  
  
 +
* Podemos ver en la siguiente imagen el significado de cada botón cuando iniciamos una depuración de un programa.
 +
[[Imagen:Programacion_debugger_1.jpg|600px|center]]
 +
<small><center>[http://puntocomnoesunlenguaje.blogspot.com.es/2014/11/netbeans-debugger-java.html Información obtenida de este enlace].</center></small>
  
 +
== Ejercicios UD2: Estructuras de selección y repetición. Excepciones ==
  
 +
* [[Programacion Ejercicios UD2 | Ejercicios UD2: Estructuras de selección y repetición. Excepciones]]
  
  
Línea 1694: Línea 97:
  
  
 +
<br/>
 
Página creada por [http://www.about.me/angeldfg Angel D. Fernández González]
 
Página creada por [http://www.about.me/angeldfg Angel D. Fernández González]

Revisión actual del 12:20 25 nov 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

Debugger

  • Podemos ver en la siguiente imagen el significado de cada botón cuando iniciamos una depuración de un programa.
Programacion debugger 1.jpg
Información obtenida de este enlace.

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






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