gravatar

04 Curso de Java OO. Trabajando con arreglos


Resumen:
Se estudiara el uso de arreglos y cadenas en la solución de problemas en Java.

I. DEFINICION DE ARREGLOS
1.1 Definición Un arreglo es una colección de variables del mismo tipo. La longitud de un arreglo es fijo cuando se crea.

Pasos de la creación de arreglos de primitivas
Se declara el arreglo
Inicialmente la variable referencia un valor nulo
int[] potencias; //forma mas usada
int potencias[];


Frame2
Se crea el arreglo
Se requiere la longitud del arreglo
potencias = new int[4];
En caso de variables primitivas se inician en 0 o false. Las primitivas no se pueden operar con el valor null.
En caso de variables referencia se inician en null. No referencian a ningún objeto.
Frame3
Se inicia los valores del arreglo
Se asignan valores elemento por elemento
potencias[0] = 1;
potencias[1] = 2;
potencias[2] = 4;
potencias[3] = 8;
Los arreglos pueden ser creados e iniciados al mismo tiempo
int[] potencias = {1,2,4,8};

Frame5

Los arreglos son muy usados para buscar datos, especialmente si se conocen sus valores cuando se crean. int[] diasMesesAnioBisiesto = {31,29,31,30,31,30,31,31,30,31,30,31};
1.2. Practica Guiada

Los elementos de un arreglo inician con el valor por defecto de una primitiva.
La propiedad length del arreglo es su longitud.
Cual es el resultado los siguientes bloques.

Encuentre 3 errores en el siguiente código.
// bloque 1
int[] numeros = new int[5];
System.out.println(numeros.length-1);
// bloque 2
int[] truco = new int[3];
System.out.println(truco[0]);
// bloque 3
int[] cubos = {1, 8, 27, 64, 125};
int indice = cubos.length;
System.out.println(cubos[indice]);
// bloque 4
int[] pares = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
int cantidad = 0;
while (pares[cantidad] != null) {
cantidad++;
}
// bloque 5
char[] vocales;
System.out.println(vocales.length);

Encuentre cuatro errores en el siguiente código

1. int[] a= new int[20];
2. float[] b= new float[10];
3. int a2 = new int[20];
4. int[] b2 = new float[10];
5. a[2] = -5;
6. a[4] = 10;
7. int k = a[6];
8. a[k] = 20;
9. a[20] = 0;
10. a[3] = 1.1;

Errores:
Ocurre ArrayIndexOutOfBoundsException cuando el índice del arreglo es incorrecto.
Ocurre NullPointerException cuando se intenta acceder a un elemento no inicializado.
Una primitiva no se puede comparar o asignar con un valor null.
Solo las referencias se comparan con null

2. ARREGLOS MULTIDIMENSIONALES

Se trata de arreglos de arreglos y se declara de la siguiente forma:

tipo[][] nombreArreglo = new tipo[cantidadFilas][cantidadColumnas];
int[][] tabla = new int[4][2];
tabla[0][0] = 1;
tabla[0][1] = 7;
tabla[1][0] = 3;
tabla[1][1] = 5;
tabla[2][0] = 4;
tabla[2][1] = 8;


Definir una matriz de enteros colocando como valores la suma de su numero de fila y columna en la matriz
{
int n= 10;
int p= 20;
double[][] m = new double[n][p];
for (int i= 0; i<n; i++)
for (int j= 0; j<p; j++)
m[i][j]= i+j;
}

3. LABORATORIO
3.1 Ejercicio
Se tiene en un arreglo las notas del examen parcial de 10 alumnos. Encuentre la mínima y máxima nota.

Notas.java
package ejercicios;
public class Notas {

public static void main(String[] args) {
int[] notas = {12, 04, 07, 18, 10, 15, 05, 16, 18, 11};

int i = 0;
double min= 20.1;
double max= 00.0;
while (i < 10) {
...
i++;
}
System.out.println(max);
System.out.println(min);
}
}

3.2. Ejercicio
Se cuenta con los arreglos siete y ocho
Multiplicar el primer elemento del arreglo siete con el primer elemento del arreglo ocho y así sucesivamente. Almacenar el resultado en otro arreglo y muéstrelo.
Matriz.java
package ejercicios;
public class Matriz {
public static void main(String[] args) {
int[] siete = {7,17,27,37,47,57,67,77,87,97,107};
int[] ocho = {8,18,28,38,48,58,68,98,108,118,198};
...
}
}

