1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
/* Ejercicio: 2x3x01 Fecha: 04/10/2012 Enunciado: A partir de la clase punto... implementar los siguientes apartados. */ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; public class _2x3x01 { /* a) Se pide escribir una clase EjercicioSerial2 donde se defina un método estático de nombre almacenarColPuntosEnArchivo que reciba una colección de objetos de la clase Punto. El método también recibirá por parámetro el nombre de un archivo para volcar sobre él la INFORMACION de los objetos Punto contenidos en la colección. El método no capturará ninguna excepción. */ public static void almacenarColPuntosEnArchivo(Punto[] pts, String file) throws IOException { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File(file), false)); // Revisar: Al poner TRUE no funciona una vez creado el fichero. for( Punto p : pts ) { oos.writeObject(p.obtenerCoordX()); oos.writeObject(p.obtenerCoordY()); oos.writeObject(p.obtenerColor()); } oos.close(); } /* b) Añadir a la clase anterior un método estático, de nombre obtenerArrayListDeArchivo, que reciba por parámetro el nombre de un archivo con los datos correspondientes a varios objetos de la clase Punto. El método construirá y devolverá un objeto ArrayList<Punto> con los datos de los puntos leídos del archivo especificado. El método no capturará ninguna excepción. */ public static ArrayList<Punto> obtenerArrayListDeArchivo(String file) throws IOException, ClassNotFoundException { FileInputStream fis = new FileInputStream(new File(file)); ObjectInputStream ois = new ObjectInputStream(fis); ArrayList<Punto> arrayPunto = new ArrayList<>(); while( fis.available() > 0 ) arrayPunto.add(new Punto((Integer)ois.readObject(), (Integer)ois.readObject(), (String)ois.readObject())); ois.close(); fis.close(); return arrayPunto; } /* c) Añadir a la clase anterior un método main() para comprobar el funcionamiento de los métodos estáticos de los dos apartados anteriores. Se crearán varios objetos Punto que se almacenarán en un array. A partir del array se obtendrá una colección para guardar sus elementos en un archivo. Para finalizar se obtendrá un objeto ArrayList<Punto> con los objetos Punto creados a partir de los datos almacenados en el archivo. */ public static void main(String[] args) throws IOException, ClassNotFoundException { // PRIMERA PARTE: // Se crea una tabla con puntos: Punto[] puntos = { new Punto(5, 10, "red"), new Punto(25, 120, "green"), new Punto(45, -10, "white") }; // Se almacena la tabla: almacenarColPuntosEnArchivo(puntos, "puntos.dat"); // Se lee la informacion guardada y se mete en un ArrayList de Puntos ArrayList<Punto> arrayPunto = obtenerArrayListDeArchivo("puntos.dat"); // Se imprimen los datos de los puntos: for( Punto p : arrayPunto ) System.out.println(p.toString()); // SEGUNDA PARTE: // Se guarda la coleccion de puntos en un fichero2, despues se lee y se recupera en un array2: almacenarColPuntosComoObjetos(puntos, "puntos2.dat"); ArrayList<Punto> arrayPunto2 = obtenerArrayListDeArchivoComoObjeto("puntos2.dat"); // Se graba el array2 en fichero3, y despues se recupera: escribirArrayListEnArchivo(arrayPunto2, "puntos3.dat"); ArrayList<Punto> arrayPunt3 = leerArrayListDeArchivo("puntos3.dat"); // Se imprime el array3: System.out.println("\n" + arrayPunt3); } /* d) Escribir un método de nombre almacenarColPuntosComoObjetos que reciba por parámetro una colección de objetos Punto y el nombre del archivo donde se almacenarán. El método escribirá directamente cada objeto Punto al archivo. */ public static void almacenarColPuntosComoObjetos(Punto[] pts, String file) throws IOException { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File(file), false)); // Revisar: Al poner TRUE no funciona una vez creado el fichero. for( Punto p : pts ) oos.writeObject(p); oos.close(); } /* e) Escribir un método de nombre obtenerArrayListDeArchivoComoObjeto que reciba por parámetro el nombre de un archivo donde se encuentran almacenados varios objetos de la clase Punto. El método leerá los objetos del archivo y los almacenará en un ArrayList que, finalmente será devuelto. */ public static ArrayList<Punto> obtenerArrayListDeArchivoComoObjeto(String file) throws IOException, ClassNotFoundException { FileInputStream fis = new FileInputStream(new File(file)); ObjectInputStream ois = new ObjectInputStream(fis); ArrayList<Punto> arrayPunto = new ArrayList<>(); while( fis.available() > 0 ) arrayPunto.add((Punto)ois.readObject()); ois.close(); fis.close(); return arrayPunto; } /* f) Escribir un método de nombre escribirArrayListEnArchivo, que reciba por parámetro un objeto ArrayList de objetos Punto y el nombre del archivo donde se almacenará. El método almacenará directamente el objeto ArrayList sobre el archivo recibido. No se capturará ninguna excepción. */ public static void escribirArrayListEnArchivo(ArrayList<Punto> arrayPunto, String file) throws IOException { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File(file), false)); // Revisar: Al poner TRUE no funciona una vez creado el fichero. oos.writeObject(arrayPunto); oos.close(); } /* g) Escribir un método de nombre leerArrayListDeArchivo que reciba por parámetro el nombre de un archivo en el que se ha escrito previamente un objeto ArrayList que almacena objetos de la clase Punto. El método leerá el objeto ArrayList del archivo y lo devolverá. No se capturará ninguna excepción. */ public static ArrayList<Punto> leerArrayListDeArchivo(String file) throws IOException, ClassNotFoundException { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File(file))); ArrayList<Punto> arrayPunto = (ArrayList<Punto>)ois.readObject(); // Revisar, marca conversion descontrolada ois.close(); return arrayPunto; } } |
Categoría: Java
Java es un lenguaje de programación de alto nivel orientado a objetos, desarrollado por James Gosling en 1995. El lenguaje en sí mismo toma mucha de su sintaxis de C, Cobol y Visual Basic, pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel, que suelen inducir a muchos errores, como la manipulación directa de punteros o memoria. La memoria es gestionada mediante un recolector de basura. Leer más.
Ejercicios Java UT2 Hoja2 – Uso de la clase File y RandomAccessFile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
/* Ejercicio: 2x2x01 Fecha: 27/09/2012 Enunciado: Escribir un programa que muestre los nombres de los archivos y directorios que se encuentren en el directorio que se pase como argumento (args[0]). */ import java.io.File; public class _2x2x01 { public static void metodo(String[] args) { File file = new File(args[0]); if( file.isDirectory() ) { File[] ficheros = file.listFiles(); for( File f : ficheros ) System.out.println(f.getName()); } } public static void main(String[] args) { String[] argumentos = { "C:\\" }; metodo(argumentos); } } |
Ejercicios Java UT2 Hoja1 – Control de flujos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
/* Ejercicio: 2x2x07 Fecha: 28/09/2012 Enunciado: Escribir un método que reciba por parámetro el nombre de un archivo que almacena una serie de referencias y precios de artículos y actualice los precios de forma que los superiores a 100 euros se decrementen en un 50% y los inferiores se incrementen en un 50%. El método capturará y tratará todas las excepciones que puedan producirse. (Con RandomAccessFile) */ import java.io.EOFException; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; public class _2x2x07 { public static void metodo(String[] args) { RandomAccessFile raf = null; boolean finFichero = false; double eur; try { raf = new RandomAccessFile(new File(args[0]), "rw"); do { try { raf.seek(raf.getFilePointer() + Integer.SIZE / 8 + Byte.SIZE / 8); eur = raf.readDouble(); if( eur > 100 ) eur *= 1.5; else eur /= 1.5; raf.seek(raf.getFilePointer() - Double.SIZE / 8); raf.writeDouble(eur); raf.seek(raf.getFilePointer() + Byte.SIZE / 8); } catch( EOFException e ) { finFichero = true; raf.close(); } } while( !finFichero ); } catch( FileNotFoundException e ) { System.out.println("El archivo no existe"); } catch( IOException e ) { System.out.println("Se produjo un error con el archivo"); } } public static void main(String[] args) { String[] argumentos = { "tienda.txt" }; metodo(argumentos); } } |
9×05: Calcular la letra de un DNI – Con Java e interfaz gráfica
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
/** * Proyecto: 9x05-Muestra letra DNI * Fichero: DNIGrafico.java * Fecha: 24/05/2012 * * Licencia (CC) BY-NC-SA: giltesa.com * * http://francho.org/2009/04/13/java-calculadora-sencilla-en-modo-grafico * http://www.javamexico.org/blogs/daniel/codigo_para_centrar_jframe */ import java.awt.*; import java.awt.event.*; import javax.swing.*; public class DNIGrafico extends JFrame implements KeyListener { // PROPIEDADES: private JPanel panelBotones; // Creamos una variable en el que insertaremos los botones. private JTextField campoTexto; // También un campo de texto que hará de pantalla donde veremos los números y el resultado. private static final long serialVersionUID = -3263949043600021146L; // CONSTRUCTOR: public DNIGrafico() { // Se crea la ventana: super(); setSize(168, 100); // El tamaño de la ventana principal. setTitle("DNI"); // El titulo de la ventana. setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // Para que cuando se cierre la ventana termine también el proceso. setResizable(false); // Bloquea la ventana para no permitir que se pueda cambiar de tamaño. JPanel ventana = (JPanel) this.getContentPane(); // ... ventana.setLayout(new BorderLayout()); // "Se indica que va a ser la ventana/panel/contenedor principal" // Se crean la pantalla (el campo de texto): campoTexto = new JTextField("", 1); // Instancia un campo de texto vacio de una columna. campoTexto.setFont(new Font("Arial", Font.BOLD, 25)); // Establece la fuente para el texto. campoTexto.setBackground(Color.WHITE); // El color de fondo. campoTexto.setEditable(false); // Hace que no se pueda escribir directamente sobre el campo (se capturan las teclas por eventos mas adelante) ventana.add("North", campoTexto); // Se coloca el campo de texto en la parte superior de la ventana. // Se crean los botones: panelBotones = new JPanel(); panelBotones.setLayout(new GridLayout(1, 2)); // Una botonera de 1 fila y 2 columnas. nuevoBoton("Calcular"); // Se llama al metodo privado que creara el boton. nuevoBoton("Borrar"); ventana.add("East", panelBotones); // Se añade la botonera a la parte inferior. // Revisar Con "South" no consigo poner los botones de un tamaño mayor mediante boton.setsize() campoTexto.addKeyListener(this); // Permite que la ventana pueda detectar pulsaciones del teclado. centrarVentana(); // Centra la ventana en el monitor del pc. validate(); // ... } // METODOS: // Crea un nuevo botón y después lo añade al panelBotones: private void nuevoBoton( String nombreBoton ) { JButton boton = new JButton(nombreBoton); // Se instancia el nuevo botón con el nombre recibido por valor. boton.addMouseListener(new MouseAdapter() // Al botón se le va a agregar la detección de eventos mediante el ratón, así se podrá saber si es pulsado el botón. { public void mouseReleased( MouseEvent evento ) { JButton boton = (JButton) evento.getSource(); // Cuando suceda un evento se recoge el botón que lo produjo. operacion(boton.getText()); // y se envía el texto del botón a operacion() campoTexto.requestFocus(); // Mantiene el foco en el campo de texto después de pulsar el botón. } }); panelBotones.add(boton); // Por ultimo se agrega el botón al panel de botones. } // Realiza la operación para calcular la letra del DNI: private void operacion( String nombreTecla ) { int dni; char letra; String letras = new String("TRWAGMYFPDXBNJZSQVHLCKE"); char ultCarCampoTexto; int numCarCampoTexto; // Es necesario, además de ejecutar el evento Calcular, que el campo de texto contenga números. if( !campoTexto.getText().isEmpty() && nombreTecla.equals("Calcular") ) { numCarCampoTexto = campoTexto.getText().length(); ultCarCampoTexto = campoTexto.getText().charAt(numCarCampoTexto - 1); // Además de la longitud del dni, hay que comprobar que no se pueda añadir mas números al campo de // texto si previamente se calculo la letra, ya que podría dar como resultado esto: "123Z25" = Error. if( numCarCampoTexto <= 8 && ultCarCampoTexto >= '0' && ultCarCampoTexto <= '9' ) { dni = Integer.parseInt(campoTexto.getText()); letra = letras.charAt(dni % 23); campoTexto.setText("" + dni + letra); } } else campoTexto.setText(""); } // Al implementar la interfaz KeyListener es obligatorio tener los tres métodos que actúan ante los eventos del teclado. // en este caso solo se usa el evento que actúa cuando se deja de pulsar la tecla. public void keyTyped( KeyEvent evento ){} public void keyPressed( KeyEvent evento ){} public void keyReleased( KeyEvent evento ) { int codCaracter = evento.getKeyCode(); char charCaracter = evento.getKeyChar(); int numCarCampoTexto = campoTexto.getText().length(); char ultCaracter = '0'; if( numCarCampoTexto != 0 ) ultCaracter = campoTexto.getText().charAt(numCarCampoTexto - 1); if( charCaracter >= '0' && charCaracter <= '9' && numCarCampoTexto < 8 && ultCaracter >= '0' && ultCaracter <= '9' ) campoTexto.setText(campoTexto.getText() + evento.getKeyChar()); else if( codCaracter == 10 ) operacion("Calcular"); else if( codCaracter == 8 && campoTexto.getText().length() != 0 ) campoTexto.setText(campoTexto.getText().substring(0, campoTexto.getText().length() - 1)); } // Este método se encarga de centrar la ventana principal: private void centrarVentana() { Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize(); // Se obtienen las dimensiones en píxels de la pantalla. Dimension ventana = getSize(); // Se obtienen las dimensiones en píxels de la ventana. setLocation((pantalla.width - ventana.width) / 2, (pantalla.height - ventana.height) / 2); // Una cuenta para situar la ventana en el centro de la pantalla. } } |
9×04: Bicola generica usando un Vector o Referencias con Ficheros
Código para Bicolas genéricas usando Vectores (con ficheros):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
/** * Proyecto: 9x04-Bicola - Vector y Ficheros * Fichero: Bicola.java * Fecha: 24/05/2012 * * Licencia (CC) BY-NC-SA: giltesa.com * * http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html * http://mundogeek.net/archivos/2009/03/11/generics-en-java/ */ import java.util.Vector; /*import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable;*/ import java.io.*; public class Bicola<G> implements Serializable { // PROPIEDADES: private Vector<Nodo<G>> vNodos; private static final long serialVersionUID = 3717013638745390665L; // CONSTRUCTOR: // Se instancia un Vector de Nodos Genericos. (Del tipo con el que instanciamos la Bicola). public Bicola() { vNodos = new Vector<Nodo<G>>(5, 2); } // METODOS: // Se devuelve el numero de elementos usados en el Vector. public int getNumDeNodos() { return vNodos.size(); } // Se añade un Nodo a la izquierda y se desplazan los demas una posicion a la derecha en el indice. public void addNodoIzquierda( G dato ) { vNodos.add(0, new Nodo<G>(dato)); } // Se añade al final del Vector un nuevo Nodo: public void addNodoDerecha( G dato ) { vNodos.addElement(new Nodo<G>(dato)); } // Se copia el primer elemento en temp, despues se elimina del Vector. public G getNodoIzquierda() { G temp = vNodos.firstElement().getDatoNodo(); vNodos.removeElementAt(0); return temp; } // Se copia el ultimo elemento en temp, despues se elimina del Vector. public G getNodoDerecha() { G temp = vNodos.lastElement().getDatoNodo(); vNodos.removeElementAt(vNodos.size() - 1); return temp; } // Se concatenan todos los elementos del Vector en cadena y luego se devuelve. public String toString() { String cadena = ""; for( int i = 0; i < vNodos.size(); i++ ) cadena += vNodos.get(i).getDatoNodo() + ", "; return cadena; } // Lee un objecto Bicola desde el fichero backup y se devuelve por "valor". public Bicola<G> readBicolaFichero() { FileInputStream fichEntrada = null; ObjectInputStream objEntrada = null; Bicola<G> temp = null; try { fichEntrada = new FileInputStream("backup.dat"); objEntrada = new ObjectInputStream(fichEntrada); temp = (Bicola<G>) objEntrada.readObject(); } catch( FileNotFoundException e ) { System.out.println("El sistema no puede encontrar el archivo especificado"); } catch( ClassNotFoundException e ) { System.out.println("El contenido leido en \"backup.dat\" no era el esperado."); } catch( Exception e ) { System.out.println(e); } finally { // Como ultimo paso se cierran los ficheros. try { if( objEntrada != null ) objEntrada.close(); if( fichEntrada != null ) fichEntrada.close(); } catch( Exception e ) { System.out.println(e); } } return temp; } // Recibe por referencia un objeto Bicola que es guardado en el fichero backup. public void writeBicolaFichero( Bicola<G> bicola ) { FileOutputStream fichSalida = null; ObjectOutputStream objSalida = null; try { fichSalida = new FileOutputStream("backup.dat"); objSalida = new ObjectOutputStream(fichSalida); objSalida.writeObject(bicola); } catch( FileNotFoundException e ) { System.out.println("El sistema no puede encontrar el archivo especificado"); } catch( Exception e ) { System.out.println(e); } finally { // Como ultimo paso se cierran los ficheros. try { if( objSalida != null ) objSalida.close(); if( fichSalida != null ) fichSalida.close(); } catch( Exception e ) { System.out.println("No se pudo cerrar el fichero."); } } } } |
Leer más
9×03: Bicola generica usando un Vector o Referencias
Código para Bicolas genéricas usando Vectores:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
/** * Proyecto: 9x03-Bicola - Vector * Fichero: Bicola.java * Fecha: 17/05/2012 * * Licencia (CC) BY-NC-SA: giltesa.com * * http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html * http://mundogeek.net/archivos/2009/03/11/generics-en-java/ */ import java.util.Vector; public class Bicola<G> { // PROPIEDADES: private Vector<Nodo<G>> vNodos; // CONSTRUCTOR: // Se instancia un Vector de Nodos Genericos. (Del tipo con el que instanciamos la Bicola). public Bicola() { vNodos = new Vector<Nodo<G>>(5, 2); } // METODOS: // Se devuelve el numero de elementos usados en el Vector. public int getNumDeNodos() { return vNodos.size(); } // Se añade un Nodo a la izquierda y se desplazan los demas una posicion a la derecha en el indice. public void addNodoIzquierda( G dato ) { vNodos.add(0, new Nodo<G>(dato)); } // Se añade al final del Vector un nuevo Nodo: public void addNodoDerecha( G dato ) { vNodos.addElement(new Nodo<G>(dato)); } // Se copia el primer elemento en temp, despues se elimina del Vector. public G getNodoIzquierda() { G temp = vNodos.firstElement().getDatoNodo(); vNodos.removeElementAt(0); return temp; } // Se copia el ultimo elemento en temp, despues se elimina del Vector. public G getNodoDerecha() { G temp = vNodos.lastElement().getDatoNodo(); vNodos.removeElementAt(vNodos.size() - 1); return temp; } // Se concatenan todos los elementos del Vector en cadena y luego se devuelve. public String toString() { String cadena = ""; for( int i = 0; i < vNodos.size(); i++ ) cadena += vNodos.get(i).getDatoNodo() + ", "; return cadena; } } |
Leer más
9×01: Torres de Hanoi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
/** * Proyecto: 9x01-Torres de Hanoi * Fichero: Torre.java * Fecha: 25/04/2012 */ package torresDeHanoi; public class Torre { // PROPIEDADES private int ultPosLibre; // Indica la primera posicion libre de la tabla que almacena los Discos en la Torre: private Disco tablaDiscos[]; // Tabla de Discos que almacena N Discos. // CONSTRUCTOR /** * <p>El constructor establece el numero de Discos de la Torre.<br> * -- Si el numero de discos recibido es igual a la capacidad que tiene la Torre, se instanciaran los Discos para esa torre.<br> * -- En caso contrario se dejan a null</p> * * @param capDiscos <i>Indica el numero de Discos que debera de poder guardar la Torre.</i> * @param numDiscos <i>Indica el numero de Discos inicial que tendra la torre. El valor debera de ser de 0 o N Discos.</i> */ public Torre( int capDiscos, int numDiscos ) { tablaDiscos = new Disco[capDiscos]; ultPosLibre = numDiscos; if( numDiscos == capDiscos ) { int tamDisco = 1; for( int i = numDiscos - 1; i >= 0; i-- ) { tablaDiscos[i] = new Disco(tamDisco); tamDisco += 2; } } }; // METODOS /** * <p>Inserta un Disco en la posicion libre que indica la Torre.</p> * * @param d <i>El Disco a insertar en al Torre.</i> */ public void ponerDisco( Disco d ) { tablaDiscos[ultPosLibre] = d; ultPosLibre++; }; /** * <p>Extrae el Disco que indica la posicion libre -1 de la Torre.<br> * -- Despues de extraerlo se borra poniendolo a null</p> * * @return <i>Devuelve el Disco mas arriba de la Torre.</i> */ public Disco quitarDisco() { ultPosLibre--; Disco temp = tablaDiscos[ultPosLibre]; tablaDiscos[ultPosLibre] = null; return temp; }; /** * <p>Devuelve el tamaño del disco indicado.</p> * * @param com <i>El numero de Disco del cual se quiere su tamaño.</i> * @return <i>Se devuelve 0 si el Disco no existe en la posicion indicada, o el tamaño que tanga el disco si si existiese.</i> */ public int getTamanioDisco( int com ) { if( tablaDiscos[com] == null ) return 0; else return tablaDiscos[com].getTamanio(); } }; |