Fund Java

1,167 views

Published on

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,167
On SlideShare
0
From Embeds
0
Number of Embeds
168
Actions
Shares
0
Downloads
38
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Fund Java

  1. 1. Introducción a Java (I)
  2. 2. Indice 2 Índice  Tipos de datos y operadores  Entradas y Salidas básicas
  3. 3. Tipos de datos y operadores
  4. 4. Indice 4 Variables  Una variable no es algo muy diferente de lo que hemos aprendido en matemáticas. Pensemos en las siguientes operaciones:  El largo de la parcela es 60 metros  El ancho de la parcela es 70 metros  El área es el producto del ancho por el largo: 4200  ¿Por qué son necesarias las variables?  Porque necesitamos etiquetas o identificadores para cosas tales como ancho, largo, etc.  Porque necesitamos almacenar datos asociados a dichos identificadores (60, 70, 4200)  Un ejemplo en Java: public static void main(String[] args) { System.out.println( "Ha entrado en la aplicación"); float largo; float ancho; float area; largo = 60; ancho = 70; area = ancho * largo; // ¿ Cómo visualizar el área de la parcela }
  5. 5. Indice 5 Variables: las reglas básicas  Regla básica: toda variable debe ser declarada antes de ser utilizada  En el formato de la declaración hay que tener en cuenta:  Lo básico, especificar: • El tipo de dato • El nombre o identificador de la variable  Lo opcional es: • Dar valor a la variable por primera vez (inicializar) • Declarar otras variables en la misma línea (ojo: del mismo tipo)  Formato: Tipo nombre [ = valor ] [, nombre [ = valor ] ... ];  Ejemplos: int alto, ancho = 0, edad; char x = ‘s’, b;  El programador tiene completa libertad a la hora de dar nombre a una variable. Por ejemplo, no hay obligación de llamar a las variables enteras con nombres como “número”, “entero”, etc.  Lo mejor a la hora de dar un nombre es dejarse llevar por el sentido común: claridad, es decir, tratar de ser “significativo” sin alargarse en exceso. Por ejemplo, el nombre “edad” es más significativo que usar simplemente “e”. La costumbre de dar nombres no significativos es uno de los vicios que conduce a crear código “solipsista”: sólo lo comprende el programador que lo creó (siempre que no haya pasado mucho tiempo, en cuyo caso lo normal es que no lo comprenda ni la persona que lo hizo)
  6. 6. Indice 6 Los tipos de datos: enteros y coma flotante  Del mismo modo que existen diferentes tipos de vehículos existen diferentes tipos de variables  El tamaño en bits, a diferencia de C/C++, es fijo, es decir, no varía en función de la máquina. Esto facilita la portabilidad  Enteros:  byte: 8 bits (-128 a 127)  short: 16 bits (-32.768 a 32.767)  int: 32 bits (-2.147.483.648 a 2.147.483.647)  long: 64 bits (+/- 9x1018 )  En coma flotante, también llamados reales. Se utilizan cuando se precisan posiciones decimales:  float: 32 bits (3.4e-038 a 3.4e+038)  double: 64 bits (1.7e-308 a 1.7e+308)
  7. 7. Indice 7 Elegir un tipo de datos  En principio parece que lo más fácil sería trabajar con un único tipo de dato. ¿Parece lógico tener diferentes tipos de datos?  La respuesta más sencilla es responder con una pregunta: ¿parece sensato tener el mismo tipo de vehículo para transportar 5 personas, transportar 3 toneladas de carga o para llevar a 55 personas?  Tenemos diferentes tipos de datos con la finalidad de optimizar. Del mismo modo que no es sensato usar el motor de un autobus para un turismo, no es sensato emplear 64 bits si queremos contar del 1 al 10  Por tanto, parece que el primer criterio para elegir el tipo es la optimización: no malgastar memoria. Pero hay un criterio más importante, el sentido común, que nos indica que resulta prudente actuar con holgura. De hecho, en nuestra vida cotidiana no llevamos nuestros coches siempre llenos y perfectamente optimizados. Sino que con frecuencia, transportan menos personas que su límite máximo
  8. 8. Indice 8 Un ejemplo con double  Un ejemplo para calcular el área de un círculo (PI*r2 ) public class j01_radio { public static void main(String[] args) throws IOException { double PI = 3.1416; double radio = 3.2, area; area = radio * radio * PI; // Calculo el área System.out.println( "El área es: " + area); } }  Ejercicio: hacer un programa que calcule volumen de un contenedor a partir de su largo, ancho y altura (pueden admitir dos decimales).
  9. 9. Indice 9 Booleanos  Es un tipo de dato propio de una lógica binaria: sólo tiene como valores true o false. int edad = 0; boolean mayor_de_edad = false; edad = 18; mayor_de_edad = true;  Es el tipo utilizado para evaluar los condicionales: int edad = 0; boolean mayor_de_edad = false; if (edad >= 18) // Si es verdad que la edad es > ó = que 18 mayor_de_edad = true; // entonces es mayor de edad if (mayor_de_edad == true) // Si es verdad que es mayor de edad ... System.out.println( “Puede obtener el carnet B1” );  El último condicional se puede escribir de manara más cómoda (y más usual): if (mayor_de_edad) // Si es verdad que es mayor de edad ... System.out.println( “Puede obtener el carnet B1” );
  10. 10. Indice 10 Caracteres (char) n Java los caracteres se almacenan en variables de 16 bits. Se tiliza un formato estándar e internacional denominado Unicode que dmite 65.537 caracteres, de esta forma podemos utilizar desde el tín hasta el arábigo. Unicode es el formato más utilizado en nternet. n el siguiente ejemplo cambiamos el valor de una variable char: char cuadricula = ‘A’; System.out.println( “La cuadrícula del mapa es ” + cuadricula ); cuadricula = ‘b’; System.out.println( “La cuadrícula del mapa es ” + cuadricula ); l siguiente ejemplo nos muestra como funciona internamente el rdenador: asocia a cada carácter un número. Puesto que con 16 ts podemos representar números enteros de 0 a 65.536, entonces odemos representar 65.537 caracteres. En nuestro ejemplo sociamos a un char el número 126, que se representa en formato e carácter como ‘~’: char a = 126; System.out.println( “El carácter es ” + a ); bservar que una cadenas de caracteres (String) se delimita por omillas dobles y los caracteres aislados (char) se delimitan por omillas simples.
  11. 11. Indice 11 String  String no es un tipo simple (como float, char, etc.), sino una clase que nos ayuda a manejar de forma sencilla cadenas de caracteres.  Ejemplos de instancias: String j = “Hola mundo”; String k = new String( “Hola mundo” );  Podemos concatenar cadenas: String k = "Hola“, String m = "Adios"; String h = "Saludos: " + k + " y " + m; System.out.println( h );  Podemos saber su ancho: String k = “Antonio”; System.out.println( k.length() );  Mediante compareTo() podemos ordenar diferentes cadenas (ver más adelante)  Conversión de númerico a cadena mediante el método static valueOf(): int anio = 1999; String p = String.valueOf( anio); System.out.println( p );  La conversión inversa se hace con métodos static que están en las clases Double, Float, etc: radio = Double.parseDouble( cadena ); // Convierto el String en double  Se puede acceder a un carácter de la cadena: char car = c.charAt(1);
  12. 12. Indice 12 Ámbito de vida  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’ y del vector ‘args’?: public static void main(String[] args) { double PI = 3.1416; double radio = 3; System.out.println( “El área es” + (PI*radio*radio) ); }
  13. 13. Indice 13 Conversión de tipos  Hemos 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’? También hay conversión automática ante tipos compatibles. Por ejemplo, la asignación de un int a un char que vimos anteriormente  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’?
  14. 14. Indice 14 Comprender la conversión de tipos  Supongamos que tenemos en una variable (int) el precio de un producto. Queremos 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 la computadora:  La computadora 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 =)  Para que se produzca esta conversión es necesario realizar un moldeado (cast):  precio = (int) (precio * 1.2); // Esto si es correcto
  15. 15. Indice 15 Operadores aritméticos  Suma: +  Resta: -  Producto: *  División: /  Módulo: % (se puede aplicar a coma flotante y a int)  Incremento: ++ (a++ es equivalente a: a=a+1)  Decremento: -- (a-- es equivalente a: a=a-1)  Suma y asignación: += (a+=3 es equivalente a: a=a+3)  Resta y asignación: -= (a-=3 es equivalente a: a=a-3)
  16. 16. Indice 16 Operadores relacionales  El resultado de los operadores relacionales es un valor boolean (true o false):  Igual a: == (no confundirlo con el operador de asignación)  Distinto de: !=  Mayor que, mayor o igual: >, >=  Menor que, menor o igual: <, <=  Ejemplo 1: int a = 5, b = 2; boolean c = a >= b;  Ejemplo 2: float a = 3; if (a == 3) System.out.println( “El valor es:” + a);
  17. 17. Indice 17 ¿Qué ocurre con String?  A menudo necesitamos comparar cadenas de caracteres, para saber si una es lexicográficamente igual, mayor o menor que otra. El ejemplo típico es ordenar una lista de nombres  Ya sabemos que String no es un tipo simple, sino que es una clase. Para ayudarnos en la comparación tenemos los métodos compareTo y compareToIgnoreCase. Podemos saber el orden de las cadenas en función de lo que devuelvan los métodos: String j = "Belén", k = "Susana", m = "Belén", n = "Antonio"; if (j.compareTo(m) == 0) System.out.println( j + " es igual a " + m); if (j.compareTo(k) < 0) System.out.println( j + " es menor que " + k); if (j.compareTo(n) > 0) System.out.println( j + " es mayor que " + n);  Existe también el método equals( String ), que devuelve true si las cadenas son iguales. Hay otra versión equalsIgnoreCase(String) Belén es igual a Belén Belén es menor que Susana Belén es mayor que Antonio
  18. 18. Indice 18 Operadores lógicos  Operan solamente con valores booleanos:  Conjunción (Y): &&  Disyunción inclusiva (O): ||  Negación: !  Ejemplo: int edad = 17; float nota = 6f; boolean mayoria_edad = edad >= 18; if (mayoria_edad && nota >= 5) System.out.println( "aprobado" ); if (!mayoria_edad) System.out.println( "Le falta(n) " + (18-edad) + " año(s)" );
  19. 19. Entradas y Salidas básicas
  20. 20. Indice 20 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.
  21. 21. Indice 21 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
  22. 22. Indice 22 Stream de entrada por teclado  Para manejar entradas por teclado tenemos 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:  Tengo que importar las clases que uso (BufferedReader y InputStreamReader), que están en el paquete java.io, por medio de import.  Tengo 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, puedo 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 queremos que lo tecleado se convierta en un número habrá que hacer posteriormente una conversión mediante métodos, como veremos en el siguiente ejemplo.
  23. 23. Indice 23 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. Hago casting System.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).  Qué paquete de librerías se necesita importar para poder utilizar System.in??
  24. 24. Indice 24 final  Cuando se declara una variable como final estamos dando la orden de que no se modifique. Es como definir una constante  Debe ser inicializada en la declaración, ya que cualquier intento de modificarla provoca un error de compilación  Utilidad: no permitir que un error de programación altere el valor de una constante. Ejemplo: class circulo { private punto posicion; private double radio; static final public double PI = 3.1416;

×