4. CADENAS.

4.1. Definición.
Una cadena es una secuencia de caracteres
La librería String (o clase String) se usa para definir todas las cadenas en Java.
Las cadenas se delimitan con comillas dobles.

//
System.out.println("Hola Mundo.");
String camara = "Camara";
String luces = camara +" Accion";
String vacio = "";
//

4.2. Construccion de cadenas.
También se puede usar la siguiente sintaxis para construir cadenas.
// con una constante
String nombreEmpleado = new String("R. Daneel Olivaw");
// con una cadena vacia
String inicio = new String();
// copiando una cadena
String copiaEmpleado = new String(nombreEmpleado);
// con un arreglo de char
char[] vocales = {'a','e','i','o','u'};
String cadenaVocales = new String(vocales);

4.3. Concatenacion.

Para concatenar cadenas puede usar lo siguiente:
// Usando el operador +
System.out.println(" Nombre = " + nombreEmpleado );
// Puede concatenar primitivas y cadenas.
int edad = 22;
System.out.println(" Edad = " + edad );
// Mediante la función concat()
String nombre = "Elijah ";
String apellidos = "Baley ";
String nombreCompleto = nombre.concat(apellidos);

5. OPERACIONES CON CADENAS.

5.1. Longitud de una cadena.

String nombre = "Hari Seldon";
int longitud = nombre.length();
> 11

5.2. Ubicar un carácter mediante un indice

String nombre = "Gladia Delmarre";
char c = nombre.charAt(0);
> G

5.3. Extraer una subcadena

//               0123456789012345

String nombre = "Blissenobiarella";


//               1234567890123456


String subCadena = nombre.substring(2,6);


> isse


5.4. Convertir a mayúsculas o minúsculas.

String titulo = "Segunda Fundacion";
String mayusculas = titulo.toUpperCase();
String minusculas = titulo.toLowerCase();
> SEGUNDA FUNDACION
> segunda fundacion

5.5. Eliminar espacios del inicio y el final de la cadena.

String autor = " Isaac Asimov ";
String resaltar = "*"+autor.trim()+"*";
> *Isaac Asimov*

5.6. Ubicar una subcadena desde una ubicación.

// 0123456789012
String alcalde = "Salvor Hardin";
int ubicacion1 = alcalde.indexOf("vor");
int ubicacion2 = alcalde.indexOf("r",7);
int ubicacion3 = alcalde.indexOf("h");
> 3
> 9
> 0

5.7. Comparando dos cadenas.

String password = "FGHPUW";
if password.equals("fgHPUw")

System.out.println("Correcto!");

else

System.out.println("Error!");

> Error!

String password = "FGHPUW";
if password.equalsIgnoreCase("fgHPUw")
System.out.println("Correcto!");
else
System.out.println("Error!");

> Correcto!

5.8. Comparando regiones de una cadena.

String url = "http://www.uni.edu.pe";

if (url.endsWith(".pe"))
System.out.println("Pagina Nacional");
else
System.out.println("Pagina Extranjera");


String parametro = "ip = 192.100.51.2";
if (parametro.startsWith("ip"))
System.out.println("La direccion "+parametro);
else
System.out.println("El parámetro no es una ip");


5.9. Obtener cadenas desde las primitivas.
Se utilizan funciones de la librería String

String seven = String.valueOf(7);
String unoPuntoUno = String.valueOf(1.1);
float pi = 3.141592;
String piString = String.valueOf(pi);
//

5.10. Obtener primitivas desde las cadenas.
Para esto se utilizan funciones de las librerías Integer y Float.

//
String alfa = "1977";
int alfaInteger = Integer.parseInt(alfa);
//
String beta = "19.77";
float betaFloat = Float.parseFloat(beta);

5.11. EJERCICIOS
Cual es la respuesta de:

