Nychol Bazurto Gómez
Matrices
Persistencia
Construcción de un programa
Contenedoras de dos dimensiones de tamaño fijo cuyos elementos son referenciados utilizando dos índices: índice de la fila e índice de la columna.
| 0,0 | 0,1 | 0,4 | ||
|---|---|---|---|---|
| 1,0 | ||||
| 3,3 | ||||
| 5,2 | ||||
| 6,4 |
public class Imagen
{
//--------------------------------------
// Atributos
//--------------------------------------
private int ancho;
private int alto;
private Color[][] bitmap;
}Es conveniente declarar el número de columnas (ancho) y el número de filas (ancho) como atributos. Esto va a facilitar realizar posteriores modificaciones al programa.
private <tipoDato> [ ][ ] >nombreMatriz>;
// Constructor
//--------------------------------------
public Imagen( )
{
ancho = 400;
alto = 300;
bitmap = new Color[ alto ][ ancho ];
}nombreMatriz = new <tipoDato>[filas][columnas];
Para filas y columnas se pueden usar constantes.
Al inicializar la matriz, se construye una matriz con el número de filas y columnas dadas, pero dentro de cada casilla de la matriz no hay valores asignados, por lo que se debe inicializar cada casilla. Esto se puede hacer una por una, o con un for doble.
bitmap[ 0 ][ 1 ] = new Color( 0, 0, 255 );public void imagenAzul( )
{
for( int i = 0; i < alto; i++ )
{
for( int j = 0; j < ancho; j++ )
{
bitmap[ i ][ j ] = new Color( 0, 0, 255 );
}
}
}
for( int i = 0; i < FILAS; i++ )
{
for( int j = 0; j < COLUMNAS; j++ )
{
//...
}
}Comienza en la fila 0 (int i = 0) y columna 0 (int j = 0), esto es la casilla superior izquierda (resaltada en azul).
for( int i = 0; i < FILAS; i++ )
{
for( int j = 0; j < COLUMNAS; j++ )
{
//...
}
}En la siguiente iteración j aumenta en 1 (j++) entonces la casilla actual es 0,1
for( int i = 0; i < FILAS; i++ )
{
for( int j = 0; j < COLUMNAS; j++ )
{
//...
}
}En la siguiente iteración j aumenta en 1 (j++) entonces la casilla actual es 0,2
for( int i = 0; i < FILAS; i++ )
{
for( int j = 0; j < COLUMNAS; j++ )
{
//...
}
}En la siguiente iteración j aumenta en 1 (j++) entonces la casilla actual es 0,3
for( int i = 0; i < FILAS; i++ )
{
for( int j = 0; j < COLUMNAS; j++ )
{
//...
}
}
for( int i = 0; i < FILAS; i++ )
{
for( int j = 0; j < COLUMNAS; j++ )
{
//...
}
}
for( int i = 0; i < FILAS; i++ )
{
for( int j = 0; j < COLUMNAS; j++ )
{
//...
}
}...CONTINUEMOS...
for( int i = 0; i < FILAS; i++ )
{
for( int j = 0; j < COLUMNAS; j++ )
{
//...
}
}...CONTINUEMOS...
–Se comparan con el operador ==.
Guardar los datos resultado de un programa en un archivo para hacerlos persistentes cuando la aplicación termine.
En APO1 … introducción a persistencia:
Leer y cargar los datos de un archivo para configurar el estado inicial de los elementos del mundo.
Abrir una imagen.
Leer la información para configurar el estado inicial del mundo.
Una entidad que contiene información y que es almacenada en la memoria secundaria del computador (disco duro, CD, unidad USB, diskette …).
El nombre tiene una ruta (camino o path en inglés) y el nombre corto propiamente dicho
c:/dev/uniandes/cupi2/empleado/mundo/Empleado.java
c:/dev/uniandes/cupi2/empleado/mundo/Empleado.java
describe la estructura de directorios dentro de los cuales se encuentra el archivo
Para hacer esta carga se utilizará un archivo de propiedades y una clase de Java que se llama Properties.
<nombre>=<valor>
1. Solicitar la selección del archivo de propiedades
1. Solicitar la selección del archivo de propiedades
public class InterfazCampeonato extends JFrame
{
public void cargarEquipos( )
{
...
JFileChooser fc = new JFileChooser( "./data" );
fc.setDialogTitle("Abrir archivo de campeonato");
File archivoCampeonato = null;
int resultado = fc.showOpenDialog( this );
if( resultado == JFileChooser.APPROVE_OPTION )
{
archivoCampeonato = fc.getSelectedFile( );
campeonato = new Campeonato( archivoCampeonato );
}
}
...
}Obtuvo un objeto de la clase File que representa el archivo que el usuario quiere cargar en memoria.
2. Inicialización del estado de la aplicación
public class InterfazCampeonato extends JFrame
{
public void cargarEquipos( )
{
...
JFileChooser fc = new JFileChooser( "./data" );
fc.setDialogTitle("Abrir archivo de campeonato");
File archivoCampeonato = null;
int resultado = fc.showOpenDialog( this );
if( resultado == JFileChooser.APPROVE_OPTION )
{
archivoCampeonato = fc.getSelectedFile( );
campeonato = new Campeonato( archivoCampeonato );
}
}
...
}Se crea el objeto campeonato, que recibe el archivo.
2. Inicialización del estado de la aplicación
//---------------------------------------
// Constructor
//---------------------------------------
public Campeonato( File pArchivo ) throws Exception
{
Properties datos = cargarInfoCampeonato( pArchivo );
inicializarEquipos( datos );
inicializarTablaGoles( );
}2. Inicialización del estado de la aplicación
private Properties cargarInfoCampeonato( File pArchivo ) throws Exception
{
Properties datos = new Properties( );
FileInputStream in = new FileInputStream( pArchivo );
try
{
datos.load( in );
in.close( );
}
catch( Exception e )
{
throw new Exception( "Formato inválido" );
}
return datos;
}2. Inicialización del estado de la aplicación
private void inicializarTablaGoles( )
{
tablaGoles = new int[ maxEquipos ][ maxEquipos ];
for( int i = 0; i < maxEquipos; i++ )
{
for( int j = 0; j < maxEquipos; j++ )
{
if( i != j )
{
tablaGoles[ i ][ j ] = SIN_JUGAR;
}
else
{
tablaGoles[ i ][ j ] = INVALIDO;
}
}
}
}2. Inicialización del estado de la aplicación
private void inicializarEquipos( Properties pDatos )
{
String strNumeroEquipos = pDatos.getProperty( "campeonato.equipos" );
maxEquipos = Integer.parseInt( strNumeroEquipos );
equipos = new Equipo[ maxEquipos ];
for( int i = 0; i < maxEquipos; i++ )
{
String nombreEquipo = datos.getProperty( "campeonato.nombre" + i);
equipos[ i ]= new Equipo( nombreEquipo );
}
}