Java básico
-
Upload
maria-luisa-velasco -
Category
Documents
-
view
872 -
download
0
Transcript of Java básico
Java Básico
Programación 302
• Esta presentación tiene como objetivo ver varios temas básicos de Java. Se va a utilizar en varias clases, no sólo en una, ya que el tiempo no alcanzaría.
• Para cada ejemplo mostrado, se realizará el programa correspondiente en java, si el ejemplo es un programa, lo editarán y ejecutarán para analizar el resultado del mismo.
• Deberán analizar los conceptos vistos con anterioridad, e indicar en una clase posterior la lista de conceptos involucrados en cada uno de estos ejemplos, es decir, si en un programa se ven operadores de incremento, indicar que contiene estos operadores, si muestra concatenación de cadenas, de la misma manera, ámbito de variable, etc.
• Deben guardar los programas que realicen en una carpeta, y la fecha de creación del programa debe coincidir con la del archivo guardado( como máximo debe tener un día de diferencia).
Un ejemplo con double
\\Un ejemplo para calcular el área de un círculo (PI*r2)public class Area { public static void main(String[] args) { double PI = 3.1416; double radio = 3.2, area;
area = radio * radio * PI; // Calculo el áreaSystem.out.println( "El área es: " + area);
}
\\ Investigar para la siguiente clase como se define una constante, y volver a hacer este ejemplo, pero utilizado a PI y radio como constantes
Ámbito de una variable• El ámbito de una variable u objeto es el espacio del programa en el que
esa variable existe. Por ello, se habla de “ámbito de vida”
• De forma general (hay excepciones que veremos más adelante), la vida de una variable comienza con su declaración y termina en el bloque en el que fue declarada (los bloques de código se delimitan por llaves: {}). Por ejemplo, ¿cuál es el ámbito de la variable ‘radio’?:
public static void main(String[] args){ double PI = 3.1416; double radio = 3; System.out.println( “El área es” + (PI*radio*radio) );}
Conversión de tipos• Se ha visto que los datos tienen un tipo. Pero en ocasiones nos conviene convertir un dato de su tipo
original a otro• Tipos de conversión:
– Automática o implícita. El tipo destino es más grande (mayor número de bits) que el tipo origen (ensanchamiento o promoción):
int Origen = 65;float Destino = 4.35f;Destino = Origen; // ¿Cuál es el valor de ‘Destino’?Hacer el programa en java, que pruebe este ejemplo
También hay conversión automática ante tipos compatibles. Por ejemplo, la asignación de un int a un char , investigar un ejemplo y traerlo para la siguiente clase.
– Explicita. La conversión se produce cuando el tipo destino es más pequeño que el origen (estrechamiento). Para ello debemos realizar un moldeado (cast):
double Origen = 65.13;int Destino = 4;Destino = (int) Origen; // ¿Cuál es el valor de ‘Destino’?Hacer el programa en java que pruebe este ejemplo
– La conversión por medio de métodos es en realidad una aplicación de los tipos de conversión anteriores. Para ver ejemplos (transparencia dedicada a la clase String):
• String p = String.valueOf( numero);• double radio = Double.parseDouble( cadena );Vamos a dejar este ejemplo para el tema entrada de datos
6
Comprender la conversión de tipos• Suponer que se tiene en una variable (int) el precio de un producto, el cual se quiere
incrementarlo en un 20%:int precio = 10000;precio = precio * 1.2;
• Este código parece correcto, sin embargo el compilador nos informa de un error: “Error num.: 355 : puede perderse precisión: double, hacía falta int”. ¿Cuál es la razón? Para entenderlo, conviene comprender como trabaja el ordenador:
– El ordenador trata de realizar el producto (precio*1.2) entre un int y un double (1.2), para lo cual el ordenador convierte de forma automática el int en un double. Hasta aquí todo va bien, el resultado de multiplicar dos números double es un double:
precio = precio * 1.2;
(int) (double)
(conversión automática a double)
(double) El problema viene a continuación: no hay conversión automática de un double (el resultado del
producto) a un int (la variable a la izquierda del operador =) ya que el tipo double es mayor que int
Para que se produzca esta conversión es necesario realizar un casting (cast):precio = (int) (precio * 1.2); // Esto si es correcto
Sentencias de control
8
Introducción• Las sentencias de control nos ayudan a que el flujo de ejecución del programa deje
de tener un carácter lineal.• Ejemplos de sentencias de control en la vida cotidiana:
– Ejemplo 1:• Si el cheque es correcto y hay fondos
– Entonces pagar• Si no:
– No pagar
– Ejemplo 2:• Mientras la salsa no este densa:
– Calentar y remover
– Ejemplo 3:• Siga adelante• Cuando llegue a la plaza:
– Si es hora pico» Entonces de vuelta a la derecha
– Si no:» Siga en línea recta
• Vamos a ver los siguientes tipos de sentencias de control:– Selección– Iteración
9
if / else (I)• La sentencia básica para realizar bifurcaciones o
ramificaciones. Formato:if (condición)
sentencia 1;[else
sentencia 2]
• La condición es una expresión booleana. Si es true, se ejecuta la sentencia 1; si es false, se ejecuta la sentencia 2 (si existiese)
• Ejemplo:int a = 3, b = 9, c;if (a < b && a != 0)
c = b – a;else
c = a – b;
Precaución:La tabulación es fundamental
para realizar código legible
10
public class ControlFlujo{ public static void main(String arg[]){
//Asigacion de variable byte caliEstudi= 100;
//Flujo de control if if( caliEstudi >= 60) System.out.println("Aprobado " + caliEstudi);
}//main}//class
Instrucciones de flujo if..else
11
if / else (II)• Si hay más de una sentencia se deben delimitar los bloques por llaves {}. En el
siguiente ejemplo se va a determinar las ventajas que tiene un cliente en función de los puntos de su tarjeta de compra:
if (puntos > 1000) { tipo_cliente = "VIP"; descuento = 0.05f;}else { tipo_cliente = "Normal"; descuento = 0.02f;}System.out.println( "Tipo: " + tipo_cliente + "\tDescuento: " + descuento*100 + "%");
• Los condicionales pueden ser anidados, es decir, que uno este dentro de otro. En el ejemplo se va a añadir otra condición: para los clientes de más de 1000 puntos, si su antigüedad es mayor de 1825 días, se le otorgará un descuento del 6%:
if (puntos > 1000) { tipo_cliente = "VIP"; descuento = 0.05f; if (antiguedad > 1825) descuento = 0.06f;}
Ejemplo Condicional• public class EjercicioCondicional • {• //Comienzo del flujo principal del programa.• public static void main(String [] argumentos)• {• // Uso de if. • int x = 5; int y = 7;• comparar(x,y);• comparar(7,5);• comparar(5,5);• }// fin main • public static void salida ( String cadena )• {• System.out.println(cadena);• } // fin salida, como no estamos utilizando un objeto aún, el método se declara static• public static void comparar(int entero1, int entero2)• {• if (entero1 > entero2) • salida("El primer argumento es menor");• else• if(entero1 < entero2)• salida ("El primer argumento es mayor.");• else • salida("Los dos argumentos son iguales");• }// fin comparar, es static el metodo ya que aún no utilizamos un objeto
• }//fin class EjercicioCondicional
Atributo static
• Un atributo static no es un atributo específico de un objeto , sino más bien es un atributo de la clase; esto es, un atributo del que sólo hay una copia que comporten todos los objetos de la clase. Por esta razón, un atributo static existe y puede ser utilizado aunque no exista ningún objeto de la clase.
14
switch• Formato:
switch ( expresión ) { // expresión: no tiene que ser booleanocase constante1:
secuencia de sentenciasbreak;
case constante2:secuencia de sentenciasbreak;
...default:
secuencia de sentencias}
• No olvidar ‘break’. Pero a veces es adecuado omitirlo:switch ( categoria ) {
case 1:case 2:
porcen = 0.2; // Tanto para 1 como para 2 break;
case 3:porcen = 0.15;break;
default:porcen = 0.1;
}
15
Instrucciones de flujo switch
Ejemplo: switch (modeloAuto) {
case DELUJO:System.out.printl(“Guao”);break;
case ESTANDARD;
System.out.println(“Bueno”);break;
default:System.out.println(“Hum”);
}
Tipos datos para switch
Permitidos: Int
Promover a int: byte short char
No permitidos: String, float, long
16
Instrucciones de flujo switchpublic class SwitchTemporada{
public static void main(String arg[]){ int mes=4; String estacion; switch(mes){
case 12: case 1: case 2: estacion = "Invierno"; break; case 3: case 4: case 5: estacion ="Primavera"; break;
case 6: case 7: case 8: estacion = "Verano"; break; case 9: case 10: case 11: estacion = "Otoño"; break; default: estacion = "Mes desconocido"; }//fin switch System.out.println("Abril esta en " + estacion + "."); }//main}//class
17
while• Formato:
while (condición)
Sentencia• La sentencia puede ser un bloque delimitado por llaves ({}). El bucle se realiza
mientras la condición sea cierta• Ejemplo en el que se modifica un vector de números, de tal modo que se pone el
cuadrado del número que antes estuviese: double serie[] = {23, 4, 36, 9}; int i = 0; while ( i < serie.length ) { System.out.print( "Posición: " + i + "\t Anterior: " + serie[i] ); serie[i] = serie[i] * serie[i]; System.out.println( "\t Cuadrado: " + serie[i] ); i++; }
Posición: 0 Anterior: 23.0Cuadrado: 529.0Posición: 1 Anterior: 4.0
Cuadrado: 16.0Posición: 2 Anterior: 36.0Cuadrado: 1296.0Posición: 3 Anterior: 9.0
Cuadrado: 81.0
Bucle
• Investigar n para la siguiente clase:• length• Cómo se declara e inicializa un vector• Y cómo se accede a un elemento del vector
Ejemplos while• \\ Tabla multiplicar de un numero• public class EjemploWhile• {• public static void main (Stirng [] args)• {• int n, i; \\ n es numero e i un contador • n= Integer.parseInt( args[0]);• i=0;• while)(i <=10)• {• System.out.println (n+ “x ” +i+ “ = ” + (n*i));• i++• }// fin while• }fin main• }fin class
• Realizarlo en clase, recordar que al ejecutar el programa deben mandar el número como argumento, tal como lo hicieron con el ejercicio TotalHoras.
Otro ejemplo while• public classs Ejemplowhile2• {• public static void main ( String args[])• {• int n, divisor;• n= Integer.parseInt(args[0]);• System.out.println(“Los divisores son: ”);• divisor=n;• while (divisor>0)• {• if ((n%divisor)==0)• System.out.println(divisor);• divisor—• }\\ fin while• } \\ fin main• } \\ fin class
21
for (I)• En la vida cotidiana hay numerosos casos de iteraciones (repeticiones). Por ejemplo, si
alguien tiene que asignar un número a las cinco personas que hay en una habitación haría algo así:
for (el número es 1; mientras que el número sea < 6; incremento el número)Digo en voz alta el número, señalando a la persona correspondiente
• De forma semejante, el formato de for es:for ( inicialización; condición; variación )
Sentencia
• Con un ejemplo puede aclararse. Suponer que se quiere mostrar por pantalla los cuatro primeros números enteros, empezando por el 3:
– La inicialización sería: empezar con el número 3– Condición: mientras que el número sea menor que 7 (es aquello que debe cumplirse para poder
volver a repetir la sentencia)– Variación: incrementar en uno el número– Sentencia (aquello que se debe iterar o repetir, en nuestro ejemplo 4 veces): mostrar el número por
pantalla• Ejemplo:
int i;for ( i = 3; i < 7; i++)
System.out.println( i );
• Es posible saltar la inicialización (empieza en el valor previo)int i = 3;for ( ; i < 7; i++)
System.out.println( i );
22
for (II)• Vamos a ver paso a paso como actua la
iteración
• Ejemplo:int i;for ( i = 1; i < 3; i++)
System.out.println( i );
• Al observar la ejecución paso a paso es importante recordar:– Siempre se evalúa la condición ANTES
de ejecutar la sentencia– DESPUÉS de la sentencia siempre se
realiza la variación
• Se pueden iterar varias variables, para lo cual se necesitan comas: for(i=0, k=5; i < 5; i++, k=k+5)
1. INICIO: la variable i se inicia a 12. CONDICIÓN: se comprueba la condición: ¿
i<3 ? SI3. SENTENCIA: se ejecuta la sentencia
println4. VARIACIÓN: al terminar el bucle, se
incrementa i. Ahora vale 25. CONDICIÓN: se comprueba la condición: ¿
i<3 ? SI6. SENTENCIA: se ejecuta la sentencia
println7. VARIACIÓN: al terminar el bucle, se
incrementa i. Ahora vale 38. CONDICIÓN: se comprueba la condición: ¿
i<3 ? NO, fin del bucle9. IMPORTANTE: al salir del bucle el valor de
i es 3. ¿Cuál sería su valor si la condición fuese i<=3?
23
for (III)• Igual que los casos anteriores: se utilizan {} para acotar conjuntos de sentencias que pueden
ser anidables.• Ejemplo en el que se calcula la media y el máximo de un vector de números:
public static void main(String[] args) { float serie[] = {-8, -12, -4, -14}; float media, sumatorio = 0; int contador; float maximo = serie[0]; // ¿Funcionaria si asignamos el 0?
/*** Encontrar el máximo y sumamos todos los números ***/ for ( contador = 0; contador < serie.length; contador++ ) { if (serie[contador] > maximo) maximo = serie[contador]; sumatorio = sumatorio + serie[contador]; } /*** Calcular media. Mostrar la media y el maximo ***/ media = sumatorio / contador; System.out.println( "La media es " + media + " y el max es " + maximo); }
• Se pueden clasificar las variables en virtud de su función o uso (hasta ahora se han clasificado en virtud del tipo de dato). Entre estos tipos de usos hay dos que son muy comunes y aparecen en el ejemplo anterior:
– Variables contador– Variables sumatorio
24
do-while• Formato:
do {Sentencia
} while (condición);
• A diferencia de while, analiza la condición al final del bucle. Por tanto, la sentencia se realiza al menos una vez
• Ejemplo. ¿Qué hace?:int i = 1;do {
System.out.println( i*i*i );i++;
} while ( i < 3 );
• do-while es muy útil en la gestión de menús. El diseño sería:do {
Muestro las opciones de menúSolicito la opción por tecladoswitch (opcion) {
En función de la opción elegida realizo una u otra acción}
} while (la opción no sea “Salir”);
25
Salto• Hay sentencias que controlan el flujo de ejecución, de tal forma que
realizan saltos fuera del bloque en el que se encuentran:– break: salta fuera del bucle o switch– return: salta fuera del método
• Un ejemplo con break. Busca un nombre en una lista y, si lo encuentra, sale del bucle:
private static void funcion() { int i = 0; String nombre[] = { "Ana", "Belen", "Juan", "Pedro"}; String nombrBuscado = “Belen"; boolean encontrado = false;
while (i < nombre.length) { if (nombre[i].equals(nombreBuscado)) { System.out.println(nombre_buscado + " está en la posición " + i); encontrado = true; break; } i++; } if (!encontrado) System.out.println("No encontrado");}
26
Streams (I)• Cualquier programa realizado en Java que necesite llevar a cabo una operación de
I/O lo hará a través de un stream. • Un stream, cuya traducción literal es "flujo", es una abstracción de todo aquello que
permite introducir o extraer información. Así, un stream de teclado es un flujo de entrada para el programa y un stream de pantalla es un flujo de salida del programa
Input:Teclado
Output:Pantalla
La vinculación de este stream al dispositivo físico (teclado, pantalla, impresora, etc.) la hace el sistema de entrada y salida de Java.
27
Streams (II)• El paquete System define tres clases:
– in (entrada estándar)– out (salida estándar)– err (salida de errores estándar)
• La escritura hacia pantalla se hace con System.out
System.out.println(“Hola Mundo”); // Añade nueva línea al final System.out.print(“Adios”); // NO añade nueva línea al final
• La lectura desde teclado se hace con System.in
28
Stream de entrada por teclado• Para manejar entradas por teclado se tiene que crear un BufferedReader a partir de System.in:
import java.io.*;
public class inicio { public static void main(String[] args) throws IOException {
String cadena;BufferedReader entrada;
entrada = new BufferedReader(new InputStreamReader(System.in)); // Crear objeto de entrada
System.out.println("Escribe tu nombre:");cadena = entrada.readLine(); //leemos cadena de caracteres mediante readLine()
}}
• Condiciones previas a la creación de un BufferedReader:– Se tienen que importar las clases que uso (BufferedReader y InputStreamReader), que están en el paquete java.io, por
medio de import.– Se tiene que poner “throws IOException” en la función que usa BufferedReader (ya se explicará más adelante el manejo de
excepciones).• Una vez creado el objeto de entrada para teclado, mediante BufferedReader, se puede leer la entrada por
teclado mediante una llamada a objeto.readLine() (la entrada termina al pulsar Enter). No olvidar que esta función devuelve un String, es decir, cualquier cosa que el usuario teclea se almacena como una cadena, sea “pedro” o “3420”. Java es un lenguaje fuertemente tipado y si se quiere que lo tecleado se convierta en un número habrá que hacer posteriormente una conversión mediante métodos, como se ve en el siguiente ejemplo.
29
Un ejemplo entrada por teclado y conversión
public static void main(String[] args) throws IOException {double PI = 3.1416, radio;int area_int;String c;
/* Creo el objeto 'entrada', es un lector de entradas por teclado */BufferedReader entrada = new BufferedReader( new InputStreamReader(System.in));
System.out.print( "Escriba el radio: " );c = entrada.readLine(); // Leo un String de la entrada de teclado
radio = Double.parseDouble( c ); // Convierto el String en double radio
System.out.println( "El área es: " + radio * radio * PI);
area_int = (int) (radio * radio * PI); // Calculo el área entera del círculo. Realizar un castingSystem.out.println( "El área (entera) es: " + area_int);
}
• Desde un String existen conversiones a otros tipos: Integer.parseInt( cadena ) o Float.parseFloat( cadena). La conversión inversa utiliza String.valueOf( numero).
• Buscar ejemplos de conversión inversa para la siguiente clase.
• Fuentes Bibliográficas:• Introducción a Java(I)• Consultado el día 8/02/2010. Disponible en: www.pdfbar.com/free-ppt-
download/manara-ppt-Lnl.html • Introducción a Java• Consultado el día 8/02/2010. Disponible en:• ants.dif.um.es/~fernan/Java.ppt• Consultar los libros básicos de la bibliografía proporcionada en el
programa de la experiencia educativa (Dada el primer día de clases)