Introduccin a Java Temario El lenguaje de programacin



















































![Ejemplo de switch public static void main(String[] args) { switch (args. length) { case Ejemplo de switch public static void main(String[] args) { switch (args. length) { case](https://slidetodoc.com/presentation_image_h/b5ec57dd355bff57b5d16b181b42bb2b/image-52.jpg)





![Arreglos de Tipos Primitivos int[] x; // equivalente a int x[] x = new Arreglos de Tipos Primitivos int[] x; // equivalente a int x[] x = new](https://slidetodoc.com/presentation_image_h/b5ec57dd355bff57b5d16b181b42bb2b/image-58.jpg)
![Arreglos de Objetos Referencias X Circulo[] x; x = new Circulo[3]; x[0] = new Arreglos de Objetos Referencias X Circulo[] x; x = new Circulo[3]; x[0] = new](https://slidetodoc.com/presentation_image_h/b5ec57dd355bff57b5d16b181b42bb2b/image-59.jpg)

![Inicialización de Arreglos • Un arreglo puede inicializarse con la siguiente sintaxis: boolean[] respuestas Inicialización de Arreglos • Un arreglo puede inicializarse con la siguiente sintaxis: boolean[] respuestas](https://slidetodoc.com/presentation_image_h/b5ec57dd355bff57b5d16b181b42bb2b/image-61.jpg)


































- Slides: 95

Introducción a Java

Temario • • • El lenguaje de programación Java Tipos de aplicaciones en Java Tipos de datos primitivos Variables Constantes Arreglos Operadores Control de flujo String y String. Buffer 2

Java • Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele • Influenciado por C++ • Soporta clases, encapsulación, herencia simple, polimorfismo, interfaces, garbage collection 3

Java • Objetivo inicial: un lenguaje de programación para dispositivos de consumo • Requerimientos: pequeño, rápido, confiable y portable • En 1994 se produce la explosión del Web, y Sun advierte que Java es ideal para aplicaciones Internet: – Independiente de la plataforma – Pequeño – Seguro 4

El Lenguaje Java • • Independiente de la plataforma Seguro Simple Robusto Orientado a Objetos Distribuido Multi-threaded • Ref: http: //www. oracle. com/technetwork/javase/documentation/index. html 5

El Modelo Java • Al compilar un programa Java, se genera un código de máquina intermedio definido por Sun, que recibe el nombre de bytecode 6

El Modelo Java • El código bytecode es portable entre diferentes plataformas 7

Java Standard Edition • Java SE es la edición estándar de Java, sobre la cual están construidas Java ME (Mobile Edition) y Java EE (Enterprise Edition) 8

Tipos de Aplicaciones • Usando Java es posible escribir: – Aplicaciones stand-alone – Aplicaciones Web (servlets, JSP, applets) – Componentes (Java. Beans, Enterprise Java. Beans) – Web Services 9

Tipos de Archivos Java • Todo archivo define una clase o una interfaz • Clase: – Define e implementa un tipo de objeto – Variables (representación) – Procedimientos (funciones) • estáticos (especial: main) • y dinámicos (se ejecutan sobre un objeto) • Interfaz – Define la firma de un procedimiento 10

Un archivo básico para hacer un programa que corra public class Mi. Clase { static public void main(String[] args) { Aqui van las instrucciones que se ejecutarán cuando se eche a correr la clase } } • El programa debe ser escrito en un archivo llamado Mi. Clase. java (Mi. Clase es el nombre de la “clase” y lo inventa el programador, por convención empieza con mayúscula • Al compilarse se generará el archivo Mi. Clase. class, que es el que se ejecuta • Si se cambia algo en el programa hay que compilarlo de nuevo para que se refleje el cambio en el archivo class 11

Ejemplo 1 import java. util. *; //para usa Scanner public class Mi. Clase { static public void main(String[] args) { Scanner s = new Scanner(System. in); System. out. print(″Numero de hombres ? ″); int h = s. next. Int(); System. out. print(″Numero de mujeres ? ″); int m = s. next. Int(); double ph = 100. 0*h/(h+am); System. out. println(″% hombres : ″+ph); System. out. println(″% mujeres : ″+pm); } } 12

Ejemplo de una clase con mas cosas public class Mi. Clase { int a; //variable de instancia static int b; //variable de clase public void mi. Metodo 1( ) { //método para objetos de la clase. . . } static public void mi. Metodo 2 { //método general. . . } static public void main(String[] args) {. . . } } 13

Características del Lenguaje • Case-sensitive • Todas las sentencias terminan con un puntocoma (; ) • Los espacios blancos (incluyendo tabs y fines de línea) se ignoran, excepto al interior de strings 14

Comentarios // comentario /* comentario */ /** comentario */ Caracteres desde // hasta el fin de línea son ignorados Caracteres entre /* y */ son ignorados Caracteres entre /** y */ son ignorados e incluidos en la documentación javadoc 15

Javadoc 16

Identificadores • Nombre dado a una variable, clase, o método • Comienza con una letra Unicode (incluyendo _ y $), a la que pueden seguir letras y dígitos • Puede tener cualquier tamaño • Ejemplos – apellido –$ – 17

Unicode • Versión extendida de la tabla de caracteres ASCII – Los caracteres ASCII tienen 7 bits – Los caracteres Unicode tienen 16 bits • Diseñado para manejar múltiples lenguajes • La secuencia udddd permite codificar caracteres Unicode (d es un dígito hexadecimal) 18

Tipos, Valores y Variables • En Java existen 2 categorías de tipos: tipos – Primitivos: Primitivos boolean, char, byte, short, int, long, float, double – Referencias: Referencias objetos, interfaces, arreglos • Un objeto es una instancia de una clase o de un arreglo • Una variable es un espacio de memoria que puede almacenar: Tipo de la variable Puede almacenar Primitivo Un valor del tipo que se declaró Clase El valor null, o una referencia a una instancia de la clase o de alguna subclase de la clase Interfaz El valor null, o una referencia a una instancia de alguna clase que implemente la interfaz Arreglo El valor null, o una referencia a un arreglo de elementos del tipo del arreglo 19

Tipos de Datos Primitivos Tipo Valores boolean true o false char Carácter Unicode (de 16 bits) byte Entero de 8 bits (con signo) short Entero de 16 bits (con signo) int Entero de 32 bits (con signo) long Entero de 64 bits (con signo) float Número flotante de 32 bits double Número flotante de 64 bits 20

Variables • Una variable es un espacio de almacenamiento de datos, con un nombre y un tipo de datos asociado • La existencia de una variable está dada por su alcance: – static (variable "de clase"): se crea una vez, sin importar cuántas instancias de la clase existan – no static (variable "de instancia"): se crea una vez por cada instancia de la clase – local: ocal se crea al ejecutarse la declaración, y desaparece al finalizar el bloque en el que fue creada 21

Variables Locales • La declaración puede aparecer en cualquier punto del código fuente de un método • La variable existe mientras se ejecuta el bloque contiene la declaración 22

Bloque • Cualquier número de sentencias agrupadas entre un par de llaves { } • Puede ser usado en cualquier lugar donde se acepta una sentencia simple • El bloque define el ámbito (scope) de las variables • El bloque provee contornos para el control de flujo del procesamiento 23

Ambito de Variables public class Mi. Clase { int a; static int b; public void mi. Metodo( ) { int c; if (condicion) { int d; } d fuera de ámbito } c fuera de ámbito } a y b fuera de ámbito 24

Valores Iniciales • Variables de instancia y de clase – tipos primitivos numéricos – char – boolean – referencias 0 'u 0000' false null • Variables locales – Deben ser inicializadas explícitamente antes de ser usadas; de lo contrario se produce un error de compilación 25

Precedencia de Variables 1. Variables locales 2. Parámetros de métodos 3. Variables de clase y de instancia Ej: class Punto { private double x, y; public void set. X(double x) { this. x = x; } } 26

Constantes • Una vez inicializadas, no pueden ser modificadas • Se utiliza la palabra reservada final para definir una constante • Típicamente las constantes se definen como static, static para no instanciarlas con cada objeto • Ejemplo class Circulo { static final double PI = 3. 1416; } 27

Conversión de Tipos • Java es fuertemente tipeado – Chequea compatibilidad de tipos en tiempo de compilación – Permite hacer cast entre tipos – Provee operadores para determinar el tipo de un objeto en tiempo de ejecución 28

Conversion Implícita • Cualquier valor numérico puede ser asignado a una variable numérica que seoporte un rango de valores más amplio byte short int long float double más chico más grande • Ejemplo int i = 1000; double d = i; 29

Cast Explícito • Cuando una conversión implícita no es posible, un cast explicita la conversión a realizar • Sólo se permiten casts que tienen sentido 30

Cast de Tipos Primitivos • Puede perderse precisión double d = 20. 5; long l = (long) d; System. out. println(l); 20 • Pueden perderse dígitos long l = 1000000; short s; s = (short) l; System. out. println(s); 16960 31

Tipos de Operadores • • Asignación Aritméticos Relacionales Lógicos 32

Operador de Asignación • Se usa el símbolo = para asignar un valor • Ejemplo sueldo = 1000000; validado = true; • La asignación puede ocurrir en la declaración String nombre = "Paula"; 33

Operadores Aritméticos + * / % Suma Resta Multiplicación División Resto 34

Métodos Estáticos • Se identifican con el selector static • Devuelven o no un resultado de un cierto tipo • Reciben un número determinado de parámetros de tipo determinado • Métodos de igual nombre pero con distinto número o tipo de parámetros son métodos distintos ! 35

Métodos en la misma clase public class Mi. Clase { public int suma(int x, int y ) { return x+y; } static public int suma(int x, int y, int z) { return x+y+z } static public void main(String[] args) { System. out. println(suma(5, 4)+” “+suma(2, 3, 4)); } } 36

Métodos en otra clase public class Sumas { //En archivo Sumas. java public int suma(int x, int y ) { return x+y; } static public int suma(int x, int y, int z) { return x+y+z } } public class Mi. Clase { //En archivo Mi. Clase. java static public void main(String[] args) { System. out. println(Sumas. suma(5, 4)+” “+ Sumas. suma(2, 3, 4)); } } Ver Ejemplos. Funciones. ppt 37

Incremento y Decremento • i++ es equivalente a i = i + 1 i-- es equivalente a i = i - 1 • El valor de la expresión es el valor de la variable antes o después de la operación, según si el operador se encuentra a la izquierda o a la derecha del operando • Ejemplo int x = 10; System. out. println( x++ ); System. out. println( ++x ); System. out. println( x ); // x=11, print 10 // x=12, print 12 // print 12 38

Operadores Abreviados var op= expression es equivalente a: var = var op (expression) • Ejemplo a *= b + 1; es equivalente a: a = a * (b + 1); 39

Sentencias de Control de Flujo • • • if / else switch for while do / while 40

if if ( result == 0 ) { System. out. println("No encontrado!"); } 41

if / else if (rol. equals("administrador")) { // acceso a administración; } else { // no tiene acceso a administración } 42

Operadores Relacionales > >= < <= == != Mayor o igual Menor o igual Igual Distinto 43

Operadores Lógicos && || ! and or not • Ejemplo boolean fin = eof || (str != null && str. equals(patron)); 44

Operador "? " • Expresión condicional: – condición ? expresión 1 : expresión 2 • El valor de la expresión es expresión 1 si la condición es verdadera, y expresión 2 de lo contrario • Ejemplo monto. Neto = hay. Impuesto ? p * 1. 05 : p; es equivalente a: if (hay. Impuesto) { monto. Neto = p * 1. 05; } else { monto. Neto = p; } 45

if / else if ( años < 5 ) { vacaciones = 10; } else if ( años < 10 ) { vacaciones = 15; } else { vacaciones = 20; } 46

while y do while • Sintaxis 1: se ejecuta 0 o más veces while ( condición ) { sentencias } • Sintaxis 2: se ejecuta 1 o más veces do { sentencias } while ( condición ); 47

break • break causa el fin del ciclo en el que se encuentra while ( condición ) { sentencias… if (condición de salida) { break; } más sentencias… } 48

continue • continue causa el fin de la iteración actual y el paso a la siguiente while ( condición ) { sentencias… if (condición siguiente iteración) { continue; } más sentencias… } (ver ejemplos instrucciones especiales) 49

Recursividad • Java soporta que un método se invoque a sí mismo, de manera recursiva: // sumatoria int f(int n) { if (n == 0) { return 0; } else { return n + f(n – 1); } } 50

switch • Selección múltiple • switch <expresión> debe evaluar un int • case <expresión> debe ser un literal o un campo static final • break abandona el bloque del switch (de otra manera los siguientes cases son ejecutados sin ser evaluados) • El bloque default es opcional switch (<expresión>) { case <expresión>: . . . break; } default: . . . 51
![Ejemplo de switch public static void mainString args switch args length case Ejemplo de switch public static void main(String[] args) { switch (args. length) { case](https://slidetodoc.com/presentation_image_h/b5ec57dd355bff57b5d16b181b42bb2b/image-52.jpg)
Ejemplo de switch public static void main(String[] args) { switch (args. length) { case 0: File. Editor e = new File. Editor(); break; case 1: File. Editor e = new File. Editor(args[0]); break; default: // mensaje de error y fin } } 52

for • Sintaxis for (inicialización; condición; reinicialización) { sentencias } • Nota – inicialización y reinicialización pueden ser listas de expresiones separadas por comas 53

Ejemplo de for ( x=0; x<10; x++ ) { // ejecuta el bloque mientras x < 10 } for ( x=0, y=0; y<20; x++, y+=x ) { // ejecuta el bloque mientras y < 20 } 54

Etiquetas (Labels) • Los labels se usan típicamente en bloques y ciclos • Un label es un identificador seguido de dos puntos: Label 1: • El label identifica la siguiente sentencia 55

Ejemplo search: for (. . . ) { for (…) { if (. . . ) { break search; } } } 56

Arreglos • Un arreglo es un objeto • Colecciones ordenadas de elementos – Tipos de datos primitivos (int, …) – Referencias a objetos • El tamaño es definido en la creación (new) y no puede ser modificado 57
![Arreglos de Tipos Primitivos int x equivalente a int x x new Arreglos de Tipos Primitivos int[] x; // equivalente a int x[] x = new](https://slidetodoc.com/presentation_image_h/b5ec57dd355bff57b5d16b181b42bb2b/image-58.jpg)
Arreglos de Tipos Primitivos int[] x; // equivalente a int x[] x = new int[3]; x[0] = 10; x[1] = 20; x[2] = 30; X 10 20 30 Nota: x. length es una variable final que entrega el tamaño del arreglo 58
![Arreglos de Objetos Referencias X Circulo x x new Circulo3 x0 new Arreglos de Objetos Referencias X Circulo[] x; x = new Circulo[3]; x[0] = new](https://slidetodoc.com/presentation_image_h/b5ec57dd355bff57b5d16b181b42bb2b/image-59.jpg)
Arreglos de Objetos Referencias X Circulo[] x; x = new Circulo[3]; x[0] = new Circulo(); x[1] = new Circulo(); x[2] = new Circulo(); 59

Arreglos de Arreglos • Java permite crear arreglos de arreglos con la siguiente sintaxis int[][] matriz = new int[4][]; for (int i = 0; i < matriz. length; i++) { matriz[i] = new int[5]; for (int j = 0; j < matriz[i]. length; j++) { matriz[i][j] = i + j; } } 60
![Inicialización de Arreglos Un arreglo puede inicializarse con la siguiente sintaxis boolean respuestas Inicialización de Arreglos • Un arreglo puede inicializarse con la siguiente sintaxis: boolean[] respuestas](https://slidetodoc.com/presentation_image_h/b5ec57dd355bff57b5d16b181b42bb2b/image-61.jpg)
Inicialización de Arreglos • Un arreglo puede inicializarse con la siguiente sintaxis: boolean[] respuestas = {true, false, true}; String[] nombres = {"Ana María", "Carlos"}; Circulo[] circulos = { new Circulo(), new Circulo(20), new Circulo(5. 5) }; String[][] humor = { { "Coco Legrand", "Alvaro Salas" }, { "Les Luthiers" }, { "Groucho Marx", "Buster Keaton", "Jerry Lewis", "Woody Allen" } }; 61

for-each (desde Java 5. 0) • Java 5. 0 introdujo un for simplificado para recorrer arreglos y otras estructuras • El siguiente método retorna la suma de los elementos de un arreglo // Java 1. 4 o anterior int sum(int[] a) { int result = 0; for (int i=0; i<a. length; i++) { result += a[i]; } return result; } // Java 5. 0 int sum(int[] a) { int result = 0; for (int i : a) { result += i; } return result; } 62

String • En Java los strings son objetos de la clase String • Los objetos String son inmutables, es decir, permanecen con el string que se les asignó en la inicialización • Si se desea modificar un String, debe usarse la clase String. Buffer • Un literal de tipo String ("hola, mundo!") da origen a un objeto de tipo String instanciado por la máquina virtual 63

Concatenación de Strings • El operador + permite concatenar Strings • El operador + no modifica los operandos, sino que genera un nuevo objeto String con la concatenación String s 1 = "Hola"; String s 2 = ", mundo!"; s 1 = s 1 + s 2; // s 1: "Hola, mundo!" 64


Programa

Tipo Char

Caracteres y enteros import java. util. *; nclass Caracteres { n public static void main(String args[]) { n Scanner C = new Scanner(System. in); n System. out. print("ingrese numeros n 1 n 2 "); n int in = C. next. Int(), n fn = C. next. Int(); n for (int i = in; i <= fn; i++) n System. out. println(i+" <-> "+(char)i); n C. next. Line(); n System. out. print("ingrese letras x 1 Enter x 2"); n char ic = C. next. Line(). char. At(0), n fc = C. next. Line(). char. At(0); n for (int i = ic; i <= fc; i++) n System. out. println(i+" <-> "+(int)i); n } n} n

Métodos de Strings

Contar las apariciones de un carácter en un String

Más métodos

Función para respuesta “si” o “no”

Apariciones de un string en otro

Conversion entre números y Strings

String. Buffer y String. Builder • String. Buffer y String. Builder implementan una secuencia de caracteres modificable • String. Buffer realiza sincronización, y puede ser utilizado simultáneamente por múltiples threads • String. Builder (desde Java 5) no realiza sincronización, está orientado a ser utilizado sin concurrencia 75

Métodos de String. Buffer • String. Buffer(String str): crea un String. Buffer a partir de un String • String. Buffer append(int i): concatena la variable i en el String. Buffer • String. Buffer append(String str): concatena la variable str en el String. Buffer • String. Buffer delete(int start, int end): elimina el substring indicado 76

Métodos de String. Buffer • int length(): retorna el número de caracteres del String. Buffer • String. Buffer replace(int start, int end, String substr): reemplaza el substring entre start y end por substr • String substring(int start, int end): retorna un nuevo string con el substring indicado • String to. String(): retorna un nuevo String a partir del String. Buffer 77

La clase String. Tokenizer El Constructor de esta clase recibe un string (y optativamente también un separador). El string es separado en varios sub-strings, de acuerdo al separador (espacio si no se recibe nada). Estos pueden ser recuperados secuencialmente por el método next. Token(). También existe el método has. More. Tokens() que retorna true si todavía quedan más substrings por retornar. String s 1 = “we are a happy family” n. String. Tokenizer st = new String. Tokenizer(s 1); n n st n n n we n are n a n happy n family String s = st. get. Token(); s = “we” n st n are n a n happy n family

Ejemplos • Conversión de un número a string String s = String. value. Of(100); String s = new Double(100). to. String(); • Conversión de un string a número int i = Integer. parse. Int(s); int i = new Integer(s). int. Value(); 79

n n n Los Archivos de Texto Se organizan en líneas de texto (Strings) Cada línea consiste una cadena de caracteres que termina con una marca de fin de línea Después de la marca de fin de línea de la última línea viene una marca de fin de archivo Por convención tienen la extensión. txt Se generan con un editor de texto (sin formato) o por un programa

Escribiendo archivos de texto n Apertura de un archivo para escritura: Print. Writer x = new Print. Writer ( n new File. Writer(filename)) n Se pueden escribir líneas con los siguientes métodos: x. print(string) n x. println(string) Si existía un archivo con ese nombre se borra y es reemplazado por el que genere el programa Es importante hacer que al final se ejecute la instrucción n x. close() para asegurarse de que los datos que aún están en el buffer sean traspasados. Hay que reportar que se usan métodos que pueden causar excepciones con throws IOException •

Ejemplo: escritura Leer líneas que terminan con la palabra “fin” y grabarlas en un archivo en disco de nombre “archivo. txt”. import java. io. *; import java. util. *; class Crear. Archivo { static public void main(String[]args) throws IOException{ Print. Writer a=new Print. Writer( new File. Writer(“archivo. txt”)); Scanner U = new Scanner(System. in); while(true){ System. out. print (“linea(o fin)? “); String linea=U. next. Line() if( linea. equals(“fin”) ) break; a. println(linea); } a. close(); } } 82

Leyendo archivos de texto en JAVA n Abrir un archivo existente : Buffered. Reader x = new Buffered. Reader( new File. Reader(filename)) Las líneas pueden ser leídas de la siguiente manera: String line = x. read. Line() Archivos se tratan secuencialmente Si no quedan líneas por leer en el archivo, el método read. Line() retornará el valor null. Hay que “importar” las clases Buffered. Reader y File. Reader poniendo al comienzo del programa la instrucción import java. io. *; Hay que “reportar” las llamadas a métodos que pueden causar excepciones con throws IOException •

Ejemplo: lectura Leer líneas que terminan con la palabra “fin” y grabarlas en un archivo en disco de nombre “archivo. txt”. import java. io. *; class Leer. Archivo{ static public void main(String[]args) throws IOException { Buffered. Reader a = new Buffered. Reader( new File. Reader(“archivo. txt”)); while(true){ String linea=a. read. Line(); if(linea==null) break; System. out. println(linea); } a. close(); } 84 }

Encontrar alumno con nota mayor Lineas en el archivo “archivo. txt”: Nombre: nota Ej. Juan Perez: 6. 7 import java. io. *; class Leer. Archivo{ static public void main(String[] args) throws IOException { Buffered. Reader a = new Buffered. Reader( new File. Reader(“archivo. txt”)); String linea; String nombre; double notamax = 0. 0; while(linea=a. read. Line() != null){ int i = linea. index. Of(“: ”); double nota = Double. parse. Double(linea. substring(i+1)); if(nota > notamax) { notamax = nota; n nombre = linea. substring(0, i+1); } } a. close(); System. out. println(“Nombre: “+nombre+” Nota: “+notamax); } } 85

Otras Estructuras: Vector • Una implementación de lista enlazada eficiente • Puede contener objetos de cualquier clase • Ultimas versiones de java apuntan a que todos sean de una sola (super)clase Vector v = new Vector(); //crea un vector vacio v. add(“Hola”); v. add(new Scanner()); . . . //agregar elementos al final, v. add(5, “chao”); //agrega en el indice 5 //mostrar los elementos for(int i = 0; i < v. size(); i++) System. out. println(v. get(i). to. String()); 86

Generics: chequeo de tipos • Usando Generics se puede hacer que se chequee el tipo de objeto Vector<Tipo> v = new Vector<Tipo>(); Solo se pueden poner objetos de la Clase Tipo (o derivados) v. add(“Hola”); //produciría error de compilación 87

for-each (Java 5. 0) • For-each para Vectores (con uso de generics) // Java 1. 4 o anterior void close. All(Vector<Socket> c) { Iterator i = c. iterator(); while (i. has. Next()) { Socket t = (Socket)i. next(); t. close(); } } // Java 5. 0 void cancel. All(Vector<Socket> c) { for (Socket t : c) { t. close(); } } 88

Otras Estructuras: Hashtable • Una implementación de un diccionario eficiente • Conviene usarlo con Generics Hashtable<String, Integer> h = new Hashtable<String, Integer>(); //crea una tabla de Hashing vacía //Integer: clase Wrapper de int (Double, Char, . . . ) Integer i = new Integer(5); h. put(“Palabra”, i); Integer x = h. get(“Palabra”); int c = x. int. Value()+1; Enumeration e = x. keys(); 89

Otras Estructuras: Enumeration • Los objetos Enumeration se crean como resultado de aplicar una funcion a una estructura • Retornan una enumeracion de los elementod de esa estructura que se pueden recorrer Enumeration e = x. keys(); x. has. More. Elements() (true o false) x. next. Element() retorna el siguiente elemento while( x. has. More. Tokens()) { String s = (String)x. next. Element(); Integer I = x. get(s); System. out. println(s+” “+i); } 90

Autoboxing (Java 5. 0) • A partir de Java 5. 0, la conversión entre tipos primitivos y objetos (entre int e Integer, Integer por ejemplo) se produce de manera automática cuando se requiere – import java. util. *; // Imprime la frecuencia de los parámetros public class Frequency { public static void main(String[] args) { Hashtable<String, Integer> m = new Hashtable<String, Integer>(); for (String word : args) { Integer fr = m. get(word); m. put(word, (fr == null ? 1 : fr + 1)); } System. out. println(m); } } 91

Clases "Wrapper" • Boolean, Boolean Byte, Byte Char, Char Double, Double Float, Float Integer, Integer Long, Long Number, Number y Short • Almacenan un valor de un tipo primitivo en un objeto • Del mismo modo que la clase String, estas clases son inmutables • Proveen métodos para manipular y convertir los valores 92

Métodos de Integer(int value): constructor Integer(String value): constructor boolean equals(Object o): compara con otro objeto int. Value(): retorna el valor del objeto como un int static int parse. Int(String s): parsea el string y retorna un int • String to. String(): retorna el objeto como string • static String to. String(int n): retorna el int indicado como un string • • • 93

Ejercicio 1 • Se tienen dos archivos: items. txt y ventas. txt • Items tiene por cada línea el código de un producto y el stock actual Ej: 12345 56 • Ventas tiene por cada línea el código de un producto y cuanto se vendió EJ: 12345 20 • Generar un archivo llamado stockfinal. txt con el stock para cada producto después de descontar las ventas del día 94

Algoritmo sugerido Crear tabla de hashing con formato <String, Integer> abrir archivo stock. txt para lectura por cada linea: sacar el codigo y el stock, poner en la tabla el par (codigo, stock) abrir archivo ventas. txt por cada linea: sacar el codigo y la venta obtener el par (codigo, stock) correspondiente actualizar stock restandole la venta abrir archivo stockfinal para escritura por cada par (codigo, stock) de la tabla escribir en el archivo codigo+” “+stock Cerrar archivos 95