java básico

30
Java Básico Programación 302

Upload: maria-luisa-velasco

Post on 26-Jul-2015

871 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java  básico

Java Básico

Programación 302

Page 2: Java  básico

• 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).

Page 3: Java  básico

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

Page 4: Java  básico

Á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) );}

Page 5: Java  básico

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

Page 6: Java  básico

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

Page 7: Java  básico

Sentencias de control

Page 8: Java  básico

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

Page 9: Java  básico

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

Page 10: Java  básico

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

Page 11: Java  básico

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;}

Page 12: Java  básico

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

Page 13: Java  básico

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.

Page 14: Java  básico

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;

}

Page 15: Java  básico

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

Page 16: Java  básico

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

Page 17: Java  básico

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

Page 18: Java  básico

• 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

Page 19: Java  básico

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.

Page 20: Java  básico

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

Page 21: Java  básico

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 );

Page 22: Java  básico

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?

Page 23: Java  básico

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

Page 24: Java  básico

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”);

Page 25: Java  básico

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");}

Page 26: Java  básico

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.

Page 27: Java  básico

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

Page 28: Java  básico

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.

Page 29: Java  básico

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.

Page 30: Java  básico

• 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)