public class Cadenas {

public static void main (String [] args) {

// Bloque 1
String s = new String("Viernes");
if (s=="Viernes")
System.out.println("Respuesta A");

if (s.equals("Viernes"))
System.out.println("Respuesta B");

// Bloque 2
int num1 = 1234567;
System.out.println(String.valueOf(num1).charAt(3));

// Bloque 3
String s1 = "Lunes";
String s2 = "Martes";
System.out.println(s1.concat(s2).substring(4,8));

// Bloque 4
// s3 inicia con 2 espacios y tambien termina con 2.
String s3 = " Lunes ";
System.out.println(s3.indexOf("es"));
System.out.println(s3.trim().indexOf("es"));

}
}

6. ARREGLOS DE CADENAS

6.1. Definicion
Un arreglo de cadenas también sigue los pasos de creación de arreglos.


Declaracion

String [] categorías;
Creación

categorias = new String[3];
Iniciación.

categorias[0] = "Drama";

// Creando una arreglo de cadenas vacias.
String [] arreglo = new String [4];
for ( int i = 0; i < arreglo.length; i++ ) {
arreglo[i] = new String();
}

// Creando e iniciando un arreglo.
String [] categorias = {"Drama", "Comedia", "Accion"};

// Accesando los elementos del arreglo
String [] categorias = {"Drama", "Comedia", "Accion"};
System.out.println(" Comedia = "+ categorías[1].length() );

6.2. Ejercicios
Cual es el resultado de:

//
String [] categorias = {"Drama", "Comedia", "Accion", "Infantil"};
int indice = categorías.length – 2;
System.out.println(categorías[indice].length() );


7. MAIN
main() cuenta con un único parámetro que es un arreglo de cadenas.
Este arreglo de cadenas son los parámetros de la linea de comandos.

C:\> java Eco Hola Mundo
// Eco.java
package ejercicios;
public class Eco {

public static void main (String [] args) {

if (args.length != 2)
System.out.println("Uso: java Eco Arg1 Arg2");
else
System.out.println(args[0] + " " + args[1]);

}

}

LABORATORIO
Cree la clase Cliente que tendrá los siguiente datos id (int) nombre, direccion, telefono (String)
La clase debe contar con dos constructores.
Uno sin argumentos para autogenerar el id (que inicia en cero).
Otro que aceptara los datos nombre, dirección, teléfono.
El código del cliente debe ser automático e incrementarse en uno cada vez que se cree una instancia. Los códigos inician en 2001
Opcionalmente agregue los métodos set y get para estos atributos.
También agregue el método toString() para mostrar los datos del cliente así como el código creado automáticamente.

Cree la clase Pelicula con los siguientes datos: id (int) titulo, tipo (String) precio (float),
La clase debe contar con dos constructores.
Uno sin argumentos para autogenerar el id (que inicia en 1).
Otro que aceptara los datos titulo, tipo, precio .
El código de la Pelicula debe ser automático e incrementarse en uno cada vez que se cree una instancia. Los códigos inician en 9001
Opcionalmente agregue los métodos set y get para estos atributos.
También agregue el método toString() para mostrar los datos de la pelicula incluido el código autogenerado.

Cliente.java
public class Cliente {

private int id;
private static int ultimoId=2000;
private String nombre;
private String direccion;
private String telefono;

public Cliente() {
this.id = ultimoId;
ultimoId++;
}

public Cliente(String nombre, String nuevaDireccion, String nuevoTelefono) {
this();
this.nombre = nombre;
this.direccion = nuevaDireccion;
this.telefono = nuevoTelefono;
}
public void setNombre(String nuevoNombre) {
nombre = nuevoNombre;
}
public void setDireccion(String nuevoDireccion) {
direccion = nuevoDireccion;
}
public void setTelefono(String nuevoTelefono) {
telefono = nuevoTelefono;
}
public int getId() {
return id;
}
public static int getUltimoId() {
return ultimoId;
}
public String getNombre() {
return nombre;
}
public String getDireccion() {
return direccion;
}
public String getTelefono() {
return telefono;
}
public String toString(){
return ("Codigo : "+id+" "+nombre+" "+direccion+" "+telefono);
}
}
//...
Pelicula.java
public class Pelicula {

private int id;
private static int ultimoId=9000;
private String titulo;
private String tipo;
private float precio;

public Pelicula() {
this.id = ultimoId;
ultimoId++;
}
public Pelicula(String nuevoTitulo,String nuevoTipo) {
this();
this.titulo = nuevoTitulo;
this.tipo = nuevoTipo;
}
public void setTitulo(String nuevoTitulo) {
titulo = nuevoTitulo;
}
public void setTipo(String nuevoTipo) {
tipo = nuevoTipo;
}
public void setPrecio(float nuevoPrecio) {
precio = nuevoPrecio;
}
public String getTitulo() {
return titulo;
}
public String getTipo() {
return tipo;
}
public int getId() {
return id;
}
public float getPrecio() {
return id;
}
public static int getUltimoId() {
return ultimoId;
}
public String toString() {
return ("Codigo : "+id+" "+titulo+" "+tipo);
}
}

