package Tutorial9; public class ListOfChecksTest { public static void main(String args[]) { ListOfChecks myList = new ListOfChecks(); myList.addToEnd(1830.50); myList.addToEnd(255.68); myList.addToEnd(99.99); myList.print(); myList.deleteCheck(2); myList.addToEnd(140.50); myList.print(); } } class ListOfChecks { // crear una referencia a nuestra lista private Check head; public ListOfChecks() { // establecer la referencia a la lista en null, ya que la lista // no tiene ningún miembro Check head = null; } public boolean isEmpty() { return (head == null); // si la lista está vacía, devolver true } public boolean addToEnd( double amount ) { if ( isEmpty() ) // si la lista está vacía, iniciar una nueva head = new Check(amount); else { // Recorrer la lista hasta encontrar el final (esto es, cuando la siguiente comprobación es null) Check temp = head; while (temp.getNextCheck()!= null) temp = temp.getNextCheck(); temp.setNextCheck(new Check(amount)); // Poner una nueva comprobación al final ... } return (true); // ... y devolver true } public boolean deleteCheck( int number ) { if ( isEmpty() ) return (false); // Si no hay ninguna lista, no se elimina nada else if (head.getCheckNumber() == number) head = head.getNextCheck(); // La memoria "eliminada" se ha perdido porque no tiene ninguna referencia, pero // la recolección de basura devuelve la memoria al sistema. else { Check temp = head; Check previous = null; // Necesito recordar la comprobación anterior a la que quiero eliminar while (temp.getCheckNumber() != number) { // Antes de seguir, recordar de dónde se viene previous = temp; temp = temp.getNextCheck(); } // Cuando el bucle termina temp será la comprobación // que se debe eliminar y previous será la comprobación // anterior. Así que queremos que la comprobación // que ahora sigue a temp siga a previous System.out.println("La comprobación " + temp.getCheckNumber() + " se acaba de eliminar."); previous.setNextCheck(temp.getNextCheck()); } return (true); } public void print() { int total = 0; if (!isEmpty()) { Check temp = head; while (temp!= null) { temp.print(); temp = temp.getNextCheck(); total++; } } System.out.println("Número total de comprobaciones: " +total); System.out.println("Número total de comprobaciones escritas: " + Check.getTotalChecks()); } } class Check { private static int totalChecks=0; // una variable para el seguimiento de todas las comprobaciones private int checkNumber; private double checkAmount; private Check nextCheck; // referencia a la siguiente comprobación de la lista public Check( double amount ) { checkNumber = ++totalChecks; checkAmount = amount; nextCheck = null; } public static int getTotalChecks() { return totalChecks; } public int getCheckNumber() { return checkNumber; } public Check getNextCheck() { return nextCheck; } public void setNextCheck(Check c) { nextCheck = c; } public void print() { System.out.println("Comprobar número: #" + checkNumber + "; Comprobar cantidad: $"+ checkAmount); } }