java. arreglos declaración preferida de un arreglo: int[] a; declaración compatible con c: int...

28
Java

Upload: daniel-molina-carmona

Post on 23-Jan-2016

226 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

Java

Page 2: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

Arreglos

• Declaración preferida de un arreglo:

int[] A; • Declaración compatible con C:

int A[];

Page 3: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

Arreglos

• En Java, la declaración de un arreglo es similar a la declaración de un puntero en C:

Page 4: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

• Errores típicos con arreglos:

int A[10]; // Ahí no va el tamaño!

int[] A; // Ok

A[1]= 100; // Todavía no se ha pedido

// espacio para el arreglo.

Page 5: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

• Petición de espacio para un arreglo:

int[] A;

A= new int[10];

A[1]= 100; // Ahora sí!

Page 6: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

Los argumentos de un programa

Al ejecutar un programa en la ventana de comandos, el usuario puede especificar argumentos:

java Hello Hola que tal Los argumentos "Hola", "que" y "tal" se reciben en un arreglos de strings en el main:

public static void main(String[] args) { ... } – args[0] es "Hola" – args[1] es "que" – args[2] es "tal"

Page 7: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

• Ejemplo: Un programa que despliega todos los argumentos que recibe desde la línea de comandos.

• Ejecute el siguiente comando en la ventana de DOS: • java Echo Hola que tal • El código de Echo.java es: public class Echo { public static void main (String[] args) { for (int i=0; <args.length; i++)

System.out.println(args[i]); } }

Page 8: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