Defina la clase BaseDeDatos con tres métodos: en el primero creara 4 clientes (nombres familiares) y 6 peliculas (que haya visto en cine o televisión). Los clientes y las películas se encontraran en un arreglo. El segundo devolvera el objeto cliente ingresando el id del cliente. El tercero realizara lo mismo con el id de una pelicula.

BaseDeDatos.java
package tacora;
public class BaseDeDatos {

private static Cliente[] cliente = new Cliente[4];
private static Pelicula[] pelicula = new Pelicula[6];

public BaseDeDatos() {
cliente[0] = new Cliente("Daneel Olivaw","Solaria 4", "511-711-2542");
//...
pelicula[0] = new Pelicula("Neverland","Drama",10.0f);
//...
}

public static Cliente getCliente(int id) {
for (...) {
break;
}
return cliente[];
}
public static Pelicula getPelicula(int id) ...
}

Cree la aplicación Arreglos que permita Cargar la base de datos y mostrar los datos del cliente con codigo 2002 y la pelicula con codigo 9003

TacoraArreglos.java
package tacora;
public class TacoraArreglos {

public static void main (String[] args) {

int clienteId;
int peliculaId;

if (args.length != 2)
System.out.println("java TacoraArreglos 2002 9003");
else {
clienteId = Integer.parseInt(args[0]);
peliculaId = Integer.parseInt(args[1]);
}
BaseDeDatos bd = new BaseDeDatos();
System.out.println(BaseDeDatos.getCliente(clienteId ));
System.out.println(BaseDeDatos.getPelicula(peliculaId));
}

}

Segunda Parte
Modifique la clase Pelicula y agregue el atributo: cliente (Cliente) que sera quien alquile la pelicula, implemente el método set y get correspondientes.
Modifique la clase Cliente y agregue el atributo: importeAlquiler (float) implemente su métodos set y get correspondiente.
Modifique la clase BaseDeDatos y agregue un método que permite calcular el importe de alquiler de un cliente. La aplicación debe permitir realizar el alquiler de 3 películas al cliente 2002 y muestre su costo.

Pelicula.java
package tacora;
public class Pelicula {
         private Cliente cliente;
        //...
          public void setCliente(Cliente alquiladoPor) {
        cliente = alquiladoPor;
         }
}

Cliente.java
package tacora;
public class Cliente {

private float importeAlquiler;
//...
}
BaseDeDatos.java
package tacora;
public class BaseDeDatos {
//...
public static float getImporte(Cliente cliente) {

Pelicula pelicula = null;
float importe = 0;
for (int i = 0;...) {
if (pelicula[i].getCliente().getId() == cliente.getId()) {
importe += pelicula[i].getPrecio();
}
}
return importe;
}
}

TacoraArreglos.java
package tacora;
public class TacoraArreglos {

public static void main (String[] args) {

int clienteId;
int peliculaId1;
int peliculaId2;
int peliculaId3;

if (args.length != 4)
System.out.println("java TacoraArreglos 2002 9001 9002 9003");
else {
clienteId = args[0];
peliculaId1= args[1];
peliculaId2= args[2];
peliculaId3= args[3];
}
BaseDeDatos bd = new BaseDeDatos();

Cliente cliente = bd.getCliente(clienteId);
Pelicula pelicula1 = bd.getPelicula(peliculaId1);
pelicula1.setCliente(cliente);
Pelicula pelicula2 = bd.getPelicula(peliculaId2);
pelicula2.setCliente(cliente);
bd.getPelicula(peliculaId3).setCliente(cliente);

System.out.println(cliente);

System.out.println(pelicula1);
System.out.println(pelicula2);
System.out.println(bd.getPelicula(peliculaId3));

System.out.println(bd.getImporte(cliente));
}
}