public class Suma { public static void main (String[] args) {

// Un arreglo de 4 enteros: int[] a= new int[4]; a[0]= 1; a[1]= 5; a[2]= 20; a[3]= 15; // (estas dos instrucciones se pueden resumir en una sola: // int[] a={1, 5, 20, 15}; )

// Un segundo arreglo de 4 enteros con la inicializacion abreviada: int[] b= {2, 3, 23, 4};

// Esta es la parte que tiene que hacer Ud.

Construya un arreglo de ``a.length'' enteros y asígnelo a una variable c (de tipo arreglo de enteros).

Haga un ciclo haciendo que una variable entera i tome valores desde 0 hasta a.length-1

En cada iteración sume el i-ésimo elemento de a con el i-ésimo elemento de b y asigne el resultado al i-ésimo elemento de c

// Desplagamos el resultado: for (int i=0; i<c.length; i++) System.out.println("c["+i+"]= "+c[i]); Consola.esperar(); }}

Page 9: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

Ejercicio

• Realice la suma de vectores siguiendo las instrucciones que aparecen en el ejemplo anterior.

Page 10: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

Propuesto: Frecuencia de números

• Haga un programa que determine cuantas veces aparece cada número entero especificado en la línea de comandos. Ejemplo:

• java Frec 4 6 6 6 10 1000• 4 -> 1 6 -> 3 10 -> 1 Sólo considere los

números enteros que estén entre 0 y 99. Obs.: Para obtener el valor entero almacenado en el string s utilice Integer.parseInt(s).

Page 11: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

Respuestapublic class Frec { public static void main (String[] args) { int[] F= new int[100]; // Con índices de 0 a 99

for (int i= 0; i<args.length; i++) { int num= Integer.parseInt(args[i]); if (num>=0 && num<100) F[num]++; // o bien F[num]= F[num]+1; }

for (int j=0; j<F.length; j++) if (F[j]!=0) System.out.println(j+" -> "+F[j]); }}

Page 12: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

Objetos y Clases

• Un objeto es un tipo de datos abstracto. • Los objetos se crean con el operador new: • new Animator(); • new Box(Color.black, Color.red, 20, 25,

30, 15); • Al operador new se le indica la clase del

objeto que se desea crear. • Los argumentos indicados son los

atributos del objeto.

Page 13: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

• La clase de un objeto determina las operaciones (métodos) que acepta ese objeto.

Page 14: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

Para conocer un objeto es necesario tener una referencia de él:

Animator anim; Box box;

• Una variable referencia un objeto creado con new. La variable no contiene el objeto.

• El tipo de la variable indica la clase de objetos que podrá referenciar.

anim= new Animator(); box= new Box(Color.black, Color.red, 20, 25, 30,

15); box= new Animator(); // ¡Error en compilación!

Page 15: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

• Invocación de métodos:

anim.push(box);

box.moveTo(100,200);

Page 16: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

• Las variables en Java referencian objetos. • Las variables de tipos no primitivos son

punteros. • La asignación Box box2= box; hace que

las variables box y box2 referencien el mismo objeto.

• Sólo las variables de tipos primitivos contienen directamente los valores (int, double, boolean, etc.).

Page 17: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

La referencia nula: null

• Agregue el siguiente código:

• Box box3= null; anim.push(box3);

Page 18: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

• java.lang.NullPointerException: at Scenes.Scene.addAfter(Scene.java:64) at Scenes.Scene.push(Scene.java:86) at Game.main(Game.java:27)

• Una variable asignada con null no referencia ningún objeto. Si se intenta realizar cualquier operación con él se produce un NullPointerException.

Page 19: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

Subclases

• La clase Grob tiene subclases: Box, Text, Ellipse.

• Los objetos de la subclase también pertenecen a la clase.

• Las operaciones de la clase también son válidas en objetos de la subclase.

• Proyección: Una variable de tipo Grob también puede referenciar objetos de cualquiera de las subclases de Grob.

• Grob go= box;

Page 20: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

Bibliotecas de Clases

• Java ofrece una enorme biblioteca estándar de clases: Java Platform Core API.

• Todas las implementaciones de Java 1.1 implementan esta API.

• La API se organiza en paquetes de clases.

• Para poder usar el paquete java.io: • import java.io.*;

Page 21: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

Entrada/Salida en Java

• Para leer un archivo por líneas: BufferedReader reader= new BufferedReader(new

FileReader(args[0]));

String linea= reader.readLine();

while(linea!=null) {

System.out.println(linea);

linea= reader.readLine();

}

Page 22: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

Excepciones

• En la API se indica que ciertos métodos lanzan (throws) excepciones.

• Una excepción es una eventual situación de error que se podría producir al invocar un método. Ejemplo: El archivo no existe.

• Java encausa la programación de aplicaciones robustas forzando a que los programadores manejen todas las excepciones.

• Una excepción es un objeto de la clase Exception.

Page 23: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

Excepciones

• Forma simple de manejar una excepción E:

• El método declara que lanza esa excepción (throws E).

• public static void main(String[] args) throws IOException { ... } Ejecute el programa colocando cualquier archivo de texto como argumento del programa en la línea de comandos.

Page 24: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

• Forma recomendada de manejar una excepción E:

• Atrapar la excepción con:

• try { instrucciones } catch ( tipo-excepción variable ) { instrucciones }

Page 25: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

public static void main(String[] args) // sin throws

{ try

{ coloque aquí todo el cuerpo del main }

catch ( IOException e ) {

System.err.println("Se produjo un error de E/S");

}

}

Page 26: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

Constructores

• Un constructor es un método que lleva el mismo nombre de la clase.

• Se invoca automáticamente cada vez que se crea un nuevo objeto.

• Sirve para inicializar las variables de instancia del objeto.

• Un constructor puede incluir parámetros. Estos parámetros se enlazan con los argumentos especificados al crear un objeto con new.

• Una clase puede definir varios constructores con distintos tipos de argumentos (sobrecarga).

Page 27: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

• Ejemplo: el constructor de Punto. public class Punto { int x,y; // Variables de instancia public Punto(int x, int y) { // El constructor this.x= x; this.y= y; } ... }

Page 28: Java. Arreglos Declaración preferida de un arreglo: int[] A; Declaración compatible con C: int A[];

• Ejercicio: se desea agregar un nuevo constructor a la clase Punto que reciba como argumento otro punto. El punto creado debe quedar en las mismas coordenadas que el punto recibido.

• Ejemplo de uso: • Punto p= new Punto(10,10); Punto q=

new Punto(q); • System.out.println(q); // (10,10)