Changed indentations.

This commit is contained in:
Chris Cromer 2016-07-03 11:28:26 -04:00
parent 71bf0201e6
commit 4cc0349ffe
54 changed files with 2708 additions and 2694 deletions

View File

@ -59,7 +59,7 @@ public class ArrayController implements Initializable {
/** /**
* Inicializar todos los datos y dibujar las graficas. * Inicializar todos los datos y dibujar las graficas.
* *
* @param location URL: El URL de fxml en uso. * @param location URL: El URL de fxml en uso.
* @param resourceBundle ResourceBundle: Tiene datos de idioma. * @param resourceBundle ResourceBundle: Tiene datos de idioma.
*/ */
@Override @Override
@ -146,7 +146,7 @@ public class ArrayController implements Initializable {
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/array" + tipo + "/insertar")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/array" + tipo + "/insertar")).useDelimiter("\\Z").next();
codigoArray.setText(codigoTexto); codigoArray.setText(codigoTexto);
if (valorArray.getText() != null && !valorArray.getText().trim().equals("")) { if (valorArray.getText() != null && ! valorArray.getText().trim().equals("")) {
try { try {
boolean exito = array.insertar(Integer.valueOf(valorArray.getText())); boolean exito = array.insertar(Integer.valueOf(valorArray.getText()));
if (exito) { if (exito) {
@ -188,7 +188,7 @@ public class ArrayController implements Initializable {
codigoArray.setText(codigoTexto); codigoArray.setText(codigoTexto);
try { try {
if (valorArray.getText() != null && !valorArray.getText().trim().equals("")) { if (valorArray.getText() != null && ! valorArray.getText().trim().equals("")) {
boolean exito = array.eliminar(Integer.valueOf(valorArray.getText())); boolean exito = array.eliminar(Integer.valueOf(valorArray.getText()));
if (exito) { if (exito) {
valorArray.setText(""); valorArray.setText("");
@ -225,9 +225,9 @@ public class ArrayController implements Initializable {
codigoArray.setText(codigoTexto); codigoArray.setText(codigoTexto);
try { try {
if (valorArray.getText() != null && !valorArray.getText().trim().equals("")) { if (valorArray.getText() != null && ! valorArray.getText().trim().equals("")) {
int encontrado = array.buscar(Integer.valueOf(valorArray.getText())); int encontrado = array.buscar(Integer.valueOf(valorArray.getText()));
if (encontrado != -1) { if (encontrado != - 1) {
generarGrafico(); generarGrafico();
grafico = new Grafico(scene); grafico = new Grafico(scene);
grafico.destacar("#caja_" + encontrado, Grafico.RECTANGULO); grafico.destacar("#caja_" + encontrado, Grafico.RECTANGULO);
@ -246,5 +246,5 @@ public class ArrayController implements Initializable {
Logs.log(Level.WARNING, "No es tipo int."); Logs.log(Level.WARNING, "No es tipo int.");
Main.mostrarError(resourceBundle.getString("arrayNoValor"), resourceBundle); Main.mostrarError(resourceBundle.getString("arrayNoValor"), resourceBundle);
} }
} }
} }

View File

@ -6,44 +6,45 @@ package cl.cromer.estructuras;
* @author Chris Cromer * @author Chris Cromer
*/ */
final public class ArrayTipos { final public class ArrayTipos {
/** /**
* Tipo de array simple. * Tipo de array simple.
*/ */
static final public int SIMPLE = 0; static final public int SIMPLE = 0;
/**
* Tipo de array ordenado.
*/
static final public int ORDENADO = 1;
/** /**
* El tipo que está elegido. * Tipo de array ordenado.
*/ */
final private int tipo; static final public int ORDENADO = 1;
/** /**
* Inicilizar el tipo. * El tipo que está elegido.
* */
* @param tipo int: Tipo de array, {@value #SIMPLE} o {@value #ORDENADO} final private int tipo;
*/
public ArrayTipos(int tipo) {
switch (tipo) {
case SIMPLE:
this.tipo = SIMPLE;
break;
case ORDENADO:
this.tipo = ORDENADO;
break;
default:
this.tipo = SIMPLE;
}
}
/** /**
* Devolver el tipo. * Inicilizar el tipo.
* *
* @return int: El tipo de array. * @param tipo int: Tipo de array, {@value #SIMPLE} o {@value #ORDENADO}
*/ */
public int getTipo() { public ArrayTipos(int tipo) {
return tipo; switch (tipo) {
} case SIMPLE:
this.tipo = SIMPLE;
break;
case ORDENADO:
this.tipo = ORDENADO;
break;
default:
this.tipo = SIMPLE;
}
}
/**
* Devolver el tipo.
*
* @return int: El tipo de array.
*/
public int getTipo() {
return tipo;
}
} }

View File

@ -46,7 +46,7 @@ public class BurbujaController implements Initializable {
/** /**
* Inicializar todos los datos y dibujar las graficas. * Inicializar todos los datos y dibujar las graficas.
* *
* @param location URL: El URL de fxml en uso. * @param location URL: El URL de fxml en uso.
* @param resourceBundle ResourceBundle: Tiene datos de idioma. * @param resourceBundle ResourceBundle: Tiene datos de idioma.
*/ */
@Override @Override
@ -112,7 +112,7 @@ public class BurbujaController implements Initializable {
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/burbuja/ordenar")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/burbuja/ordenar")).useDelimiter("\\Z").next();
codigoBurbuja.setText(codigoTexto); codigoBurbuja.setText(codigoTexto);
if (!array.burbuja(true)) { if (! array.burbuja(true)) {
Main.mostrarError(resourceBundle.getString("burbujaYaOrdenado"), resourceBundle); Main.mostrarError(resourceBundle.getString("burbujaYaOrdenado"), resourceBundle);
} }
@ -132,10 +132,10 @@ public class BurbujaController implements Initializable {
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/burbuja/ordenar")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/burbuja/ordenar")).useDelimiter("\\Z").next();
codigoBurbuja.setText(codigoTexto); codigoBurbuja.setText(codigoTexto);
if (!array.burbuja(false)) { if (! array.burbuja(false)) {
Main.mostrarError(resourceBundle.getString("burbujaYaOrdenado"), resourceBundle); Main.mostrarError(resourceBundle.getString("burbujaYaOrdenado"), resourceBundle);
} }
generarGrafico(); generarGrafico();
} }
} }

View File

@ -8,118 +8,119 @@ import java.util.Random;
* @author Chris Cromer * @author Chris Cromer
*/ */
final public class Cola { final public class Cola {
/** /**
* La cola. * La cola.
*/ */
private String cola[]; private String cola[];
/** /**
* La cantidad de elementos que están en la cola. * La cantidad de elementos que están en la cola.
*/ */
private int size; private int size;
/** /**
* Inicializar. * Inicializar.
*/ */
public Cola() { public Cola() {
this.cola = null; this.cola = null;
size = 0; size = 0;
} }
/** /**
* Pop un valor del principio de la cola. * Pop un valor del principio de la cola.
* *
* @return boolean: Verdad si fue exitoso. * @return boolean: Verdad si fue exitoso.
*/ */
public boolean pop() { public boolean pop() {
if (this.cola != null) { if (this.cola != null) {
String cola[] = new String[this.cola.length - 1]; String cola[] = new String[this.cola.length - 1];
// Nueva array sin el valor del primer // Nueva array sin el valor del primer
System.arraycopy(this.cola, 1, cola, 0, cola.length); System.arraycopy(this.cola, 1, cola, 0, cola.length);
this.cola = cola; this.cola = cola;
size--; size--;
return true; return true;
} }
else { else {
return false; return false;
} }
} }
/** /**
* Peek al valor que está al principio de la cola. * Peek al valor que está al principio de la cola.
* *
* @return int: El valor que está al principio de la cola. * @return int: El valor que está al principio de la cola.
*/ */
public int peek() { public int peek() {
if (this.cola != null && size() > 0) { if (this.cola != null && size() > 0) {
return Integer.valueOf(cola[0]); return Integer.valueOf(cola[0]);
} }
else { else {
return Integer.MIN_VALUE; return Integer.MIN_VALUE;
} }
} }
/** /**
* Devolver la cantidad de elementos que están en la cola. * Devolver la cantidad de elementos que están en la cola.
* *
* @return int: La cantidad de elementos. * @return int: La cantidad de elementos.
*/ */
public int size() { public int size() {
return size; return size;
} }
/** /**
* Devolver el valor que está en un indice de la cola. * Devolver el valor que está en un indice de la cola.
* *
* @param indice int: El indice que desea devolver. * @param indice int: El indice que desea devolver.
* @return String: El valor que está guardado en el indice. *
*/ * @return String: El valor que está guardado en el indice.
public String getIndice(int indice) { */
if (cola != null && indice >= 0 && indice < cola.length) { public String getIndice(int indice) {
return cola[indice]; if (cola != null && indice >= 0 && indice < cola.length) {
} return cola[indice];
else { }
return null; else {
} return null;
} }
}
/** /**
* Llenar la cola con valores al azar. * Llenar la cola con valores al azar.
*/ */
@SuppressWarnings("Duplicates") @SuppressWarnings("Duplicates")
public void llenar() { public void llenar() {
Random random = new Random(); Random random = new Random();
int maximo = 99; int maximo = 99;
int minimo = 0; int minimo = 0;
int rango = maximo - minimo + 1; int rango = maximo - minimo + 1;
for (int i = size(); i < 10; i++) { for (int i = size(); i < 10; i++) {
int numero = random.nextInt(rango) + minimo; int numero = random.nextInt(rango) + minimo;
push(numero); push(numero);
} }
} }
/** /**
* Push un valor en la cola encima. * Push un valor en la cola encima.
* *
* @param valor int: El valor a push. * @param valor int: El valor a push.
*/ */
public void push(int valor) { public void push(int valor) {
if (this.cola != null) { if (this.cola != null) {
String cola[] = new String[this.cola.length + 1]; String cola[] = new String[this.cola.length + 1];
int i; int i;
for (i = 0; i < this.cola.length; i++) { for (i = 0; i < this.cola.length; i++) {
cola[i] = this.cola[i]; cola[i] = this.cola[i];
} }
cola[i] = String.valueOf(valor); cola[i] = String.valueOf(valor);
this.cola = cola; this.cola = cola;
size++; size++;
} }
else { else {
String pila[] = new String[1]; String pila[] = new String[1];
pila[0] = String.valueOf(valor); pila[0] = String.valueOf(valor);
this.cola = pila; this.cola = pila;
size++; size++;
} }
} }
} }

View File

@ -17,190 +17,190 @@ import java.util.logging.Level;
* @author Chris Cromer * @author Chris Cromer
*/ */
public class ColaController implements Initializable { public class ColaController implements Initializable {
/** /**
* La caja para ingresar textos. * La caja para ingresar textos.
*/ */
@FXML @FXML
private TextFieldLimited valorCola; private TextFieldLimited valorCola;
/** /**
* Donde poner el contenido de array. * Donde poner el contenido de array.
*/ */
@FXML @FXML
private VBox contenidoCola; private VBox contenidoCola;
/** /**
* Donde va el codigo a mostrar a la pantalla. * Donde va el codigo a mostrar a la pantalla.
*/ */
@FXML @FXML
private Text codigoCola; private Text codigoCola;
/** /**
* La escena donde está cosas graficas. * La escena donde está cosas graficas.
*/ */
private Scene scene; private Scene scene;
/** /**
* Donde está guardado los idiomas. * Donde está guardado los idiomas.
*/ */
private ResourceBundle resourceBundle; private ResourceBundle resourceBundle;
/** /**
* La cola usado en la aplicación. * La cola usado en la aplicación.
*/ */
private Cola cola; private Cola cola;
/** /**
* Grafico rectangulos. * Grafico rectangulos.
*/ */
private Grafico grafico; private Grafico grafico;
/** /**
* Inicializar todos los datos y dibujar las graficas. * Inicializar todos los datos y dibujar las graficas.
* *
* @param location URL: El URL de fxml en uso. * @param location URL: El URL de fxml en uso.
* @param resourceBundle ResourceBundle: Tiene datos de idioma. * @param resourceBundle ResourceBundle: Tiene datos de idioma.
*/ */
@Override @Override
public void initialize(URL location, ResourceBundle resourceBundle) { public void initialize(URL location, ResourceBundle resourceBundle) {
this.resourceBundle = resourceBundle; this.resourceBundle = resourceBundle;
cola = new Cola(); cola = new Cola();
scene = null; scene = null;
Colores colores = new Colores(); Colores colores = new Colores();
for (int i = 9; i >= 0; i--) { for (int i = 9; i >= 0; i--) {
contenidoCola.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i))); contenidoCola.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i)));
colores.siguinteColor(); colores.siguinteColor();
} }
} }
/** /**
* Llenar la cola con numeros al azar. * Llenar la cola con numeros al azar.
*/ */
@FXML @FXML
protected void botonLlenar() { protected void botonLlenar() {
if (scene == null) { if (scene == null) {
scene = contenidoCola.getScene(); scene = contenidoCola.getScene();
grafico = new Grafico(scene); grafico = new Grafico(scene);
} }
cola.llenar(); cola.llenar();
generarGrafico(); generarGrafico();
} }
/** /**
* Poner los valores en el grafico. * Poner los valores en el grafico.
*/ */
private void generarGrafico() { private void generarGrafico() {
grafico.removerDestacar(); grafico.removerDestacar();
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
Text text = (Text) scene.lookup("#texto_" + String.valueOf(i)); Text text = (Text) scene.lookup("#texto_" + String.valueOf(i));
text.setText(cola.getIndice(i)); text.setText(cola.getIndice(i));
} }
} }
/** /**
* Vaciar la cola de todos los valores. * Vaciar la cola de todos los valores.
*/ */
@FXML @FXML
protected void botonVaciar() { protected void botonVaciar() {
if (scene == null) { if (scene == null) {
scene = contenidoCola.getScene(); scene = contenidoCola.getScene();
grafico = new Grafico(scene); grafico = new Grafico(scene);
} }
cola = new Cola(); cola = new Cola();
generarGrafico(); generarGrafico();
} }
/** /**
* Push un valor a la cola y mostrar el codigo en la pantalla. * Push un valor a la cola y mostrar el codigo en la pantalla.
*/ */
@FXML @FXML
protected void botonPush() { protected void botonPush() {
if (scene == null) { if (scene == null) {
scene = contenidoCola.getScene(); scene = contenidoCola.getScene();
grafico = new Grafico(scene); grafico = new Grafico(scene);
} }
// Mostrar el codigo // Mostrar el codigo
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/cola/push")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/cola/push")).useDelimiter("\\Z").next();
codigoCola.setText(codigoTexto); codigoCola.setText(codigoTexto);
if (valorCola.getText() != null && !valorCola.getText().trim().equals("")) { if (valorCola.getText() != null && ! valorCola.getText().trim().equals("")) {
try { try {
if (cola.size() < 10) { if (cola.size() < 10) {
cola.push(Integer.valueOf(valorCola.getText())); cola.push(Integer.valueOf(valorCola.getText()));
valorCola.setText(""); valorCola.setText("");
generarGrafico(); generarGrafico();
} }
else { else {
Main.mostrarError(resourceBundle.getString("colaLlena"), resourceBundle); Main.mostrarError(resourceBundle.getString("colaLlena"), resourceBundle);
} }
} }
catch (NumberFormatException exception) { catch (NumberFormatException exception) {
// El error no es fatal, sigue // El error no es fatal, sigue
Logs.log(Level.WARNING, "No es tipo int."); Logs.log(Level.WARNING, "No es tipo int.");
Main.mostrarError(resourceBundle.getString("colaNoValor"), resourceBundle); Main.mostrarError(resourceBundle.getString("colaNoValor"), resourceBundle);
} }
} }
else { else {
Main.mostrarError(resourceBundle.getString("colaNoValor"), resourceBundle); Main.mostrarError(resourceBundle.getString("colaNoValor"), resourceBundle);
} }
} }
/** /**
* Pop un valor de la pila si existe y mostrar el codigo en la pantalla. * Pop un valor de la pila si existe y mostrar el codigo en la pantalla.
*/ */
@FXML @FXML
protected void botonPop() { protected void botonPop() {
if (scene == null) { if (scene == null) {
scene = contenidoCola.getScene(); scene = contenidoCola.getScene();
grafico = new Grafico(scene); grafico = new Grafico(scene);
} }
// Mostrar el codigo // Mostrar el codigo
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/cola/pop")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/cola/pop")).useDelimiter("\\Z").next();
codigoCola.setText(codigoTexto); codigoCola.setText(codigoTexto);
if (cola.size() > 0) { if (cola.size() > 0) {
if (!cola.pop()) { if (! cola.pop()) {
Main.mostrarError(resourceBundle.getString("colaVacia"), resourceBundle); Main.mostrarError(resourceBundle.getString("colaVacia"), resourceBundle);
} }
else { else {
generarGrafico(); generarGrafico();
} }
} }
else { else {
Main.mostrarError(resourceBundle.getString("colaVacia"), resourceBundle); Main.mostrarError(resourceBundle.getString("colaVacia"), resourceBundle);
} }
} }
/** /**
* Peek a ver si existe un elemento en la pila y mostrar el codigo en la pantalla * Peek a ver si existe un elemento en la pila y mostrar el codigo en la pantalla
* Si existe un valor destacarlo. * Si existe un valor destacarlo.
*/ */
@FXML @FXML
protected void botonPeek() { protected void botonPeek() {
if (scene == null) { if (scene == null) {
scene = contenidoCola.getScene(); scene = contenidoCola.getScene();
grafico = new Grafico(scene); grafico = new Grafico(scene);
} }
// Mostrar el codigo // Mostrar el codigo
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/cola/peek")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/cola/peek")).useDelimiter("\\Z").next();
codigoCola.setText(codigoTexto); codigoCola.setText(codigoTexto);
int encontrado = cola.peek(); int encontrado = cola.peek();
if (encontrado != Integer.MIN_VALUE) { if (encontrado != Integer.MIN_VALUE) {
generarGrafico(); generarGrafico();
grafico.destacar("#caja_" + 0, Grafico.RECTANGULO); grafico.destacar("#caja_" + 0, Grafico.RECTANGULO);
grafico.destacar("#texto_" + 0, Grafico.TEXTO); grafico.destacar("#texto_" + 0, Grafico.TEXTO);
} }
else { else {
Main.mostrarError(resourceBundle.getString("colaVacia"), resourceBundle); Main.mostrarError(resourceBundle.getString("colaVacia"), resourceBundle);
} }
} }
} }

View File

@ -8,90 +8,90 @@ import javafx.scene.paint.Color;
* @author Chris Cromer * @author Chris Cromer
*/ */
public class Colores { public class Colores {
/** /**
* Cuantos colores estan definidos en esta clase. * Cuantos colores estan definidos en esta clase.
*/ */
static final public int MAX_COLORS = 7; static final public int MAX_COLORS = 7;
/** /**
* El color actual en forma numerica. * El color actual en forma numerica.
*/ */
private int color; private int color;
/** /**
* El color de texto actual. * El color de texto actual.
*/ */
private Color texto; private Color texto;
/** /**
* El color de fondo actual. * El color de fondo actual.
*/ */
private Color fondo; private Color fondo;
/** /**
* Inicializar el primer color. * Inicializar el primer color.
*/ */
public Colores() { public Colores() {
siguinteColor(); siguinteColor();
} }
/** /**
* Cambiar el color al siguinte. Si no hay, voler al primer. * Cambiar el color al siguinte. Si no hay, voler al primer.
*/ */
public void siguinteColor() { public void siguinteColor() {
switch (color) { switch (color) {
case 1: case 1:
color = 2; color = 2;
texto = Color.WHITE; texto = Color.WHITE;
fondo = Color.RED; fondo = Color.RED;
break; break;
case 2: case 2:
color = 3; color = 3;
texto = Color.BLACK; texto = Color.BLACK;
fondo = Color.WHITE; fondo = Color.WHITE;
break; break;
case 3: case 3:
color = 4; color = 4;
texto = Color.BLACK; texto = Color.BLACK;
fondo = Color.PINK; fondo = Color.PINK;
break; break;
case 4: case 4:
color = 5; color = 5;
texto = Color.BLACK; texto = Color.BLACK;
fondo = Color.YELLOW; fondo = Color.YELLOW;
break; break;
case 5: case 5:
color = 6; color = 6;
texto = Color.BLACK; texto = Color.BLACK;
fondo = Color.GREEN; fondo = Color.GREEN;
break; break;
case 6: case 6:
color = 7; color = 7;
texto = Color.BLACK; texto = Color.BLACK;
fondo = Color.ORANGE; fondo = Color.ORANGE;
break; break;
default: default:
color = 1; color = 1;
texto = Color.WHITE; texto = Color.WHITE;
fondo = Color.BLUE; fondo = Color.BLUE;
} }
} }
/** /**
* Devolver el color del texto actual. * Devolver el color del texto actual.
* *
* @return Color: Color del texto. * @return Color: Color del texto.
*/ */
public Color getTexto() { public Color getTexto() {
return texto; return texto;
} }
/** /**
* Devolver el color del fondo actual. * Devolver el color del fondo actual.
* *
* @return Color: Color del fondo. * @return Color: Color del fondo.
*/ */
public Color getFondo() { public Color getFondo() {
return fondo; return fondo;
} }
} }

View File

@ -6,45 +6,45 @@ package cl.cromer.estructuras;
* @author Chris Cromer * @author Chris Cromer
*/ */
interface Enlace { interface Enlace {
/** /**
* Devolver la llave. * Devolver la llave.
* *
* @return int: La llave. * @return int: La llave.
*/ */
int getLlave(); int getLlave();
/** /**
* Cambiar el valor de la llave. * Cambiar el valor de la llave.
* *
* @param llave int: El valor de la llave. * @param llave int: El valor de la llave.
*/ */
void setLlave(int llave); void setLlave(int llave);
/** /**
* Devolver el siguente enlace. * Devolver el siguente enlace.
* *
* @return Object: El enlace a devolver. * @return Object: El enlace a devolver.
*/ */
Object getSiguiente(); Object getSiguiente();
/** /**
* Cambiar el siguiente enlace. * Cambiar el siguiente enlace.
* *
* @param siguiente Object: El siguiente enlace nuevo. * @param siguiente Object: El siguiente enlace nuevo.
*/ */
void setSiguiente(Object siguiente); void setSiguiente(Object siguiente);
/** /**
* Devolver el enlace previo. * Devolver el enlace previo.
* *
* @return Object: El enlace previo. * @return Object: El enlace previo.
*/ */
Object getPrevio(); Object getPrevio();
/** /**
* Cambiar el previo enlace. * Cambiar el previo enlace.
* *
* @param previo Object: El enlace previo nuevo. * @param previo Object: El enlace previo nuevo.
*/ */
void setPrevio(Object previo); void setPrevio(Object previo);
} }

View File

@ -6,73 +6,73 @@ package cl.cromer.estructuras;
* @author Chris Cromer * @author Chris Cromer
*/ */
final public class EnlaceCircular implements Enlace { final public class EnlaceCircular implements Enlace {
/** /**
* La llave. * La llave.
*/ */
private int llave; private int llave;
/** /**
* El siguiente enlace. * El siguiente enlace.
*/ */
private EnlaceCircular siguiente; private EnlaceCircular siguiente;
/** /**
* Incializar. * Incializar.
*/ */
public EnlaceCircular() { public EnlaceCircular() {
siguiente = null; siguiente = null;
} }
/** /**
* Devolver la llave. * Devolver la llave.
* *
* @return int: La llave. * @return int: La llave.
*/ */
public int getLlave() { public int getLlave() {
return llave; return llave;
} }
/** /**
* Cambiar el valor de la llave. * Cambiar el valor de la llave.
* *
* @param llave int: El valor de la llave. * @param llave int: El valor de la llave.
*/ */
public void setLlave(int llave) { public void setLlave(int llave) {
this.llave = llave; this.llave = llave;
} }
/** /**
* Devolver el siguiente enlace. * Devolver el siguiente enlace.
* *
* @return EnlaceCircular: El enlace a devolver. * @return EnlaceCircular: El enlace a devolver.
*/ */
public EnlaceCircular getSiguiente() { public EnlaceCircular getSiguiente() {
return siguiente; return siguiente;
} }
/** /**
* Cambiar el siguiente enlace. * Cambiar el siguiente enlace.
* *
* @param siguiente Object: El siguiente enlace nuevo de tipo {@link EnlaceCircular}. * @param siguiente Object: El siguiente enlace nuevo de tipo {@link EnlaceCircular}.
*/ */
public void setSiguiente(Object siguiente) { public void setSiguiente(Object siguiente) {
this.siguiente = (EnlaceCircular) siguiente; this.siguiente = (EnlaceCircular) siguiente;
} }
/** /**
* Devolver el enlace previo. * Devolver el enlace previo.
* *
* @return EnlaceCircular: El enlace previo. * @return EnlaceCircular: El enlace previo.
*/ */
public EnlaceCircular getPrevio() { public EnlaceCircular getPrevio() {
return null; return null;
} }
/** /**
* Dummy metodo para usar interface {@link Enlace} * Dummy metodo para usar interface {@link Enlace}
* *
* @param previo Object: El enlace previo nuevo de tipo {@link EnlaceCircular}. * @param previo Object: El enlace previo nuevo de tipo {@link EnlaceCircular}.
*/ */
public void setPrevio(Object previo) { public void setPrevio(Object previo) {
} }
} }

View File

@ -6,80 +6,80 @@ package cl.cromer.estructuras;
* @author Chris Cromer * @author Chris Cromer
*/ */
final public class EnlaceNormal implements Enlace { final public class EnlaceNormal implements Enlace {
/** /**
* La llave. * La llave.
*/ */
private int llave; private int llave;
/** /**
* El siguiente enlace. * El siguiente enlace.
*/ */
private EnlaceNormal siguiente; private EnlaceNormal siguiente;
/** /**
* El enlace previo por doble enlazada. * El enlace previo por doble enlazada.
*/ */
private EnlaceNormal previo; private EnlaceNormal previo;
/** /**
* Incializar. * Incializar.
*/ */
public EnlaceNormal() { public EnlaceNormal() {
siguiente = null; siguiente = null;
previo = null; previo = null;
} }
/** /**
* Devolver la llave. * Devolver la llave.
* *
* @return int: La llave. * @return int: La llave.
*/ */
public int getLlave() { public int getLlave() {
return llave; return llave;
} }
/** /**
* Cambiar el valor de la llave. * Cambiar el valor de la llave.
* *
* @param llave int: El valor de la llave. * @param llave int: El valor de la llave.
*/ */
public void setLlave(int llave) { public void setLlave(int llave) {
this.llave = llave; this.llave = llave;
} }
/** /**
* Devolver el siguiente enlace. * Devolver el siguiente enlace.
* *
* @return EnlaceNormal: El enlace a devolver. * @return EnlaceNormal: El enlace a devolver.
*/ */
public EnlaceNormal getSiguiente() { public EnlaceNormal getSiguiente() {
return siguiente; return siguiente;
} }
/** /**
* Cambiar el siguiente enlace. * Cambiar el siguiente enlace.
* *
* @param siguiente Object: El siguiente enlace nuevo de tipo {@link EnlaceNormal}. * @param siguiente Object: El siguiente enlace nuevo de tipo {@link EnlaceNormal}.
*/ */
public void setSiguiente(Object siguiente) { public void setSiguiente(Object siguiente) {
this.siguiente = (EnlaceNormal) siguiente; this.siguiente = (EnlaceNormal) siguiente;
} }
/** /**
* Devolver el enlace previo. * Devolver el enlace previo.
* *
* @return EnlaceNormal: El enlace previo. * @return EnlaceNormal: El enlace previo.
*/ */
public EnlaceNormal getPrevio() { public EnlaceNormal getPrevio() {
return previo; return previo;
} }
/** /**
* Cambiar el previo enlace. * Cambiar el previo enlace.
* *
* @param previo Object: El enlace previo nuevo de tipo {@link EnlaceNormal}. * @param previo Object: El enlace previo nuevo de tipo {@link EnlaceNormal}.
*/ */
public void setPrevio(Object previo) { public void setPrevio(Object previo) {
this.previo = (EnlaceNormal) previo; this.previo = (EnlaceNormal) previo;
} }
} }

View File

@ -27,9 +27,9 @@ public class HashTable {
* @param tamano int: El tamaño maximo de la tabla hash. * @param tamano int: El tamaño maximo de la tabla hash.
*/ */
public HashTable(int tamano) { public HashTable(int tamano) {
this.tamano = tamano; this.tamano = tamano;
hashArray = new HashItem[tamano]; hashArray = new HashItem[tamano];
} }
/** /**
* Devolver la cantidad de elementos que están en la tabla. * Devolver la cantidad de elementos que están en la tabla.
@ -37,38 +37,38 @@ public class HashTable {
* @return int: La cantidad. * @return int: La cantidad.
*/ */
public int size() { public int size() {
return size; return size;
} }
/** /**
* Este metodo crea un hash muy único. * Este metodo crea un hash muy único.
* *
* @param string String: El string a hashear. * @param string String: El string a hashear.
* *
* @return int: El hash a devolver. * @return int: El hash a devolver.
*/ */
@SuppressWarnings("unused") @SuppressWarnings("unused")
public int hashMejor(String string) { public int hashMejor(String string) {
int intLength = string.length() / 4; int intLength = string.length() / 4;
int sum = 0; int sum = 0;
for (int j = 0; j < intLength; j++) { for (int j = 0; j < intLength; j++) {
char c[] = string.substring(j * 4, (j * 4) + 4).toCharArray(); char c[] = string.substring(j * 4, (j * 4) + 4).toCharArray();
int mult = 1; int mult = 1;
for (char aC : c) { for (char aC : c) {
sum = sum + aC * mult; sum = sum + aC * mult;
mult = mult * 256; mult = mult * 256;
} }
} }
char c[] = string.substring(intLength * 4).toCharArray(); char c[] = string.substring(intLength * 4).toCharArray();
int mult = 1; int mult = 1;
for (char aC : c) { for (char aC : c) {
sum = sum + aC * mult; sum = sum + aC * mult;
mult = mult * 256; mult = mult * 256;
} }
return (Math.abs(sum) % tamano); return (Math.abs(sum) % tamano);
} }
/** /**
* Insertar una llave y valor en la tabla hash. * Insertar una llave y valor en la tabla hash.
@ -79,45 +79,45 @@ public class HashTable {
* @return boolean: Verdad si fue insertado, sino está llena la tabla hash. * @return boolean: Verdad si fue insertado, sino está llena la tabla hash.
*/ */
public boolean insertar(String llave, int valor) { public boolean insertar(String llave, int valor) {
HashItem hashItem = new HashItem(llave, valor); HashItem hashItem = new HashItem(llave, valor);
int hashIndice = hash(hashItem.getLlave()); int hashIndice = hash(hashItem.getLlave());
int i = 0; int i = 0;
while (hashArray[hashIndice] != null && hashArray[hashIndice].getLlave() != null && i < tamano) { while (hashArray[hashIndice] != null && hashArray[hashIndice].getLlave() != null && i < tamano) {
if (hashArray[hashIndice].getLlave().equals(llave)) { if (hashArray[hashIndice].getLlave().equals(llave)) {
return false; return false;
} }
hashIndice++; hashIndice++;
hashIndice = hashIndice % tamano; hashIndice = hashIndice % tamano;
i++; i++;
} }
if (i == 10) { if (i == 10) {
return false; return false;
} }
else { else {
hashItem.setIndice(hashIndice); hashItem.setIndice(hashIndice);
hashArray[hashIndice] = hashItem; hashArray[hashIndice] = hashItem;
size++; size++;
return true; return true;
} }
} }
/** /**
* Este metodo crea un hash usando una llave. * Este metodo crea un hash usando una llave.
* *
* @param string String: El string a hashear. * @param string String: El string a hashear.
* *
* @return int: El hash a devolver. * @return int: El hash a devolver.
*/ */
public int hash(String string) { public int hash(String string) {
int hash = 31; int hash = 31;
for (int i = 0; i < string.length(); i++) { for (int i = 0; i < string.length(); i++) {
hash = hash * 31 + string.charAt(i); hash = hash * 31 + string.charAt(i);
} }
if (hash < 0) { if (hash < 0) {
hash = hash * - 1; hash = hash * - 1;
} }
return hash % tamano; return hash % tamano;
} }
/** /**
* Eliminar un elemento de la tabla hash. * Eliminar un elemento de la tabla hash.
@ -127,21 +127,21 @@ public class HashTable {
* @return boolean: Verdad si fue borrado, sino no existiá. * @return boolean: Verdad si fue borrado, sino no existiá.
*/ */
public boolean eliminar(String llave) { public boolean eliminar(String llave) {
HashItem hashItem = new HashItem(llave, 0); HashItem hashItem = new HashItem(llave, 0);
int hashIndice = hash(hashItem.getLlave()); int hashIndice = hash(hashItem.getLlave());
int i = 0; int i = 0;
while (hashArray[hashIndice] != null && hashArray[hashIndice].getLlave() != null && i < tamano) { while (hashArray[hashIndice] != null && hashArray[hashIndice].getLlave() != null && i < tamano) {
if (hashArray[hashIndice].getLlave().equals(llave)) { if (hashArray[hashIndice].getLlave().equals(llave)) {
hashArray[hashIndice] = null; hashArray[hashIndice] = null;
size--; size--;
return true; return true;
} }
hashIndice++; hashIndice++;
hashIndice = hashIndice % tamano; hashIndice = hashIndice % tamano;
i++; i++;
} }
return false; return false;
} }
/** /**
* Buscar una llave en la tabla hash. * Buscar una llave en la tabla hash.
@ -151,27 +151,27 @@ public class HashTable {
* @return HashItem: Devolver el elemento que contine la llave. * @return HashItem: Devolver el elemento que contine la llave.
*/ */
public HashItem buscar(String llave) { public HashItem buscar(String llave) {
for (int i = 0; i < tamano; i++) { for (int i = 0; i < tamano; i++) {
if (hashArray[i] != null && hashArray[i].getLlave().equals(llave)) { if (hashArray[i] != null && hashArray[i].getLlave().equals(llave)) {
return hashArray[i]; return hashArray[i];
} }
} }
return null; return null;
} }
/** /**
* Devolver el valor que está guardado en cada indice. Se usa para construir la grafica. * Devolver el valor que está guardado en cada indice. Se usa para construir la grafica.
* *
* @param indice int: El indice que desea ver. * @param indice int: El indice que desea ver.
* *
* @return String: El valor que está en dicho indice. * @return String: El valor que está en dicho indice.
*/ */
public HashItem getIndice(int indice) { public HashItem getIndice(int indice) {
if (indice >= 0 && indice < hashArray.length) { if (indice >= 0 && indice < hashArray.length) {
return hashArray[indice]; return hashArray[indice];
} }
else { else {
return null; return null;
} }
} }
} }

View File

@ -64,7 +64,7 @@ public class HashTableController implements Initializable {
/** /**
* Inicializar todos los datos y dibujar las graficas. * Inicializar todos los datos y dibujar las graficas.
* *
* @param location URL: El URL de fxml en uso. * @param location URL: El URL de fxml en uso.
* @param resourceBundle ResourceBundle: Tiene datos de idioma. * @param resourceBundle ResourceBundle: Tiene datos de idioma.
*/ */
@Override @Override
@ -98,7 +98,7 @@ public class HashTableController implements Initializable {
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
int numero = random.nextInt(rango) + minimo; int numero = random.nextInt(rango) + minimo;
while (!hashTable.insertar(palabras.getPalabra(), numero)) { while (! hashTable.insertar(palabras.getPalabra(), numero)) {
if (hashTable.size() == 10) { if (hashTable.size() == 10) {
break; break;
} }
@ -107,6 +107,40 @@ public class HashTableController implements Initializable {
generarGrafico(); generarGrafico();
} }
/**
* Crear el hashTable de tamaño 10.
*/
private void initializeHashTable() {
scene = contenidoHashTable.getScene();
grafico = new Grafico(scene);
this.hashTable = new HashTable(10);
}
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
grafico.removerDestacar();
for (int i = 0; i < 10; i++) {
if (hashTable.getIndice(i) != null) {
Text text = (Text) scene.lookup("#indice_texto_" + String.valueOf(i));
text.setText(String.valueOf(i));
text = (Text) scene.lookup("#llave_texto_" + String.valueOf(i));
text.setText(hashTable.getIndice(i).getLlave());
text = (Text) scene.lookup("#valor_texto_" + String.valueOf(i));
text.setText(String.valueOf(hashTable.getIndice(i).getValor()));
}
else {
Text text = (Text) scene.lookup("#indice_texto_" + String.valueOf(i));
text.setText("");
text = (Text) scene.lookup("#llave_texto_" + String.valueOf(i));
text.setText("");
text = (Text) scene.lookup("#valor_texto_" + String.valueOf(i));
text.setText("");
}
}
}
/** /**
* Vaciar el hashTable de todos los valores. * Vaciar el hashTable de todos los valores.
*/ */
@ -131,10 +165,10 @@ public class HashTableController implements Initializable {
// Mostrar el codigo // Mostrar el codigo
/*String tipo = (hashTable.isOrdered()) ? "Ordenado" : "Simple"; /*String tipo = (hashTable.isOrdered()) ? "Ordenado" : "Simple";
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/hashTable" + tipo + "/insertar")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/hashTable" + tipo + "/insertar")).useDelimiter("\\Z").next();
codigoHashTable.setText(codigoTexto);*/ codigoHashTable.setText(codigoTexto);*/
if (llaveHashTable.getText() != null && !llaveHashTable.getText().trim().equals("") && valorHashTable.getText() != null && !valorHashTable.getText().trim().equals("")) { if (llaveHashTable.getText() != null && ! llaveHashTable.getText().trim().equals("") && valorHashTable.getText() != null && ! valorHashTable.getText().trim().equals("")) {
try { try {
boolean exito = hashTable.insertar(llaveHashTable.getText().trim(), Integer.valueOf(valorHashTable.getText())); boolean exito = hashTable.insertar(llaveHashTable.getText().trim(), Integer.valueOf(valorHashTable.getText()));
if (exito) { if (exito) {
@ -173,11 +207,11 @@ public class HashTableController implements Initializable {
// Mostrar el codigo // Mostrar el codigo
/*String tipo = (hashTable.isOrdered()) ? "Ordenado" : "Simple"; /*String tipo = (hashTable.isOrdered()) ? "Ordenado" : "Simple";
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/hashTable" + tipo + "/eliminar")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/hashTable" + tipo + "/eliminar")).useDelimiter("\\Z").next();
codigoHashTable.setText(codigoTexto);*/ codigoHashTable.setText(codigoTexto);*/
try { try {
if (llaveHashTable.getText() != null && !llaveHashTable.getText().trim().equals("")) { if (llaveHashTable.getText() != null && ! llaveHashTable.getText().trim().equals("")) {
boolean exito = hashTable.eliminar(llaveHashTable.getText()); boolean exito = hashTable.eliminar(llaveHashTable.getText());
if (exito) { if (exito) {
llaveHashTable.setText(""); llaveHashTable.setText("");
@ -211,11 +245,11 @@ public class HashTableController implements Initializable {
// Mostrar el codigo // Mostrar el codigo
/*String tipo = (hashTable.isOrdered()) ? "Ordenado" : "Simple"; /*String tipo = (hashTable.isOrdered()) ? "Ordenado" : "Simple";
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/hashTable" + tipo + "/buscar")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/hashTable" + tipo + "/buscar")).useDelimiter("\\Z").next();
codigoHashTable.setText(codigoTexto);*/ codigoHashTable.setText(codigoTexto);*/
try { try {
if (llaveHashTable.getText() != null && !llaveHashTable.getText().trim().equals("")) { if (llaveHashTable.getText() != null && ! llaveHashTable.getText().trim().equals("")) {
HashItem hashItem = hashTable.buscar(llaveHashTable.getText()); HashItem hashItem = hashTable.buscar(llaveHashTable.getText());
if (hashItem != null) { if (hashItem != null) {
generarGrafico(); generarGrafico();
@ -240,39 +274,5 @@ public class HashTableController implements Initializable {
Logs.log(Level.WARNING, "No es tipo int."); Logs.log(Level.WARNING, "No es tipo int.");
Main.mostrarError(resourceBundle.getString("tablaHashNoLlave"), resourceBundle); Main.mostrarError(resourceBundle.getString("tablaHashNoLlave"), resourceBundle);
} }
} }
/**
* Crear el hashTable de tamaño 10.
*/
private void initializeHashTable() {
scene = contenidoHashTable.getScene();
grafico = new Grafico(scene);
this.hashTable = new HashTable(10);
}
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
grafico.removerDestacar();
for (int i = 0; i < 10; i++) {
if (hashTable.getIndice(i) != null) {
Text text = (Text) scene.lookup("#indice_texto_" + String.valueOf(i));
text.setText(String.valueOf(i));
text = (Text) scene.lookup("#llave_texto_" + String.valueOf(i));
text.setText(hashTable.getIndice(i).getLlave());
text = (Text) scene.lookup("#valor_texto_" + String.valueOf(i));
text.setText(String.valueOf(hashTable.getIndice(i).getValor()));
}
else {
Text text = (Text) scene.lookup("#indice_texto_" + String.valueOf(i));
text.setText("");
text = (Text) scene.lookup("#llave_texto_" + String.valueOf(i));
text.setText("");
text = (Text) scene.lookup("#valor_texto_" + String.valueOf(i));
text.setText("");
}
}
}
} }

View File

@ -46,7 +46,7 @@ public class InsercionController implements Initializable {
/** /**
* Inicializar todos los datos y dibujar las graficas. * Inicializar todos los datos y dibujar las graficas.
* *
* @param location URL: El URL de fxml en uso. * @param location URL: El URL de fxml en uso.
* @param resourceBundle ResourceBundle: Tiene datos de idioma. * @param resourceBundle ResourceBundle: Tiene datos de idioma.
*/ */
@Override @Override
@ -112,7 +112,7 @@ public class InsercionController implements Initializable {
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/insercion/ordenar")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/insercion/ordenar")).useDelimiter("\\Z").next();
codigoInsercion.setText(codigoTexto); codigoInsercion.setText(codigoTexto);
if (!array.insercion(true)) { if (! array.insercion(true)) {
Main.mostrarError(resourceBundle.getString("insercionYaOrdenado"), resourceBundle); Main.mostrarError(resourceBundle.getString("insercionYaOrdenado"), resourceBundle);
} }
@ -132,10 +132,10 @@ public class InsercionController implements Initializable {
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/insercion/ordenar")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/insercion/ordenar")).useDelimiter("\\Z").next();
codigoInsercion.setText(codigoTexto); codigoInsercion.setText(codigoTexto);
if (!array.insercion(false)) { if (! array.insercion(false)) {
Main.mostrarError(resourceBundle.getString("insercionYaOrdenado"), resourceBundle); Main.mostrarError(resourceBundle.getString("insercionYaOrdenado"), resourceBundle);
} }
generarGrafico(); generarGrafico();
} }
} }

View File

@ -6,172 +6,176 @@ package cl.cromer.estructuras;
* @author Chris Cromer * @author Chris Cromer
*/ */
final public class ListaEnlazada { final public class ListaEnlazada {
/** /**
* El enlace principal de la lista. * El enlace principal de la lista.
*/ */
private Enlace lista; private Enlace lista;
/** /**
* La cantidad de enlaces que están en la lista. * La cantidad de enlaces que están en la lista.
*/ */
private int size; private int size;
/** /**
* El tipo de lista enlazada. * El tipo de lista enlazada.
*/ */
private int tipo; private int tipo;
/** /**
* Inicilizar. * Inicilizar.
*/ */
public ListaEnlazada() { public ListaEnlazada() {
lista = null; lista = null;
} }
/** /**
* Devolver la cantidad de enlaces que están en la lista. * Devolver el tipo de lista.
* *
* @return int: La cantidad. * @return int: El tipo.
*/ */
public int size() { public int getTipo() {
return size; return tipo;
} }
/** /**
* Devolver el tipo de lista. * Cambiar el tipo de lista.
* *
* @return int: El tipo. * @param tipo int: El tipo a cambiar.
*/ */
public int getTipo() { public void setTipo(int tipo) {
return tipo; this.tipo = tipo;
} }
/** /**
* Cambiar el tipo de lista. * Insertar una llave en la lista.
* *
* @param tipo int: El tipo a cambiar. * @param llave int: La llave a insertar.
*/ *
public void setTipo(int tipo) { * @return boolean: Verdad si fue insertado, sino falso.
this.tipo = tipo; */
} public boolean insertar(int llave) {
if (buscar(llave) == null) {
// Crear una enlace y agregarla a la lista
Enlace nuevo = new EnlaceNormal();
nuevo.setLlave(llave);
nuevo.setSiguiente(lista);
if (lista != null) {
lista.setPrevio(nuevo);
}
lista = nuevo;
size++;
return true;
}
else {
// Se falló porque la llave ya existe
return false;
}
}
/** /**
* Buscar una llave en la lista. * Buscar una llave en la lista.
* *
* @param llave int: La llave a buscar. * @param llave int: La llave a buscar.
* @return Enlace: El enlace que contiene la llave buscada. *
*/ * @return Enlace: El enlace que contiene la llave buscada.
public Enlace buscar(int llave) { */
if (this.lista != null) { public Enlace buscar(int llave) {
// La lista no es vacia if (this.lista != null) {
Enlace lista = this.lista; // La lista no es vacia
while (lista.getLlave() != llave) { Enlace lista = this.lista;
// Buscar hasta la llave es encontrado while (lista.getLlave() != llave) {
if (lista.getSiguiente() != null) { // Buscar hasta la llave es encontrado
// Buscar en la siguiente enlace if (lista.getSiguiente() != null) {
lista = (Enlace) lista.getSiguiente(); // Buscar en la siguiente enlace
} lista = (Enlace) lista.getSiguiente();
else { }
// No se encuentra else {
return null; // No se encuentra
} return null;
} }
// Se encontró }
return lista; // Se encontró
} return lista;
else { }
// La lista es vacia, nada para buscar else {
return null; // La lista es vacia, nada para buscar
} return null;
} }
}
/** /**
* Insertar una llave en la lista. * Eliminar un enlace de la lista.
* *
* @param llave int: La llave a insertar. * @param llave int: La llave a eliminar.
* @return boolean: Verdad si fue insertado, sino falso. *
*/ * @return boolean: Verdad si fue borrado, sino falso.
public boolean insertar(int llave) { */
if (buscar(llave) == null) { public boolean eliminar(int llave) {
// Crear una enlace y agregarla a la lista if (lista != null) {
Enlace nuevo = new EnlaceNormal(); // La lista no es vacia
nuevo.setLlave(llave); Enlace lista = this.lista;
nuevo.setSiguiente(lista); Enlace previo = lista;
if (lista != null) { while (lista.getLlave() != llave) {
lista.setPrevio(nuevo); // Buscar hasta la llave es encontraddo
} if (lista.getSiguiente() != null) {
lista = nuevo; // Buscar en la siguiente enlace
size++; previo = lista;
return true; lista = (Enlace) lista.getSiguiente();
} }
else { else {
// Se falló porque la llave ya existe // No se encuentra
return false; return false;
} }
} }
// Se encontró
if (lista == this.lista) {
// Si es la primera enlace, cambiarla al siguiente enlace
this.lista = (Enlace) this.lista.getSiguiente();
if (this.lista.getPrevio() != null) {
this.lista.setPrevio(null);
}
}
else {
// Sino cortar esta enlace de la lista
previo.setSiguiente(lista.getSiguiente());
}
size--;
return true;
}
else {
// La lista es vacia, no hay nada para eliminar
return false;
}
}
/** /**
* Eliminar un enlace de la lista. * Devolver un enlace con su llave y valor.
* *
* @param llave int: La llave a eliminar. * @param indice int: El indice que desea ver.
* @return boolean: Verdad si fue borrado, sino falso. *
*/ * @return Enlace: El enlace a devolver.
public boolean eliminar(int llave) { */
if (lista != null) { public Enlace getIndice(int indice) {
// La lista no es vacia if (lista != null && indice >= 0 && indice < size()) {
Enlace lista = this.lista; int i = size();
Enlace previo = lista; Enlace lista = this.lista;
while (lista.getLlave() != llave) { while (i > indice + 1) {
// Buscar hasta la llave es encontraddo lista = (Enlace) lista.getSiguiente();
if (lista.getSiguiente() != null) { i--;
// Buscar en la siguiente enlace }
previo = lista; return lista;
lista = (Enlace) lista.getSiguiente(); }
} else {
else { return null;
// No se encuentra }
return false; }
}
}
// Se encontró
if (lista == this.lista) {
// Si es la primera enlace, cambiarla al siguiente enlace
this.lista = (Enlace) this.lista.getSiguiente();
if (this.lista.getPrevio() != null) {
this.lista.setPrevio(null);
}
}
else {
// Sino cortar esta enlace de la lista
previo.setSiguiente(lista.getSiguiente());
}
size--;
return true;
}
else {
// La lista es vacia, no hay nada para eliminar
return false;
}
}
/** /**
* Devolver un enlace con su llave y valor. * Devolver la cantidad de enlaces que están en la lista.
* *
* @param indice int: El indice que desea ver. * @return int: La cantidad.
* @return Enlace: El enlace a devolver. */
*/ public int size() {
public Enlace getIndice(int indice) { return size;
if (lista != null && indice >= 0 && indice < size()) { }
int i = size();
Enlace lista = this.lista;
while (i > indice + 1) {
lista = (Enlace) lista.getSiguiente();
i--;
}
return lista;
}
else {
return null;
}
}
} }

View File

@ -6,183 +6,188 @@ package cl.cromer.estructuras;
* @author Chris Cromer * @author Chris Cromer
*/ */
final public class ListaEnlazadaCircular { final public class ListaEnlazadaCircular {
/** /**
* El primer enlace. * El primer enlace.
*/ */
private Enlace primer; private Enlace primer;
/**
* El ultimo enlace.
*/
private Enlace ultimo;
/** /**
* La cantidad de enlaces que hay. * El ultimo enlace.
*/ */
private int size; private Enlace ultimo;
/** /**
* El tipo de lista enlazada. * La cantidad de enlaces que hay.
*/ */
private int tipo; private int size;
/** /**
* Inicilizar. * El tipo de lista enlazada.
*/ */
public ListaEnlazadaCircular() { private int tipo;
primer = null;
ultimo = null;
}
/** /**
* Devolver la cantidad de enlaces que están en la lista. * Inicilizar.
* */
* @return int: La cantidad. public ListaEnlazadaCircular() {
*/ primer = null;
public int size() { ultimo = null;
return size; }
}
/** /**
* Devolver el tipo de lista. * Devolver el tipo de lista.
* *
* @return int: El tipo de lista. * @return int: El tipo de lista.
*/ */
public int getTipo() { public int getTipo() {
return tipo; return tipo;
} }
/** /**
* Cambiar el tipo de lista. * Cambiar el tipo de lista.
* *
* @param tipo int: El tipo a cambiar. * @param tipo int: El tipo a cambiar.
*/ */
public void setTipo(int tipo) { public void setTipo(int tipo) {
this.tipo = tipo; this.tipo = tipo;
} }
/** /**
* Buscar una llave en la lista. * Insertar una llave en la lista.
* *
* @param llave int: La llave a buscar. * @param llave int: La llave a insertar.
* @return Enlace: El enlace que contiene la llave. *
*/ * @return boolean: Verdad si fue insertado, falso si ya existe la llave.
public Enlace buscar(int llave) { */
if (this.primer != null) { public boolean insertar(int llave) {
// La lista no es vacia if (buscar(llave) == null) {
Enlace lista = this.primer; // Crear una enlace y agregarla a la lista
int i = 0; Enlace enlace = new EnlaceCircular();
while (lista.getLlave() != llave && i < size()) {
// Buscar en la sigenute enlace hasta el final.
lista = (Enlace) lista.getSiguiente();
i++;
}
if (lista.getLlave() == llave) {
// Devoler el enlace encontrado.
return lista;
}
else {
// No se encontró.
return null;
}
}
else {
// La lista es vacia, nada para buscar
return null;
}
}
/** if (primer == null) {
* Insertar una llave en la lista. ultimo = enlace;
* }
* @param llave int: La llave a insertar.
* @return boolean: Verdad si fue insertado, falso si ya existe la llave.
*/
public boolean insertar(int llave) {
if (buscar(llave) == null) {
// Crear una enlace y agregarla a la lista
Enlace enlace = new EnlaceCircular();
if (primer == null) { enlace.setLlave(llave);
ultimo = enlace; enlace.setSiguiente(primer);
} primer = enlace;
ultimo.setSiguiente(primer);
enlace.setLlave(llave); size++;
enlace.setSiguiente(primer); return true;
primer = enlace; }
ultimo.setSiguiente(primer); else {
// Se falló porque la llave ya existe
return false;
}
}
size++; /**
return true; * Buscar una llave en la lista.
} *
else { * @param llave int: La llave a buscar.
// Se falló porque la llave ya existe *
return false; * @return Enlace: El enlace que contiene la llave.
} */
} public Enlace buscar(int llave) {
if (this.primer != null) {
// La lista no es vacia
Enlace lista = this.primer;
int i = 0;
while (lista.getLlave() != llave && i < size()) {
// Buscar en la sigenute enlace hasta el final.
lista = (Enlace) lista.getSiguiente();
i++;
}
if (lista.getLlave() == llave) {
// Devoler el enlace encontrado.
return lista;
}
else {
// No se encontró.
return null;
}
}
else {
// La lista es vacia, nada para buscar
return null;
}
}
/** /**
* Eliminar un enlace de la lista. * Devolver la cantidad de enlaces que están en la lista.
* *
* @param llave int: La llave a elminiar. * @return int: La cantidad.
* @return boolean: Verdad se fue eliminado, falso si no estaba en la lista. */
*/ public int size() {
public boolean eliminar(int llave) { return size;
if (primer != null) { }
// La lista no es vacia
Enlace lista = this.primer;
Enlace previo = lista;
int i = 0;
while (lista.getLlave() != llave && i < size()) {
// Buscar hasta la llave es encontraddo
if (lista.getSiguiente() != null) {
// Buscar en la siguiente enlace
previo = lista;
lista = (Enlace) lista.getSiguiente();
}
i++;
}
if (lista.getLlave() != llave) { /**
// No se encontró * Eliminar un enlace de la lista.
return false; *
} * @param llave int: La llave a elminiar.
*
* @return boolean: Verdad se fue eliminado, falso si no estaba en la lista.
*/
public boolean eliminar(int llave) {
if (primer != null) {
// La lista no es vacia
Enlace lista = this.primer;
Enlace previo = lista;
int i = 0;
while (lista.getLlave() != llave && i < size()) {
// Buscar hasta la llave es encontraddo
if (lista.getSiguiente() != null) {
// Buscar en la siguiente enlace
previo = lista;
lista = (Enlace) lista.getSiguiente();
}
i++;
}
// Se encontró if (lista.getLlave() != llave) {
if (lista == this.primer) { // No se encontró
// Si es la primera enlace, cambiarla al sigueinte enlace return false;
this.primer = (Enlace) this.primer.getSiguiente(); }
}
else {
// Sino cortar esta enlace de la lista
previo.setSiguiente(lista.getSiguiente());
}
size--;
return true;
}
else {
// La lista es vacia, no hay nada para eliminar
return false;
}
}
/** // Se encontró
* Devolver un enlace con su llave y valor. if (lista == this.primer) {
* // Si es la primera enlace, cambiarla al sigueinte enlace
* @param indice int: El indice que desea ver. this.primer = (Enlace) this.primer.getSiguiente();
* @return Enlace: El enlace a devolver. }
*/ else {
public Enlace getIndice(int indice) { // Sino cortar esta enlace de la lista
if (primer != null && indice >= 0 && indice < size()) { previo.setSiguiente(lista.getSiguiente());
int i = size(); }
Enlace lista = this.primer; size--;
while (i > indice + 1) { return true;
lista = (Enlace) lista.getSiguiente(); }
i--; else {
} // La lista es vacia, no hay nada para eliminar
return lista; return false;
} }
else { }
return null;
} /**
} * Devolver un enlace con su llave y valor.
*
* @param indice int: El indice que desea ver.
*
* @return Enlace: El enlace a devolver.
*/
public Enlace getIndice(int indice) {
if (primer != null && indice >= 0 && indice < size()) {
int i = size();
Enlace lista = this.primer;
while (i > indice + 1) {
lista = (Enlace) lista.getSiguiente();
i--;
}
return lista;
}
else {
return null;
}
}
} }

View File

@ -6,51 +6,53 @@ package cl.cromer.estructuras;
* @author Chris Cromer * @author Chris Cromer
*/ */
final public class ListaEnlazadaTipos { final public class ListaEnlazadaTipos {
/** /**
* Tipo simple. * Tipo simple.
*/ */
static final public int SIMPLE = 0; static final public int SIMPLE = 0;
/**
* Tipo circular.
*/
static final public int CIRCULAR = 1;
/**
* Tipo doblemente enlazada.
*/
static final public int DOBLEMENTE_ENLAZADA = 2;
/** /**
* El tipo elegido. * Tipo circular.
*/ */
final private int tipo; static final public int CIRCULAR = 1;
/** /**
* Inicilizar el tipo de lista enlazada. * Tipo doblemente enlazada.
* */
* @param tipo int: El tipo de lista enlazada, {@value #SIMPLE}, {@value #CIRCULAR} o {@value #DOBLEMENTE_ENLAZADA} static final public int DOBLEMENTE_ENLAZADA = 2;
*/
public ListaEnlazadaTipos(int tipo) {
switch (tipo) {
case SIMPLE:
this.tipo = SIMPLE;
break;
case CIRCULAR:
this.tipo = CIRCULAR;
break;
case DOBLEMENTE_ENLAZADA:
this.tipo = DOBLEMENTE_ENLAZADA;
break;
default:
this.tipo = SIMPLE;
}
}
/** /**
* Devolver el tipo de lista enlazada. * El tipo elegido.
* */
* @return int: El tipo. final private int tipo;
*/
public int getTipo() { /**
return tipo; * Inicilizar el tipo de lista enlazada.
} *
* @param tipo int: El tipo de lista enlazada, {@value #SIMPLE}, {@value #CIRCULAR} o {@value #DOBLEMENTE_ENLAZADA}
*/
public ListaEnlazadaTipos(int tipo) {
switch (tipo) {
case SIMPLE:
this.tipo = SIMPLE;
break;
case CIRCULAR:
this.tipo = CIRCULAR;
break;
case DOBLEMENTE_ENLAZADA:
this.tipo = DOBLEMENTE_ENLAZADA;
break;
default:
this.tipo = SIMPLE;
}
}
/**
* Devolver el tipo de lista enlazada.
*
* @return int: El tipo.
*/
public int getTipo() {
return tipo;
}
} }

View File

@ -80,7 +80,7 @@ public class ListaEnlazdaController implements Initializable {
/** /**
* Inicializar todos los datos y dibujar las graficas. * Inicializar todos los datos y dibujar las graficas.
* *
* @param location URL: El URL de fxml en uso. * @param location URL: El URL de fxml en uso.
* @param resourceBundle ResourceBundle: Tiene datos de idioma. * @param resourceBundle ResourceBundle: Tiene datos de idioma.
*/ */
@Override @Override
@ -254,7 +254,7 @@ public class ListaEnlazdaController implements Initializable {
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/listaEnlazada" + tipo + "/insertar")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/listaEnlazada" + tipo + "/insertar")).useDelimiter("\\Z").next();
codigoLista.setText(codigoTexto); codigoLista.setText(codigoTexto);
if (valorLista.getText() != null && !valorLista.getText().trim().equals("")) { if (valorLista.getText() != null && ! valorLista.getText().trim().equals("")) {
try { try {
boolean exito; boolean exito;
if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) { if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) {
@ -316,7 +316,7 @@ public class ListaEnlazdaController implements Initializable {
codigoLista.setText(codigoTexto); codigoLista.setText(codigoTexto);
try { try {
if (valorLista.getText() != null && !valorLista.getText().trim().equals("")) { if (valorLista.getText() != null && ! valorLista.getText().trim().equals("")) {
boolean exito; boolean exito;
if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) { if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) {
exito = listaEnlazada.eliminar(Integer.valueOf(valorLista.getText())); exito = listaEnlazada.eliminar(Integer.valueOf(valorLista.getText()));
@ -360,7 +360,7 @@ public class ListaEnlazdaController implements Initializable {
codigoLista.setText(codigoTexto); codigoLista.setText(codigoTexto);
try { try {
if (valorLista.getText() != null && !valorLista.getText().trim().equals("")) { if (valorLista.getText() != null && ! valorLista.getText().trim().equals("")) {
Enlace enlace; Enlace enlace;
if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) { if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) {
enlace = listaEnlazada.buscar(Integer.valueOf(valorLista.getText())); enlace = listaEnlazada.buscar(Integer.valueOf(valorLista.getText()));
@ -386,6 +386,6 @@ public class ListaEnlazdaController implements Initializable {
// El error no es fatal, sigue // El error no es fatal, sigue
Logs.log(Level.WARNING, "No es tipo int."); Logs.log(Level.WARNING, "No es tipo int.");
Main.mostrarError(resourceBundle.getString("listaNoValor"), resourceBundle); Main.mostrarError(resourceBundle.getString("listaNoValor"), resourceBundle);
} }
} }
} }

View File

@ -12,43 +12,43 @@ import java.util.logging.SimpleFormatter;
* @author Chris Cromer * @author Chris Cromer
*/ */
public class Logs { public class Logs {
/** /**
* Nombre de archivo para guardar los logs. * Nombre de archivo para guardar los logs.
*/ */
static final public String LOGFILE = "./EDD.log"; static final public String LOGFILE = "./EDD.log";
/** /**
* Nombre del log. * Nombre del log.
*/ */
static final public String LOGNAME = "EDD"; static final public String LOGNAME = "EDD";
/** /**
* Crear un logger usando {@value #LOGNAME}. Guardar los logs en el archivo de {@value #LOGFILE}. Pero solo logear si Main.DEBUG es vardad. * Crear un logger usando {@value #LOGNAME}. Guardar los logs en el archivo de {@value #LOGFILE}. Pero solo logear si Main.DEBUG es vardad.
*/ */
public Logs() { public Logs() {
if (Main.DEBUG) { if (Main.DEBUG) {
Logger logger = Logger.getLogger(LOGNAME); Logger logger = Logger.getLogger(LOGNAME);
try { try {
FileHandler fileHandler = new FileHandler(LOGFILE, true); FileHandler fileHandler = new FileHandler(LOGFILE, true);
logger.addHandler(fileHandler); logger.addHandler(fileHandler);
SimpleFormatter formatter = new SimpleFormatter(); SimpleFormatter formatter = new SimpleFormatter();
fileHandler.setFormatter(formatter); fileHandler.setFormatter(formatter);
} }
catch (SecurityException | IOException e) { catch (SecurityException | IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
} }
/** /**
* Agregar un log al logger. * Agregar un log al logger.
* *
* @param level Level: El tipo de error o mensaje que ha sido generado. * @param level Level: El tipo de error o mensaje que ha sido generado.
* @param mensaje String: El mensaje de lo que pasó. * @param mensaje String: El mensaje de lo que pasó.
*/ */
static public void log(Level level, String mensaje) { static public void log(Level level, String mensaje) {
if (Main.DEBUG) { if (Main.DEBUG) {
Logger.getLogger(LOGNAME).log(level, mensaje); Logger.getLogger(LOGNAME).log(level, mensaje);
} }
} }
} }

View File

@ -25,79 +25,79 @@ import java.util.logging.Level;
* @version 1.0.0 * @version 1.0.0
*/ */
public class Main extends Application { public class Main extends Application {
/** /**
* Estado de depuración. * Estado de depuración.
*/ */
static final public boolean DEBUG = false; static final public boolean DEBUG = false;
/** /**
* Inicilizar el logeo y lanzar la interfaz grafica. * Inicilizar el logeo y lanzar la interfaz grafica.
* *
* @param args String[]: Argumentos desde la consola. * @param args String[]: Argumentos desde la consola.
*/ */
public static void main(String args[]) { public static void main(String args[]) {
if (DEBUG) { if (DEBUG) {
new Logs(); new Logs();
} }
launch(args); launch(args);
} }
/** /**
* Cambiar el icono de una ventana. * Mostrar una ventana con mensaje en la pantalla.
* *
* @param dialog Dialog: El Dialog a cambiar. * @param mensaje String: El mensaje a mostrar.
* @param clase Class: La clase usado para abrir el Stream. * @param resourceBundle ResourceBundle: Contiene el idioma actual.
*/ */
static public void setIcon(Dialog dialog, Class clase) { static public void mostrarError(String mensaje, ResourceBundle resourceBundle) {
Stage stage = (Stage) dialog.getDialogPane().getScene().getWindow(); ButtonType botonCerrar = new ButtonType(resourceBundle.getString("cerrar"), ButtonBar.ButtonData.OK_DONE);
stage.getIcons().add(new Image(clase.getResourceAsStream("/cl/cromer/estructuras/images/icon.png"))); Dialog<String> dialog = new Dialog<>();
} dialog.setTitle(resourceBundle.getString("error"));
dialog.setContentText(mensaje);
dialog.getDialogPane().getButtonTypes().add(botonCerrar);
dialog.getDialogPane().getScene().getWindow().sizeToScene();
Main.setIcon(dialog, Main.class);
dialog.show();
}
/** /**
* Mostrar una ventana con mensaje en la pantalla. * Cambiar el icono de una ventana.
* *
* @param mensaje String: El mensaje a mostrar. * @param dialog Dialog: El Dialog a cambiar.
* @param resourceBundle ResourceBundle: Contiene el idioma actual. * @param clase Class: La clase usado para abrir el Stream.
*/ */
static public void mostrarError(String mensaje, ResourceBundle resourceBundle) { static public void setIcon(Dialog dialog, Class clase) {
ButtonType botonCerrar = new ButtonType(resourceBundle.getString("cerrar"), ButtonBar.ButtonData.OK_DONE); Stage stage = (Stage) dialog.getDialogPane().getScene().getWindow();
Dialog<String> dialog = new Dialog<>(); stage.getIcons().add(new Image(clase.getResourceAsStream("/cl/cromer/estructuras/images/icon.png")));
dialog.setTitle(resourceBundle.getString("error")); }
dialog.setContentText(mensaje);
dialog.getDialogPane().getButtonTypes().add(botonCerrar);
dialog.getDialogPane().getScene().getWindow().sizeToScene();
Main.setIcon(dialog, Main.class);
dialog.show();
}
/** /**
* Crear el stage y la scene para la aplicación grafica. * Crear el stage y la scene para la aplicación grafica.
* *
* @param stage Stage: El primer stage donde va todas las cosas visuales. * @param stage Stage: El primer stage donde va todas las cosas visuales.
*/ */
@Override @Override
public void start(Stage stage) { public void start(Stage stage) {
Locale locale = new Locale("es", "ES"); Locale locale = new Locale("es", "ES");
ResourceBundle resourceBundle = ResourceBundle.getBundle("cl.cromer.estructuras.bundles.Idioma", locale); ResourceBundle resourceBundle = ResourceBundle.getBundle("cl.cromer.estructuras.bundles.Idioma", locale);
try { try {
Parent parent = FXMLLoader.load(getClass().getResource("/cl/cromer/estructuras/fxml/main.fxml"), ResourceBundle.getBundle("cl.cromer.estructuras.bundles.Idioma", locale)); Parent parent = FXMLLoader.load(getClass().getResource("/cl/cromer/estructuras/fxml/main.fxml"), ResourceBundle.getBundle("cl.cromer.estructuras.bundles.Idioma", locale));
stage.setTitle(resourceBundle.getString("titulo")); stage.setTitle(resourceBundle.getString("titulo"));
Scene scene = new Scene(parent, 1024, 768); Scene scene = new Scene(parent, 1024, 768);
scene.getStylesheets().add("/cl/cromer/estructuras/css/style.css"); scene.getStylesheets().add("/cl/cromer/estructuras/css/style.css");
stage.setScene(scene); stage.setScene(scene);
} }
catch (IOException exception) { catch (IOException exception) {
// Este error es fatal, hay que cerrar la aplicación. // Este error es fatal, hay que cerrar la aplicación.
Logs.log(Level.SEVERE, "No se pudo abrir el archivo de fxml."); Logs.log(Level.SEVERE, "No se pudo abrir el archivo de fxml.");
stage.close(); stage.close();
} }
//stage.setMaximized(true); //stage.setMaximized(true);
stage.setMinHeight(640); stage.setMinHeight(640);
stage.setMinWidth(768); stage.setMinWidth(768);
stage.getIcons().add(new Image(getClass().getResourceAsStream("/cl/cromer/estructuras/images/icon.png"))); stage.getIcons().add(new Image(getClass().getResourceAsStream("/cl/cromer/estructuras/images/icon.png")));
stage.show(); stage.show();
} }
} }

View File

@ -25,352 +25,352 @@ import static cl.cromer.estructuras.ListaEnlazadaTipos.SIMPLE;
* Controlar las acciones cuando una opción es elegido en el menu. * Controlar las acciones cuando una opción es elegido en el menu.
*/ */
public class MenuController extends VBox implements Initializable { public class MenuController extends VBox implements Initializable {
/** /**
* La barra del menu. * La barra del menu.
*/ */
@FXML @FXML
private MenuBar menuBar; private MenuBar menuBar;
/** /**
* Los idiomas. * Los idiomas.
*/ */
private ResourceBundle resourceBundle; private ResourceBundle resourceBundle;
/** /**
* Inicialicar el menu con el idioma. * Inicialicar el menu con el idioma.
* *
* @param location URL: Tiene URL de FXML en uso. * @param location URL: Tiene URL de FXML en uso.
* @param resourceBundle: Tiene los idiomas. * @param resourceBundle: Tiene los idiomas.
*/ */
@Override @Override
public void initialize(URL location, ResourceBundle resourceBundle) { public void initialize(URL location, ResourceBundle resourceBundle) {
this.resourceBundle = resourceBundle; this.resourceBundle = resourceBundle;
} }
/** /**
* Click en Array Simple. * Click en Array Simple.
*/ */
@FXML @FXML
protected void menuArraySimple() { protected void menuArraySimple() {
ArrayTipos arrayTipos = new ArrayTipos(ArrayTipos.SIMPLE); ArrayTipos arrayTipos = new ArrayTipos(ArrayTipos.SIMPLE);
loadStage( loadStage(
resourceBundle.getString("tituloArraySimple"), resourceBundle.getString("tituloArraySimple"),
"/cl/cromer/estructuras/fxml/array.fxml", "/cl/cromer/estructuras/fxml/array.fxml",
"/cl/cromer/estructuras/css/style.css", "/cl/cromer/estructuras/css/style.css",
arrayTipos arrayTipos
); );
} }
/** /**
* Cargar el fxml, css y titulo. * Cargar el fxml, css y titulo.
* *
* @param title String: El titulo de la escena. * @param title String: El titulo de la escena.
* @param fxml String: El archivo de fxml. * @param fxml String: El archivo de fxml.
* @param css String: El archivo de css. * @param css String: El archivo de css.
* @param object Object: El objeto a pasar a la nueva escena. * @param object Object: El objeto a pasar a la nueva escena.
*/ */
private void loadStage(String title, String fxml, String css, Object object) { private void loadStage(String title, String fxml, String css, Object object) {
Scene scene = menuBar.getScene(); Scene scene = menuBar.getScene();
Stage stage = (Stage) scene.getWindow(); Stage stage = (Stage) scene.getWindow();
openFXML(fxml, scene, stage); openFXML(fxml, scene, stage);
scene.getStylesheets().add(css); scene.getStylesheets().add(css);
scene.setUserData(object); scene.setUserData(object);
stage.setScene(scene); stage.setScene(scene);
stage.setTitle(this.resourceBundle.getString("titulo") + " - " + title); stage.setTitle(this.resourceBundle.getString("titulo") + " - " + title);
} }
private void openFXML(String fxml, Scene scene, Stage stage) { private void openFXML(String fxml, Scene scene, Stage stage) {
try { try {
Parent parent = FXMLLoader.load(getClass().getResource(fxml), this.resourceBundle); Parent parent = FXMLLoader.load(getClass().getResource(fxml), this.resourceBundle);
scene.setRoot(parent); scene.setRoot(parent);
} }
catch (IOException exception) { catch (IOException exception) {
// Este error es fatal, hay que cerrar la aplicación. // Este error es fatal, hay que cerrar la aplicación.
Logs.log(Level.SEVERE, "No se pudo abrir el archivo de fxml."); Logs.log(Level.SEVERE, "No se pudo abrir el archivo de fxml.");
stage.close(); stage.close();
} }
} }
/** /**
* Click en Array Ordenado. * Click en Array Ordenado.
*/ */
@FXML @FXML
protected void menuArrayOrdenado() { protected void menuArrayOrdenado() {
ArrayTipos arrayTipos = new ArrayTipos(ArrayTipos.ORDENADO); ArrayTipos arrayTipos = new ArrayTipos(ArrayTipos.ORDENADO);
loadStage( loadStage(
resourceBundle.getString("tituloArrayOrdenado"), resourceBundle.getString("tituloArrayOrdenado"),
"/cl/cromer/estructuras/fxml/array.fxml", "/cl/cromer/estructuras/fxml/array.fxml",
"/cl/cromer/estructuras/css/style.css", "/cl/cromer/estructuras/css/style.css",
arrayTipos arrayTipos
); );
} }
/** /**
* Click en Burbuja. * Click en Burbuja.
*/ */
@FXML @FXML
protected void menuBurbuja() { protected void menuBurbuja() {
loadStage( loadStage(
resourceBundle.getString("tituloBurbuja"), resourceBundle.getString("tituloBurbuja"),
"/cl/cromer/estructuras/fxml/burbuja.fxml", "/cl/cromer/estructuras/fxml/burbuja.fxml",
"/cl/cromer/estructuras/css/style.css" "/cl/cromer/estructuras/css/style.css"
); );
} }
/** /**
* Cargar el fxml, css y titulo. * Cargar el fxml, css y titulo.
* *
* @param title String: El titulo de la escena. * @param title String: El titulo de la escena.
* @param fxml String: El archivo de fxml. * @param fxml String: El archivo de fxml.
* @param css String: El archivo de css. * @param css String: El archivo de css.
*/ */
private void loadStage(String title, String fxml, String css) { private void loadStage(String title, String fxml, String css) {
Scene scene = menuBar.getScene(); Scene scene = menuBar.getScene();
Stage stage = (Stage) scene.getWindow(); Stage stage = (Stage) scene.getWindow();
openFXML(fxml, scene, stage); openFXML(fxml, scene, stage);
scene.getStylesheets().add(css); scene.getStylesheets().add(css);
stage.setScene(scene); stage.setScene(scene);
stage.setTitle(this.resourceBundle.getString("titulo") + " - " + title); stage.setTitle(this.resourceBundle.getString("titulo") + " - " + title);
} }
/** /**
* Click en Inserción. * Click en Inserción.
*/ */
@FXML @FXML
protected void menuInsercion() { protected void menuInsercion() {
loadStage( loadStage(
resourceBundle.getString("tituloInsercion"), resourceBundle.getString("tituloInsercion"),
"/cl/cromer/estructuras/fxml/insercion.fxml", "/cl/cromer/estructuras/fxml/insercion.fxml",
"/cl/cromer/estructuras/css/style.css" "/cl/cromer/estructuras/css/style.css"
); );
} }
/** /**
* Click en Selecion. * Click en Selecion.
*/ */
@FXML @FXML
protected void menuSeleccion() { protected void menuSeleccion() {
loadStage( loadStage(
resourceBundle.getString("tituloSeleccion"), resourceBundle.getString("tituloSeleccion"),
"/cl/cromer/estructuras/fxml/seleccion.fxml", "/cl/cromer/estructuras/fxml/seleccion.fxml",
"/cl/cromer/estructuras/css/style.css" "/cl/cromer/estructuras/css/style.css"
); );
} }
/** /**
* Click en Shell. * Click en Shell.
*/ */
@FXML @FXML
protected void menuShell() { protected void menuShell() {
loadStage( loadStage(
resourceBundle.getString("tituloShell"), resourceBundle.getString("tituloShell"),
"/cl/cromer/estructuras/fxml/shell.fxml", "/cl/cromer/estructuras/fxml/shell.fxml",
"/cl/cromer/estructuras/css/style.css" "/cl/cromer/estructuras/css/style.css"
); );
} }
/** /**
* Click en Quick. * Click en Quick.
*/ */
@FXML @FXML
protected void menuQuick() { protected void menuQuick() {
loadStage( loadStage(
resourceBundle.getString("tituloQuick"), resourceBundle.getString("tituloQuick"),
"/cl/cromer/estructuras/fxml/quick.fxml", "/cl/cromer/estructuras/fxml/quick.fxml",
"/cl/cromer/estructuras/css/style.css" "/cl/cromer/estructuras/css/style.css"
); );
} }
/** /**
* Click en Merge. * Click en Merge.
*/ */
@FXML @FXML
protected void menuMerge() { protected void menuMerge() {
loadStage( loadStage(
resourceBundle.getString("tituloMerge"), resourceBundle.getString("tituloMerge"),
"/cl/cromer/estructuras/fxml/merge.fxml", "/cl/cromer/estructuras/fxml/merge.fxml",
"/cl/cromer/estructuras/css/style.css" "/cl/cromer/estructuras/css/style.css"
); );
} }
/** /**
* Click en Lista Enlazada Simple. * Click en Lista Enlazada Simple.
*/ */
@FXML @FXML
protected void menuListaEnlazadaSimple() { protected void menuListaEnlazadaSimple() {
ListaEnlazadaTipos listaEnlazadaTipos = new ListaEnlazadaTipos(SIMPLE); ListaEnlazadaTipos listaEnlazadaTipos = new ListaEnlazadaTipos(SIMPLE);
loadStage( loadStage(
resourceBundle.getString("tituloListaEnlazadaSimple"), resourceBundle.getString("tituloListaEnlazadaSimple"),
"/cl/cromer/estructuras/fxml/listaEnlazada.fxml", "/cl/cromer/estructuras/fxml/listaEnlazada.fxml",
"/cl/cromer/estructuras/css/style.css", "/cl/cromer/estructuras/css/style.css",
listaEnlazadaTipos listaEnlazadaTipos
); );
} }
/** /**
* Click en Lista Enlazada Circular. * Click en Lista Enlazada Circular.
*/ */
@FXML @FXML
protected void menuListaEnlazadaCircular() { protected void menuListaEnlazadaCircular() {
ListaEnlazadaTipos listaEnlazadaTipos = new ListaEnlazadaTipos(ListaEnlazadaTipos.CIRCULAR); ListaEnlazadaTipos listaEnlazadaTipos = new ListaEnlazadaTipos(ListaEnlazadaTipos.CIRCULAR);
loadStage( loadStage(
resourceBundle.getString("tituloListaEnlazadaCircular"), resourceBundle.getString("tituloListaEnlazadaCircular"),
"/cl/cromer/estructuras/fxml/listaEnlazada.fxml", "/cl/cromer/estructuras/fxml/listaEnlazada.fxml",
"/cl/cromer/estructuras/css/style.css", "/cl/cromer/estructuras/css/style.css",
listaEnlazadaTipos listaEnlazadaTipos
); );
} }
/** /**
* Click en Lista Enlazada Doble. * Click en Lista Enlazada Doble.
*/ */
@FXML @FXML
protected void menuListaEnlazadaDoble() { protected void menuListaEnlazadaDoble() {
ListaEnlazadaTipos listaEnlazadaTipos = new ListaEnlazadaTipos(ListaEnlazadaTipos.DOBLEMENTE_ENLAZADA); ListaEnlazadaTipos listaEnlazadaTipos = new ListaEnlazadaTipos(ListaEnlazadaTipos.DOBLEMENTE_ENLAZADA);
loadStage( loadStage(
resourceBundle.getString("tituloListaEnlazadaDoble"), resourceBundle.getString("tituloListaEnlazadaDoble"),
"/cl/cromer/estructuras/fxml/listaEnlazada.fxml", "/cl/cromer/estructuras/fxml/listaEnlazada.fxml",
"/cl/cromer/estructuras/css/style.css", "/cl/cromer/estructuras/css/style.css",
listaEnlazadaTipos listaEnlazadaTipos
); );
} }
/** /**
* Click en Pila. * Click en Pila.
*/ */
@FXML @FXML
protected void menuPila() { protected void menuPila() {
loadStage( loadStage(
resourceBundle.getString("tituloPila"), resourceBundle.getString("tituloPila"),
"/cl/cromer/estructuras/fxml/pila.fxml", "/cl/cromer/estructuras/fxml/pila.fxml",
"/cl/cromer/estructuras/css/style.css" "/cl/cromer/estructuras/css/style.css"
); );
} }
/** /**
* Click en Cola. * Click en Cola.
*/ */
@FXML @FXML
protected void menuCola() { protected void menuCola() {
loadStage( loadStage(
resourceBundle.getString("tituloCola"), resourceBundle.getString("tituloCola"),
"/cl/cromer/estructuras/fxml/cola.fxml", "/cl/cromer/estructuras/fxml/cola.fxml",
"/cl/cromer/estructuras/css/style.css" "/cl/cromer/estructuras/css/style.css"
); );
} }
/** /**
* Click en Hash Table. * Click en Hash Table.
*/ */
@FXML @FXML
protected void menuHashTable() { protected void menuHashTable() {
loadStage( loadStage(
resourceBundle.getString("tituloTablaHash"), resourceBundle.getString("tituloTablaHash"),
"/cl/cromer/estructuras/fxml/hashTable.fxml", "/cl/cromer/estructuras/fxml/hashTable.fxml",
"/cl/cromer/estructuras/css/style.css" "/cl/cromer/estructuras/css/style.css"
); );
} }
/** /**
* Click en Ingles. * Click en Ingles.
*/ */
@FXML @FXML
protected void menuIngles() { protected void menuIngles() {
ButtonType botonCambiar = new ButtonType(resourceBundle.getString("cambiar"), ButtonBar.ButtonData.OK_DONE); ButtonType botonCambiar = new ButtonType(resourceBundle.getString("cambiar"), ButtonBar.ButtonData.OK_DONE);
ButtonType botonCancelar = new ButtonType(resourceBundle.getString("cancelar"), ButtonBar.ButtonData.CANCEL_CLOSE); ButtonType botonCancelar = new ButtonType(resourceBundle.getString("cancelar"), ButtonBar.ButtonData.CANCEL_CLOSE);
Dialog<ButtonType> dialog = new Dialog<>(); Dialog<ButtonType> dialog = new Dialog<>();
dialog.setTitle(resourceBundle.getString("cambiarIdioma")); dialog.setTitle(resourceBundle.getString("cambiarIdioma"));
dialog.setContentText(resourceBundle.getString("cambiarIdiomaMensaje")); dialog.setContentText(resourceBundle.getString("cambiarIdiomaMensaje"));
dialog.getDialogPane().getButtonTypes().add(botonCancelar); dialog.getDialogPane().getButtonTypes().add(botonCancelar);
dialog.getDialogPane().getButtonTypes().add(botonCambiar); dialog.getDialogPane().getButtonTypes().add(botonCambiar);
dialog.getDialogPane().getScene().getWindow().sizeToScene(); dialog.getDialogPane().getScene().getWindow().sizeToScene();
Main.setIcon(dialog, getClass()); Main.setIcon(dialog, getClass());
Optional<ButtonType> result = dialog.showAndWait(); Optional<ButtonType> result = dialog.showAndWait();
if (result.isPresent() && result.get() == botonCambiar) { if (result.isPresent() && result.get() == botonCambiar) {
// Si hace click en cambiar, cambiar el idioma y reiniciar. // Si hace click en cambiar, cambiar el idioma y reiniciar.
Locale locale = new Locale("en", "EN"); Locale locale = new Locale("en", "EN");
ResourceBundle resourceBundle = ResourceBundle.getBundle("cl.cromer.estructuras.bundles.Idioma", locale); ResourceBundle resourceBundle = ResourceBundle.getBundle("cl.cromer.estructuras.bundles.Idioma", locale);
loadStage( loadStage(
"/cl/cromer/estructuras/fxml/main.fxml", "/cl/cromer/estructuras/fxml/main.fxml",
"/cl/cromer/estructuras/css/style.css", "/cl/cromer/estructuras/css/style.css",
resourceBundle resourceBundle
); );
} }
} }
/** /**
* Cargar el fxml y css. * Cargar el fxml y css.
* *
* @param fxml String: El archivo de fxml. * @param fxml String: El archivo de fxml.
* @param css String: El archivo de css. * @param css String: El archivo de css.
* @param resourceBundle ResourceBundle: El idioma nuevo para cambiarlo. * @param resourceBundle ResourceBundle: El idioma nuevo para cambiarlo.
*/ */
private void loadStage(String fxml, String css, ResourceBundle resourceBundle) { private void loadStage(String fxml, String css, ResourceBundle resourceBundle) {
Scene scene = menuBar.getScene(); Scene scene = menuBar.getScene();
Stage stage = (Stage) scene.getWindow(); Stage stage = (Stage) scene.getWindow();
try { try {
Parent parent = FXMLLoader.load(getClass().getResource(fxml), resourceBundle); Parent parent = FXMLLoader.load(getClass().getResource(fxml), resourceBundle);
scene.setRoot(parent); scene.setRoot(parent);
} }
catch (IOException exception) { catch (IOException exception) {
// Este error es fatal, hay que cerrar la aplicación. // Este error es fatal, hay que cerrar la aplicación.
Logs.log(Level.SEVERE, "No se pudo abrir el archivo de fxml."); Logs.log(Level.SEVERE, "No se pudo abrir el archivo de fxml.");
stage.close(); stage.close();
} }
scene.getStylesheets().add(css); scene.getStylesheets().add(css);
stage.setScene(scene); stage.setScene(scene);
stage.setTitle(resourceBundle.getString("titulo")); stage.setTitle(resourceBundle.getString("titulo"));
} }
/** /**
* Click en Español. * Click en Español.
*/ */
@FXML @FXML
protected void menuEspanol() { protected void menuEspanol() {
ButtonType botonCambiar = new ButtonType(resourceBundle.getString("cambiar"), ButtonBar.ButtonData.OK_DONE); ButtonType botonCambiar = new ButtonType(resourceBundle.getString("cambiar"), ButtonBar.ButtonData.OK_DONE);
ButtonType botonCancelar = new ButtonType(resourceBundle.getString("cancelar"), ButtonBar.ButtonData.CANCEL_CLOSE); ButtonType botonCancelar = new ButtonType(resourceBundle.getString("cancelar"), ButtonBar.ButtonData.CANCEL_CLOSE);
Dialog<ButtonType> dialog = new Dialog<>(); Dialog<ButtonType> dialog = new Dialog<>();
dialog.setTitle(resourceBundle.getString("cambiarIdioma")); dialog.setTitle(resourceBundle.getString("cambiarIdioma"));
dialog.setContentText(resourceBundle.getString("cambiarIdiomaMensaje")); dialog.setContentText(resourceBundle.getString("cambiarIdiomaMensaje"));
dialog.getDialogPane().getButtonTypes().add(botonCancelar); dialog.getDialogPane().getButtonTypes().add(botonCancelar);
dialog.getDialogPane().getButtonTypes().add(botonCambiar); dialog.getDialogPane().getButtonTypes().add(botonCambiar);
dialog.getDialogPane().getScene().getWindow().sizeToScene(); dialog.getDialogPane().getScene().getWindow().sizeToScene();
Main.setIcon(dialog, getClass()); Main.setIcon(dialog, getClass());
Optional<ButtonType> result = dialog.showAndWait(); Optional<ButtonType> result = dialog.showAndWait();
if (result.isPresent() && result.get() == botonCambiar) { if (result.isPresent() && result.get() == botonCambiar) {
// Si hace click en cambiar, cambiar el idioma y reiniciar. // Si hace click en cambiar, cambiar el idioma y reiniciar.
Locale locale = new Locale("es", "ES"); Locale locale = new Locale("es", "ES");
ResourceBundle resourceBundle = ResourceBundle.getBundle("cl.cromer.estructuras.bundles.Idioma", locale); ResourceBundle resourceBundle = ResourceBundle.getBundle("cl.cromer.estructuras.bundles.Idioma", locale);
loadStage( loadStage(
"/cl/cromer/estructuras/fxml/main.fxml", "/cl/cromer/estructuras/fxml/main.fxml",
"/cl/cromer/estructuras/css/style.css", "/cl/cromer/estructuras/css/style.css",
resourceBundle resourceBundle
); );
} }
} }
/** /**
* Click en Acerca. * Click en Acerca.
*/ */
@FXML @FXML
protected void menuAcerca() { protected void menuAcerca() {
ButtonType botonCerrar = new ButtonType(resourceBundle.getString("cerrar"), ButtonBar.ButtonData.OK_DONE); ButtonType botonCerrar = new ButtonType(resourceBundle.getString("cerrar"), ButtonBar.ButtonData.OK_DONE);
Dialog<String> dialog = new Dialog<>(); Dialog<String> dialog = new Dialog<>();
dialog.setTitle(resourceBundle.getString("acerca")); dialog.setTitle(resourceBundle.getString("acerca"));
dialog.setContentText(resourceBundle.getString("credito")); dialog.setContentText(resourceBundle.getString("credito"));
dialog.getDialogPane().getButtonTypes().add(botonCerrar); dialog.getDialogPane().getButtonTypes().add(botonCerrar);
dialog.getDialogPane().getScene().getWindow().sizeToScene(); dialog.getDialogPane().getScene().getWindow().sizeToScene();
Main.setIcon(dialog, getClass()); Main.setIcon(dialog, getClass());
dialog.show(); dialog.show();
} }
} }

View File

@ -46,7 +46,7 @@ public class MergeController implements Initializable {
/** /**
* Inicializar todos los datos y dibujar las graficas. * Inicializar todos los datos y dibujar las graficas.
* *
* @param location URL: El URL de fxml en uso. * @param location URL: El URL de fxml en uso.
* @param resourceBundle ResourceBundle: Tiene datos de idioma. * @param resourceBundle ResourceBundle: Tiene datos de idioma.
*/ */
@Override @Override
@ -112,7 +112,7 @@ public class MergeController implements Initializable {
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/merge/ordenar")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/merge/ordenar")).useDelimiter("\\Z").next();
codigoMerge.setText(codigoTexto); codigoMerge.setText(codigoTexto);
if (!array.merge(true)) { if (! array.merge(true)) {
Main.mostrarError(resourceBundle.getString("mergeYaOrdenado"), resourceBundle); Main.mostrarError(resourceBundle.getString("mergeYaOrdenado"), resourceBundle);
} }
@ -132,10 +132,10 @@ public class MergeController implements Initializable {
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/merge/ordenar")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/merge/ordenar")).useDelimiter("\\Z").next();
codigoMerge.setText(codigoTexto); codigoMerge.setText(codigoTexto);
if (!array.merge(false)) { if (! array.merge(false)) {
Main.mostrarError(resourceBundle.getString("mergeYaOrdenado"), resourceBundle); Main.mostrarError(resourceBundle.getString("mergeYaOrdenado"), resourceBundle);
} }
generarGrafico(); generarGrafico();
} }
} }

View File

@ -5,61 +5,61 @@ import java.util.List;
import java.util.Random; import java.util.Random;
public class Palabras { public class Palabras {
final private List<String> palabras; final private List<String> palabras;
public Palabras() { public Palabras() {
palabras = new ArrayList<>(); palabras = new ArrayList<>();
palabras.add("hola"); palabras.add("hola");
palabras.add("mundo"); palabras.add("mundo");
palabras.add("cruel"); palabras.add("cruel");
palabras.add("mi"); palabras.add("mi");
palabras.add("tiempo"); palabras.add("tiempo");
palabras.add("es"); palabras.add("es");
palabras.add("limitado"); palabras.add("limitado");
palabras.add("pero"); palabras.add("pero");
palabras.add("puedo"); palabras.add("puedo");
palabras.add("lograr"); palabras.add("lograr");
palabras.add("el"); palabras.add("el");
palabras.add("proyecto"); palabras.add("proyecto");
palabras.add("si"); palabras.add("si");
palabras.add("trabajo"); palabras.add("trabajo");
palabras.add("bien"); palabras.add("bien");
palabras.add("computador"); palabras.add("computador");
palabras.add("test"); palabras.add("test");
palabras.add("mouse"); palabras.add("mouse");
palabras.add("clase"); palabras.add("clase");
palabras.add("software"); palabras.add("software");
palabras.add("hardware"); palabras.add("hardware");
palabras.add("vaso"); palabras.add("vaso");
palabras.add("mesa"); palabras.add("mesa");
palabras.add("tabla"); palabras.add("tabla");
palabras.add("color"); palabras.add("color");
palabras.add("calor"); palabras.add("calor");
palabras.add("edad"); palabras.add("edad");
palabras.add("olor"); palabras.add("olor");
palabras.add("ganar"); palabras.add("ganar");
palabras.add("dormir"); palabras.add("dormir");
palabras.add("tomar"); palabras.add("tomar");
palabras.add("comer"); palabras.add("comer");
palabras.add("pensar"); palabras.add("pensar");
palabras.add("programar"); palabras.add("programar");
palabras.add("hablar"); palabras.add("hablar");
palabras.add("sentir"); palabras.add("sentir");
palabras.add("perder"); palabras.add("perder");
palabras.add("abrir"); palabras.add("abrir");
palabras.add("cerrar"); palabras.add("cerrar");
palabras.add("mirar"); palabras.add("mirar");
palabras.add("agua"); palabras.add("agua");
palabras.add("me"); palabras.add("me");
palabras.add("llaman"); palabras.add("llaman");
palabras.add("gringo"); palabras.add("gringo");
palabras.add("loco"); palabras.add("loco");
palabras.add("no"); palabras.add("no");
} }
public String getPalabra() { public String getPalabra() {
Random random = new Random(); Random random = new Random();
int numero = random.nextInt(palabras.size()); int numero = random.nextInt(palabras.size());
return palabras.get(numero); return palabras.get(numero);
} }
} }

View File

@ -8,117 +8,118 @@ import java.util.Random;
* @author Chris Cromer * @author Chris Cromer
*/ */
final public class Pila { final public class Pila {
/** /**
* La pila. * La pila.
*/ */
private String pila[]; private String pila[];
/** /**
* La cantidad de elementos en la pila. * La cantidad de elementos en la pila.
*/ */
private int size; private int size;
/** /**
* Inicializar. * Inicializar.
*/ */
public Pila() { public Pila() {
pila = null; pila = null;
size = 0; size = 0;
} }
/** /**
* Pop un valor de encima de la pila. * Pop un valor de encima de la pila.
* *
* @return boolean: Verdad si fue exitoso. * @return boolean: Verdad si fue exitoso.
*/ */
public boolean pop() { public boolean pop() {
if (this.pila != null && size() > 0) { if (this.pila != null && size() > 0) {
String pila[] = new String[this.pila.length - 1]; String pila[] = new String[this.pila.length - 1];
System.arraycopy(this.pila, 0, pila, 0, pila.length); System.arraycopy(this.pila, 0, pila, 0, pila.length);
this.pila = pila; this.pila = pila;
size--; size--;
return true; return true;
} }
else { else {
return false; return false;
} }
} }
/** /**
* Devolver la cantidad de elementos en la pila. * Devolver la cantidad de elementos en la pila.
* *
* @return int: La cantidad de elementos. * @return int: La cantidad de elementos.
*/ */
public int size() { public int size() {
return size; return size;
} }
/** /**
* Peek al valor que está encima de la pila. * Peek al valor que está encima de la pila.
* *
* @return int: El valor que está encima de la pila. * @return int: El valor que está encima de la pila.
*/ */
public int peek() { public int peek() {
if (pila != null && size() > 0) { if (pila != null && size() > 0) {
return Integer.valueOf(pila[pila.length - 1]); return Integer.valueOf(pila[pila.length - 1]);
} }
else { else {
return Integer.MIN_VALUE; return Integer.MIN_VALUE;
} }
} }
/** /**
* Devolver el valor que está en un indice de la pila. * Devolver el valor que está en un indice de la pila.
* *
* @param indice int: El indice que desea devolver. * @param indice int: El indice que desea devolver.
* @return String: El valor que está guardado en el indice. *
*/ * @return String: El valor que está guardado en el indice.
public String getIndice(int indice) { */
if (pila != null && indice >= 0 && indice < pila.length) { public String getIndice(int indice) {
return pila[indice]; if (pila != null && indice >= 0 && indice < pila.length) {
} return pila[indice];
else { }
return null; else {
} return null;
} }
}
/** /**
* Llenar la pila con valores al azar. * Llenar la pila con valores al azar.
*/ */
@SuppressWarnings("Duplicates") @SuppressWarnings("Duplicates")
public void llenar() { public void llenar() {
Random random = new Random(); Random random = new Random();
int maximo = 99; int maximo = 99;
int minimo = 0; int minimo = 0;
int rango = maximo - minimo + 1; int rango = maximo - minimo + 1;
for (int i = size(); i < 10; i++) { for (int i = size(); i < 10; i++) {
int numero = random.nextInt(rango) + minimo; int numero = random.nextInt(rango) + minimo;
push(numero); push(numero);
} }
} }
/** /**
* Push un valor en la pila encima. * Push un valor en la pila encima.
* *
* @param valor int: El valor a push. * @param valor int: El valor a push.
*/ */
public void push(int valor) { public void push(int valor) {
if (this.pila != null) { if (this.pila != null) {
String pila[] = new String[this.pila.length + 1]; String pila[] = new String[this.pila.length + 1];
int i; int i;
for (i = 0; i < this.pila.length; i++) { for (i = 0; i < this.pila.length; i++) {
pila[i] = this.pila[i]; pila[i] = this.pila[i];
} }
pila[i] = String.valueOf(valor); pila[i] = String.valueOf(valor);
this.pila = pila; this.pila = pila;
size++; size++;
} }
else { else {
String pila[] = new String[1]; String pila[] = new String[1];
pila[0] = String.valueOf(valor); pila[0] = String.valueOf(valor);
this.pila = pila; this.pila = pila;
size++; size++;
} }
} }
} }

View File

@ -17,190 +17,190 @@ import java.util.logging.Level;
* @author Chris Cromer * @author Chris Cromer
*/ */
public class PilaController implements Initializable { public class PilaController implements Initializable {
/** /**
* La caja para ingresar textos. * La caja para ingresar textos.
*/ */
@FXML @FXML
private TextFieldLimited valorPila; private TextFieldLimited valorPila;
/** /**
* Donde poner el contenido de array. * Donde poner el contenido de array.
*/ */
@FXML @FXML
private VBox contenidoPila; private VBox contenidoPila;
/** /**
* Donde va el codigo a mostrar a la pantalla. * Donde va el codigo a mostrar a la pantalla.
*/ */
@FXML @FXML
private Text codigoPila; private Text codigoPila;
/** /**
* La escena donde está cosas graficas. * La escena donde está cosas graficas.
*/ */
private Scene scene; private Scene scene;
/** /**
* Donde está guardado los idiomas. * Donde está guardado los idiomas.
*/ */
private ResourceBundle resourceBundle; private ResourceBundle resourceBundle;
/** /**
* La pila usado en la aplicación. * La pila usado en la aplicación.
*/ */
private Pila pila; private Pila pila;
/** /**
* Grafico rectangulos. * Grafico rectangulos.
*/ */
private Grafico grafico; private Grafico grafico;
/** /**
* Inicializar todos los datos y dibujar las graficas. * Inicializar todos los datos y dibujar las graficas.
* *
* @param location URL: El URL de fxml en uso. * @param location URL: El URL de fxml en uso.
* @param resourceBundle ResourceBundle: Tiene datos de idioma. * @param resourceBundle ResourceBundle: Tiene datos de idioma.
*/ */
@Override @Override
public void initialize(URL location, ResourceBundle resourceBundle) { public void initialize(URL location, ResourceBundle resourceBundle) {
this.resourceBundle = resourceBundle; this.resourceBundle = resourceBundle;
pila = new Pila(); pila = new Pila();
scene = null; scene = null;
Colores colores = new Colores(); Colores colores = new Colores();
for (int i = 9; i >= 0; i--) { for (int i = 9; i >= 0; i--) {
contenidoPila.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i))); contenidoPila.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i)));
colores.siguinteColor(); colores.siguinteColor();
} }
} }
/** /**
* Llenar la pila con numeros al azar. * Llenar la pila con numeros al azar.
*/ */
@FXML @FXML
protected void botonLlenar() { protected void botonLlenar() {
if (scene == null) { if (scene == null) {
scene = contenidoPila.getScene(); scene = contenidoPila.getScene();
grafico = new Grafico(scene); grafico = new Grafico(scene);
} }
pila.llenar(); pila.llenar();
generarGrafico(); generarGrafico();
} }
/** /**
* Poner los valores en el grafico. * Poner los valores en el grafico.
*/ */
private void generarGrafico() { private void generarGrafico() {
grafico.removerDestacar(); grafico.removerDestacar();
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
Text text = (Text) scene.lookup("#texto_" + String.valueOf(i)); Text text = (Text) scene.lookup("#texto_" + String.valueOf(i));
text.setText(pila.getIndice(i)); text.setText(pila.getIndice(i));
} }
} }
/** /**
* Vaciar la pila de todos los valores. * Vaciar la pila de todos los valores.
*/ */
@FXML @FXML
protected void botonVaciar() { protected void botonVaciar() {
if (scene == null) { if (scene == null) {
scene = contenidoPila.getScene(); scene = contenidoPila.getScene();
grafico = new Grafico(scene); grafico = new Grafico(scene);
} }
pila = new Pila(); pila = new Pila();
generarGrafico(); generarGrafico();
} }
/** /**
* Push un valor a la pila y mostrar el codigo en la pantalla. * Push un valor a la pila y mostrar el codigo en la pantalla.
*/ */
@FXML @FXML
protected void botonPush() { protected void botonPush() {
if (scene == null) { if (scene == null) {
scene = contenidoPila.getScene(); scene = contenidoPila.getScene();
grafico = new Grafico(scene); grafico = new Grafico(scene);
} }
// Mostrar el codigo // Mostrar el codigo
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/pila/push")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/pila/push")).useDelimiter("\\Z").next();
codigoPila.setText(codigoTexto); codigoPila.setText(codigoTexto);
if (valorPila.getText() != null && !valorPila.getText().trim().equals("")) { if (valorPila.getText() != null && ! valorPila.getText().trim().equals("")) {
try { try {
if (pila.size() < 10) { if (pila.size() < 10) {
pila.push(Integer.valueOf(valorPila.getText())); pila.push(Integer.valueOf(valorPila.getText()));
valorPila.setText(""); valorPila.setText("");
generarGrafico(); generarGrafico();
} }
else { else {
Main.mostrarError(resourceBundle.getString("pilaLlena"), resourceBundle); Main.mostrarError(resourceBundle.getString("pilaLlena"), resourceBundle);
} }
} }
catch (NumberFormatException exception) { catch (NumberFormatException exception) {
// El error no es fatal, sigue // El error no es fatal, sigue
Logs.log(Level.WARNING, "No es tipo int."); Logs.log(Level.WARNING, "No es tipo int.");
Main.mostrarError(resourceBundle.getString("pilaNoValor"), resourceBundle); Main.mostrarError(resourceBundle.getString("pilaNoValor"), resourceBundle);
} }
} }
else { else {
Main.mostrarError(resourceBundle.getString("pilaNoValor"), resourceBundle); Main.mostrarError(resourceBundle.getString("pilaNoValor"), resourceBundle);
} }
} }
/** /**
* Pop un valor de la pila si existe y mostrar el codigo en la pantalla. * Pop un valor de la pila si existe y mostrar el codigo en la pantalla.
*/ */
@FXML @FXML
protected void botonPop() { protected void botonPop() {
if (scene == null) { if (scene == null) {
scene = contenidoPila.getScene(); scene = contenidoPila.getScene();
grafico = new Grafico(scene); grafico = new Grafico(scene);
} }
// Mostrar el codigo // Mostrar el codigo
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/pila/pop")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/pila/pop")).useDelimiter("\\Z").next();
codigoPila.setText(codigoTexto); codigoPila.setText(codigoTexto);
if (pila.size() > 0) { if (pila.size() > 0) {
if (!pila.pop()) { if (! pila.pop()) {
Main.mostrarError(resourceBundle.getString("pilaVacia"), resourceBundle); Main.mostrarError(resourceBundle.getString("pilaVacia"), resourceBundle);
} }
else { else {
generarGrafico(); generarGrafico();
} }
} }
else { else {
Main.mostrarError(resourceBundle.getString("pilaVacia"), resourceBundle); Main.mostrarError(resourceBundle.getString("pilaVacia"), resourceBundle);
} }
} }
/** /**
* Peek a ver si existe un elemento en la pila y mostrar el codigo en la pantalla * Peek a ver si existe un elemento en la pila y mostrar el codigo en la pantalla
* Si existe un valor destacarlo. * Si existe un valor destacarlo.
*/ */
@FXML @FXML
protected void botonPeek() { protected void botonPeek() {
if (scene == null) { if (scene == null) {
scene = contenidoPila.getScene(); scene = contenidoPila.getScene();
grafico = new Grafico(scene); grafico = new Grafico(scene);
} }
// Mostrar el codigo // Mostrar el codigo
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/pila/peek")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/pila/peek")).useDelimiter("\\Z").next();
codigoPila.setText(codigoTexto); codigoPila.setText(codigoTexto);
int encontrado = pila.peek(); int encontrado = pila.peek();
if (encontrado != Integer.MIN_VALUE) { if (encontrado != Integer.MIN_VALUE) {
generarGrafico(); generarGrafico();
grafico.destacar("#caja_" + (pila.size() - 1), Grafico.RECTANGULO); grafico.destacar("#caja_" + (pila.size() - 1), Grafico.RECTANGULO);
grafico.destacar("#texto_" + (pila.size() - 1), Grafico.TEXTO); grafico.destacar("#texto_" + (pila.size() - 1), Grafico.TEXTO);
} }
else { else {
Main.mostrarError(resourceBundle.getString("pilaVacia"), resourceBundle); Main.mostrarError(resourceBundle.getString("pilaVacia"), resourceBundle);
} }
} }
} }

View File

@ -46,7 +46,7 @@ public class QuickController implements Initializable {
/** /**
* Inicializar todos los datos y dibujar las graficas. * Inicializar todos los datos y dibujar las graficas.
* *
* @param location URL: El URL de fxml en uso. * @param location URL: El URL de fxml en uso.
* @param resourceBundle ResourceBundle: Tiene datos de idioma. * @param resourceBundle ResourceBundle: Tiene datos de idioma.
*/ */
@Override @Override
@ -112,7 +112,7 @@ public class QuickController implements Initializable {
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/quick/ordenar")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/quick/ordenar")).useDelimiter("\\Z").next();
codigoQuick.setText(codigoTexto); codigoQuick.setText(codigoTexto);
if (!array.quick(true)) { if (! array.quick(true)) {
Main.mostrarError(resourceBundle.getString("quickYaOrdenado"), resourceBundle); Main.mostrarError(resourceBundle.getString("quickYaOrdenado"), resourceBundle);
} }
@ -132,10 +132,10 @@ public class QuickController implements Initializable {
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/quick/ordenar")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/quick/ordenar")).useDelimiter("\\Z").next();
codigoQuick.setText(codigoTexto); codigoQuick.setText(codigoTexto);
if (!array.quick(false)) { if (! array.quick(false)) {
Main.mostrarError(resourceBundle.getString("quickYaOrdenado"), resourceBundle); Main.mostrarError(resourceBundle.getString("quickYaOrdenado"), resourceBundle);
} }
generarGrafico(); generarGrafico();
} }
} }

View File

@ -16,78 +16,78 @@ import java.util.Scanner;
* @author Chris Cromer * @author Chris Cromer
*/ */
public class SeleccionController implements Initializable { public class SeleccionController implements Initializable {
/** /**
* Donde poner el contenido de array. * Donde poner el contenido de array.
*/ */
@FXML @FXML
private HBox contenidoSeleccion; private HBox contenidoSeleccion;
/** /**
* Donde va el codigo a mostrar a la pantalla. * Donde va el codigo a mostrar a la pantalla.
*/ */
@FXML @FXML
private Text codigoSeleccion; private Text codigoSeleccion;
/** /**
* La escena donde está cosas graficas. * La escena donde está cosas graficas.
*/ */
private Scene scene; private Scene scene;
/** /**
* Donde está guardado los idiomas. * Donde está guardado los idiomas.
*/ */
private ResourceBundle resourceBundle; private ResourceBundle resourceBundle;
/** /**
* El array usado en la aplicación. * El array usado en la aplicación.
*/ */
private Array array; private Array array;
/** /**
* Inicializar todos los datos y dibujar las graficas. * Inicializar todos los datos y dibujar las graficas.
* *
* @param location URL: El URL de fxml en uso. * @param location URL: El URL de fxml en uso.
* @param resourceBundle ResourceBundle: Tiene datos de idioma. * @param resourceBundle ResourceBundle: Tiene datos de idioma.
*/ */
@Override @Override
@SuppressWarnings("Duplicates") @SuppressWarnings("Duplicates")
public void initialize(URL location, ResourceBundle resourceBundle) { public void initialize(URL location, ResourceBundle resourceBundle) {
this.resourceBundle = resourceBundle; this.resourceBundle = resourceBundle;
scene = null; scene = null;
Colores colores = new Colores(); Colores colores = new Colores();
array = new Array(10); array = new Array(10);
array.setOrdered(true); array.setOrdered(true);
array.llenar(); array.llenar();
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
contenidoSeleccion.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i), String.valueOf(array.getIndice(i)))); contenidoSeleccion.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i), String.valueOf(array.getIndice(i))));
colores.siguinteColor(); colores.siguinteColor();
} }
} }
/** /**
* Crear un array nuevo. * Crear un array nuevo.
*/ */
@FXML @FXML
protected void botonNuevo() { protected void botonNuevo() {
if (scene == null) { if (scene == null) {
initializeScene(); initializeScene();
} }
array.nuevo(); array.nuevo();
array.llenar(); array.llenar();
generarGrafico(); generarGrafico();
} }
/** /**
* Crear el array de tamaño 10. * Crear el array de tamaño 10.
*/ */
private void initializeScene() { private void initializeScene() {
scene = contenidoSeleccion.getScene(); scene = contenidoSeleccion.getScene();
} }
/** /**
* Poner los valores en el grafico. * Poner los valores en el grafico.
@ -100,42 +100,42 @@ public class SeleccionController implements Initializable {
} }
/** /**
* Ordenarlo paso por paso. * Ordenarlo paso por paso.
*/ */
@FXML @FXML
protected void botonPaso() { protected void botonPaso() {
if (scene == null) { if (scene == null) {
initializeScene(); initializeScene();
} }
// Mostrar el codigo // Mostrar el codigo
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/seleccion/ordenar")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/seleccion/ordenar")).useDelimiter("\\Z").next();
codigoSeleccion.setText(codigoTexto); codigoSeleccion.setText(codigoTexto);
if (!array.seleccion(true)) { if (! array.seleccion(true)) {
Main.mostrarError(resourceBundle.getString("seleccionYaOrdenado"), resourceBundle); Main.mostrarError(resourceBundle.getString("seleccionYaOrdenado"), resourceBundle);
} }
generarGrafico(); generarGrafico();
} }
/** /**
* Ordenarlo completamente. * Ordenarlo completamente.
*/ */
@FXML @FXML
protected void botonCorrer() { protected void botonCorrer() {
if (scene == null) { if (scene == null) {
initializeScene(); initializeScene();
} }
// Mostrar el codigo // Mostrar el codigo
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/seleccion/ordenar")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/seleccion/ordenar")).useDelimiter("\\Z").next();
codigoSeleccion.setText(codigoTexto); codigoSeleccion.setText(codigoTexto);
if (!array.seleccion(false)) { if (! array.seleccion(false)) {
Main.mostrarError(resourceBundle.getString("seleccionYaOrdenado"), resourceBundle); Main.mostrarError(resourceBundle.getString("seleccionYaOrdenado"), resourceBundle);
} }
generarGrafico(); generarGrafico();
} }
} }

View File

@ -16,78 +16,78 @@ import java.util.Scanner;
* @author Chris Cromer * @author Chris Cromer
*/ */
public class ShellController implements Initializable { public class ShellController implements Initializable {
/** /**
* Donde poner el contenido de array. * Donde poner el contenido de array.
*/ */
@FXML @FXML
private HBox contenidoShell; private HBox contenidoShell;
/** /**
* Donde va el codigo a mostrar a la pantalla. * Donde va el codigo a mostrar a la pantalla.
*/ */
@FXML @FXML
private Text codigoShell; private Text codigoShell;
/** /**
* La escena donde está cosas graficas. * La escena donde está cosas graficas.
*/ */
private Scene scene; private Scene scene;
/** /**
* Donde está guardado los idiomas. * Donde está guardado los idiomas.
*/ */
private ResourceBundle resourceBundle; private ResourceBundle resourceBundle;
/** /**
* El array usado en la aplicación. * El array usado en la aplicación.
*/ */
private Array array; private Array array;
/** /**
* Inicializar todos los datos y dibujar las graficas. * Inicializar todos los datos y dibujar las graficas.
* *
* @param location URL: El URL de fxml en uso. * @param location URL: El URL de fxml en uso.
* @param resourceBundle ResourceBundle: Tiene datos de idioma. * @param resourceBundle ResourceBundle: Tiene datos de idioma.
*/ */
@Override @Override
@SuppressWarnings("Duplicates") @SuppressWarnings("Duplicates")
public void initialize(URL location, ResourceBundle resourceBundle) { public void initialize(URL location, ResourceBundle resourceBundle) {
this.resourceBundle = resourceBundle; this.resourceBundle = resourceBundle;
scene = null; scene = null;
Colores colores = new Colores(); Colores colores = new Colores();
array = new Array(10); array = new Array(10);
array.setOrdered(true); array.setOrdered(true);
array.llenar(); array.llenar();
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
contenidoShell.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i), String.valueOf(array.getIndice(i)))); contenidoShell.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i), String.valueOf(array.getIndice(i))));
colores.siguinteColor(); colores.siguinteColor();
} }
} }
/** /**
* Crear un array nuevo. * Crear un array nuevo.
*/ */
@FXML @FXML
protected void botonNuevo() { protected void botonNuevo() {
if (scene == null) { if (scene == null) {
initializeScene(); initializeScene();
} }
array.nuevo(); array.nuevo();
array.llenar(); array.llenar();
generarGrafico(); generarGrafico();
} }
/** /**
* Crear el array de tamaño 10. * Crear el array de tamaño 10.
*/ */
private void initializeScene() { private void initializeScene() {
scene = contenidoShell.getScene(); scene = contenidoShell.getScene();
} }
/** /**
* Poner los valores en el grafico. * Poner los valores en el grafico.
@ -100,42 +100,42 @@ public class ShellController implements Initializable {
} }
/** /**
* Ordenarlo paso por paso. * Ordenarlo paso por paso.
*/ */
@FXML @FXML
protected void botonPaso() { protected void botonPaso() {
if (scene == null) { if (scene == null) {
initializeScene(); initializeScene();
} }
// Mostrar el codigo // Mostrar el codigo
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/shell/ordenar")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/shell/ordenar")).useDelimiter("\\Z").next();
codigoShell.setText(codigoTexto); codigoShell.setText(codigoTexto);
if (!array.shell(true)) { if (! array.shell(true)) {
Main.mostrarError(resourceBundle.getString("shellYaOrdenado"), resourceBundle); Main.mostrarError(resourceBundle.getString("shellYaOrdenado"), resourceBundle);
} }
generarGrafico(); generarGrafico();
} }
/** /**
* Ordenarlo completamente. * Ordenarlo completamente.
*/ */
@FXML @FXML
protected void botonCorrer() { protected void botonCorrer() {
if (scene == null) { if (scene == null) {
initializeScene(); initializeScene();
} }
// Mostrar el codigo // Mostrar el codigo
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/shell/ordenar")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/shell/ordenar")).useDelimiter("\\Z").next();
codigoShell.setText(codigoTexto); codigoShell.setText(codigoTexto);
if (!array.shell(false)) { if (! array.shell(false)) {
Main.mostrarError(resourceBundle.getString("shellYaOrdenado"), resourceBundle); Main.mostrarError(resourceBundle.getString("shellYaOrdenado"), resourceBundle);
} }
generarGrafico(); generarGrafico();
} }
} }

View File

@ -19,147 +19,147 @@ import java.util.List;
* @author Chris Cromer * @author Chris Cromer
*/ */
public class TextFieldLimited extends TextField { public class TextFieldLimited extends TextField {
/** /**
* La cantidad maxima de caracters permitidas en el TextFieldLimited * La cantidad maxima de caracters permitidas en el TextFieldLimited
*/ */
private IntegerProperty maxLength; private IntegerProperty maxLength;
/** /**
* Llamar a TextField. * Llamar a TextField.
*/ */
public TextFieldLimited() { public TextFieldLimited() {
super(); super();
} }
/** /**
* Lista de estilos aplicable. * Lista de estilos aplicable.
* *
* @return List: La lista de estilos. * @return List: La lista de estilos.
*/ */
@SuppressWarnings("unused") @SuppressWarnings("unused")
public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() { public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() {
return TextFieldLimited.StyleableProperties.STYLEABLES; return TextFieldLimited.StyleableProperties.STYLEABLES;
} }
/** /**
* Reemplazar el texto basado en cambios de teclado, no deja ingresar mas text si length es mayor al maximo. * Reemplazar el texto basado en cambios de teclado, no deja ingresar mas text si length es mayor al maximo.
* *
* @param start int: Donde empece el cambio. * @param start int: Donde empece el cambio.
* @param end int: Donde termina. * @param end int: Donde termina.
* @param text String: Texto a cambiar. * @param text String: Texto a cambiar.
*/ */
@Override @Override
public void replaceText(int start, int end, String text) { public void replaceText(int start, int end, String text) {
if (getMaxLength() != 0) { if (getMaxLength() != 0) {
if (text.equals("")) { if (text.equals("")) {
super.replaceText(start, end, text); super.replaceText(start, end, text);
} }
else if (getText().length() < getMaxLength()) { else if (getText().length() < getMaxLength()) {
super.replaceText(start, end, text); super.replaceText(start, end, text);
} }
} }
else { else {
super.replaceText(start, end, text); super.replaceText(start, end, text);
} }
} }
/** /**
* Reemplazar un selección de texto. * Reemplazar un selección de texto.
* *
* @param text String: El texto a reemplazar. * @param text String: El texto a reemplazar.
*/ */
@Override @Override
public void replaceSelection(String text) { public void replaceSelection(String text) {
if (getMaxLength() != 0) { if (getMaxLength() != 0) {
if (text.equals("")) { if (text.equals("")) {
super.replaceSelection(text); super.replaceSelection(text);
} }
else if (getText().length() < getMaxLength()) { else if (getText().length() < getMaxLength()) {
if (text.length() > getMaxLength() - getText().length()) { if (text.length() > getMaxLength() - getText().length()) {
text = text.substring(0, getMaxLength() - getText().length()); text = text.substring(0, getMaxLength() - getText().length());
} }
super.replaceSelection(text); super.replaceSelection(text);
} }
} }
else { else {
super.replaceSelection(text); super.replaceSelection(text);
} }
} }
/** /**
* Devolver la cantidad maxima si está asignado. * Devolver la cantidad maxima si está asignado.
* *
* @return int: Cantidad de caracters. * @return int: Cantidad de caracters.
*/ */
public final int getMaxLength() { public final int getMaxLength() {
return maxLength == null ? 0 : maxLength.get(); return maxLength == null ? 0 : maxLength.get();
} }
/** /**
* Asignar un valor maximo de caracters permitidio en el TextFieldLimited. * Asignar un valor maximo de caracters permitidio en el TextFieldLimited.
* *
* @param value int: La cantidad maxima. * @param value int: La cantidad maxima.
*/ */
@SuppressWarnings("unused") @SuppressWarnings("unused")
public final void setMaxLength(int value) { public final void setMaxLength(int value) {
if (maxLength != null || value > 0) { if (maxLength != null || value > 0) {
maxLengthProperty().set(value); maxLengthProperty().set(value);
} }
} }
/** /**
* JavaFX FXML field property por tamaño maximo * JavaFX FXML field property por tamaño maximo
* *
* @return IntegerProperty: Property. * @return IntegerProperty: Property.
*/ */
public final IntegerProperty maxLengthProperty() { public final IntegerProperty maxLengthProperty() {
if (maxLength == null) { if (maxLength == null) {
maxLength = new StyleableIntegerProperty() { maxLength = new StyleableIntegerProperty() {
@Override @Override
public CssMetaData<TextFieldLimited, Number> getCssMetaData() { public CssMetaData<TextFieldLimited, Number> getCssMetaData() {
return TextFieldLimited.StyleableProperties.MAX_LENGTH; return TextFieldLimited.StyleableProperties.MAX_LENGTH;
} }
@Override @Override
public Object getBean() { public Object getBean() {
return TextFieldLimited.this; return TextFieldLimited.this;
} }
@Override @Override
public String getName() { public String getName() {
return "maxLength"; return "maxLength";
} }
}; };
} }
return maxLength; return maxLength;
} }
/** /**
* CSS por FXML con un maximo tamaño * CSS por FXML con un maximo tamaño
*/ */
private static class StyleableProperties { private static class StyleableProperties {
private static final CssMetaData<TextFieldLimited, Number> MAX_LENGTH = private static final CssMetaData<TextFieldLimited, Number> MAX_LENGTH =
new CssMetaData<TextFieldLimited, Number>("-fx-max-length", SizeConverter.getInstance(), 0) { new CssMetaData<TextFieldLimited, Number>("-fx-max-length", SizeConverter.getInstance(), 0) {
@Override @Override
public boolean isSettable(TextFieldLimited node) { public boolean isSettable(TextFieldLimited node) {
return node.maxLength == null || !node.maxLength.isBound(); return node.maxLength == null || ! node.maxLength.isBound();
} }
@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public StyleableProperty<Number> getStyleableProperty(TextFieldLimited node) { public StyleableProperty<Number> getStyleableProperty(TextFieldLimited node) {
return (StyleableProperty<Number>) node.maxLengthProperty(); return (StyleableProperty<Number>) node.maxLengthProperty();
} }
}; };
private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES; private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
static { static {
final List<CssMetaData<? extends Styleable, ?>> styleables = new ArrayList<>(Shape.getClassCssMetaData()); final List<CssMetaData<? extends Styleable, ?>> styleables = new ArrayList<>(Shape.getClassCssMetaData());
styleables.add(MAX_LENGTH); styleables.add(MAX_LENGTH);
STYLEABLES = Collections.unmodifiableList(styleables); STYLEABLES = Collections.unmodifiableList(styleables);
} }
} }
} }

View File

@ -1,10 +1,10 @@
public int buscar(int valor) { public int buscar(int valor) {
for (int i = 0; i < array.length; i++) { for (int i = 0; i < array.length; i++) {
if (array[i] != 0 && array[i] == valor) { if (array[i] != 0 && array[i] == valor) {
// Se encontró // Se encontró
return i; return i;
} }
} }
// No se encontró // No se encontró
return -1; return -1;
} }

View File

@ -1,18 +1,18 @@
public boolean eliminar(int valor) { public boolean eliminar(int valor) {
boolean borrado = false; boolean borrado = false;
for (int i = 0; i < array.length; i++) { for (int i = 0; i < array.length; i++) {
if (array[i] != 0 && array[i] == valor) { if (array[i] != 0 && array[i] == valor) {
// Eliminar el valor // Eliminar el valor
array[i] = 0; array[i] = 0;
borrado=true; borrado=true;
for (int j = i; j < array.length; j++) { for (int j = i; j < array.length; j++) {
if (j != array.length - 1) { if (j != array.length - 1) {
// Correr la array hacia arriba // Correr la array hacia arriba
array[j] = array[j + 1]; array[j] = array[j + 1];
} }
} }
array[array.length-1] = 0; array[array.length-1] = 0;
} }
} }
return borrado; return borrado;
} }

View File

@ -1,13 +1,13 @@
public boolean insertar(int valor) { public boolean insertar(int valor) {
for (int i = 0; i < array.length; i++) { for (int i = 0; i < array.length; i++) {
if (array[i] == 0) { if (array[i] == 0) {
array[i] = valor; array[i] = valor;
return true; return true;
} }
else if (array[i] == valor) { else if (array[i] == valor) {
// Ya existe el valor en el array // Ya existe el valor en el array
return false; return false;
} }
} }
return false; return false;
} }

View File

@ -1,10 +1,10 @@
public int buscar(int valor) { public int buscar(int valor) {
for (int i = 0; i < array.length; i++) { for (int i = 0; i < array.length; i++) {
if (array[i] != 0 && array[i] == valor) { if (array[i] != 0 && array[i] == valor) {
// Se encontró // Se encontró
return i; return i;
} }
} }
// No se encontró // No se encontró
return -1; return -1;
} }

View File

@ -1,12 +1,12 @@
public boolean eliminar(int valor) { public boolean eliminar(int valor) {
boolean borrado = false; boolean borrado = false;
for (int i = 0; i < array.length; i++) { for (int i = 0; i < array.length; i++) {
if (array[i] != 0 && array[i] == valor) { if (array[i] != 0 && array[i] == valor) {
// Eliminar el valor // Eliminar el valor
array[i] = 0; array[i] = 0;
borrado=true; borrado=true;
break; break;
} }
} }
return borrado; return borrado;
} }

View File

@ -1,13 +1,13 @@
public boolean insertar(int valor) { public boolean insertar(int valor) {
for (int i = 0; i < array.length; i++) { for (int i = 0; i < array.length; i++) {
if (array[i] == 0) { if (array[i] == 0) {
array[i] = valor; array[i] = valor;
return true; return true;
} }
else if (array[i] == valor) { else if (array[i] == valor) {
// Ya existe el valor en el array // Ya existe el valor en el array
return false; return false;
} }
} }
return false; return false;
} }

View File

@ -1,13 +1,13 @@
public void burbuja() { public void burbuja() {
for (int i = elementos - 1; i > 1; i--) { for (int i = elementos - 1; i > 1; i--) {
for(j = 0; in < i; j++) { for(j = 0; in < i; j++) {
// Si están fuera del orden // Si están fuera del orden
if (array[j] > array[j+1]) { if (array[j] > array[j+1]) {
// Intercambiar valores // Intercambiar valores
int temp = array[j]; int temp = array[j];
array[j] = array[j+1]; array[j] = array[j+1];
array[j+1] = temp; array[j+1] = temp;
} }
} }
} }
} }

View File

@ -1,4 +1,4 @@
public int peek() { public int peek() {
// Devolver el valor en el primer indice // Devolver el valor en el primer indice
return this.pila[primer]; return this.pila[primer];
} }

View File

@ -1,6 +1,6 @@
public void pop() { public void pop() {
// Borrar el valor que está al prinicipio. // Borrar el valor que está al prinicipio.
this.pila[primer] = 0; this.pila[primer] = 0;
// Cambiar el primer nivel de la cola. // Cambiar el primer nivel de la cola.
primer++; primer++;
} }

View File

@ -1,6 +1,6 @@
public void push(int valor) { public void push(int valor) {
// Sumar el final. // Sumar el final.
final++; final++;
// Insertar el valor // Insertar el valor
this.pila[final] = valor; this.pila[final] = valor;
} }

View File

@ -1,14 +1,14 @@
public void insercion() { public void insercion() {
for (int i = 1; i < elementos; i++) { for (int i = 1; i < elementos; i++) {
// Guardar el elemento en un variable temporario. // Guardar el elemento en un variable temporario.
int temp = array[i]; int temp = array[i];
int j = i; int j = i;
// Mover los valores hasta que hay una mas pequeño. // Mover los valores hasta que hay una mas pequeño.
while (j > 0 && array[j-1] >= temp) { while (j > 0 && array[j-1] >= temp) {
array[j] = array[j-1]; array[j] = array[j-1];
--j; --j;
} }
// Poner el valor temporario despues de los valores mas pequeños. // Poner el valor temporario despues de los valores mas pequeños.
array[j] = temp; array[j] = temp;
} }
} }

View File

@ -1,47 +1,47 @@
public Enlace buscar(int llave) { public Enlace buscar(int llave) {
if (this.primer != null) { if (this.primer != null) {
// La lista no es vacia // La lista no es vacia
Enlace lista = this.primer; Enlace lista = this.primer;
int i = 0; int i = 0;
while (lista.getLlave() != llave && i < elementos) { while (lista.getLlave() != llave && i < elementos) {
// Buscar hasta la llave es encontrado // Buscar hasta la llave es encontrado
lista = lista.getSiguente(); lista = lista.getSiguente();
i++; i++;
} }
if (lista.getLlave() == llave) { if (lista.getLlave() == llave) {
// Devoler el enlace encontrado. // Devoler el enlace encontrado.
return lista; return lista;
} }
else { else {
// No se encontró. // No se encontró.
return null; return null;
} }
} }
else { else {
// La lista es vacia, devolver null // La lista es vacia, devolver null
return null; return null;
} }
} }
final public class Enlace { final public class Enlace {
private int llave; private int llave;
private Enlace siguente; private Enlace siguente;
public Enlace(Enlace siguiente, int llave) { public Enlace(Enlace siguiente, int llave) {
this.siguente = siguente; this.siguente = siguente;
this.llave = llave; this.llave = llave;
} }
public int getLlave() { public int getLlave() {
return llave; return llave;
} }
public Enlace getSiguente() { public Enlace getSiguente() {
return siguente; return siguente;
} }
public void setSiguente(Enlace siguente) { public void setSiguente(Enlace siguente) {
this.siguente = siguente; this.siguente = siguente;
} }
} }

View File

@ -1,57 +1,57 @@
public void eliminar(int llave) { public void eliminar(int llave) {
if (primer != null) { if (primer != null) {
// Crear una lista temporario para trabajar // Crear una lista temporario para trabajar
Enlace lista = this.primer; Enlace lista = this.primer;
// Guardar el enlace previo // Guardar el enlace previo
Enlace previo = lista; Enlace previo = lista;
// Solo busca mientras que i es menor que la cantidad de enlaces // Solo busca mientras que i es menor que la cantidad de enlaces
int i = 0; int i = 0;
while (lista.getLlave() != llave && i < elementos) { while (lista.getLlave() != llave && i < elementos) {
// Buscar hasta la llave es encontraddo // Buscar hasta la llave es encontraddo
if (lista.getSiguente() != null) { if (lista.getSiguente() != null) {
// Buscar en el sigenute enlace // Buscar en el sigenute enlace
previo = lista; previo = lista;
lista = lista.getSiguente(); lista = lista.getSiguente();
} }
i++ i++
} }
if (lista.getLlave != llave) { if (lista.getLlave != llave) {
// No se encontró // No se encontró
return; return;
} }
// Se encontró // Se encontró
if (lista == this.lista) { if (lista == this.lista) {
// Si es el primer enlace, cambiarlo al siguente enlace // Si es el primer enlace, cambiarlo al siguente enlace
this.lista = this.lista.getSiguente(); this.lista = this.lista.getSiguente();
} }
else { else {
// Sino cortar este enlace de la lista // Sino cortar este enlace de la lista
previo.setSiguente(lista.getSiguente()); previo.setSiguente(lista.getSiguente());
} }
elementos--; elementos--;
} }
} }
final public class Enlace { final public class Enlace {
private int llave; private int llave;
private Enlace siguente; private Enlace siguente;
public Enlace(Enlace siguiente, int llave) { public Enlace(Enlace siguiente, int llave) {
this.siguente = siguente; this.siguente = siguente;
this.llave = llave; this.llave = llave;
} }
public int getLlave() { public int getLlave() {
return llave; return llave;
} }
public Enlace getSiguente() { public Enlace getSiguente() {
return siguente; return siguente;
} }
public void setSiguente(Enlace siguente) { public void setSiguente(Enlace siguente) {
this.siguente = siguente; this.siguente = siguente;
} }
} }

View File

@ -1,39 +1,39 @@
public void insertar(int llave) { public void insertar(int llave) {
if (buscar(llave) == null) { if (buscar(llave) == null) {
// Crear un enlace nuevo // Crear un enlace nuevo
Enlace nuevo = new Enlace(primer, llave); Enlace nuevo = new Enlace(primer, llave);
if (primer == null) { if (primer == null) {
// Si el primer enlace es null, el ul // Si el primer enlace es null, el ul
ultimo = nuevo; ultimo = nuevo;
} }
// El primer es el nuevo. // El primer es el nuevo.
primer = nuevo; primer = nuevo;
// El ultimo apunta al primer. // El ultimo apunta al primer.
ultimo.setSiguente(primer); ultimo.setSiguente(primer);
elementos++; elementos++;
} }
} }
final public class Enlace { final public class Enlace {
private int llave; private int llave;
private Enlace siguente; private Enlace siguente;
public Enlace(Enlace siguiente, int llave) { public Enlace(Enlace siguiente, int llave) {
this.siguente = siguente; this.siguente = siguente;
this.llave = llave; this.llave = llave;
} }
public int getLlave() { public int getLlave() {
return llave; return llave;
} }
public Enlace getSiguente() { public Enlace getSiguente() {
return siguente; return siguente;
} }
public void setSiguente(Enlace siguente) { public void setSiguente(Enlace siguente) {
this.siguente = siguente; this.siguente = siguente;
} }
} }

View File

@ -1,54 +1,54 @@
public Enlace buscar(int llave) { public Enlace buscar(int llave) {
if (this.lista != null) { if (this.lista != null) {
// La lista no es vacia // La lista no es vacia
Enlace lista = this.lista; Enlace lista = this.lista;
while (lista.getLlave() != llave) { while (lista.getLlave() != llave) {
// Buscar hasta la llave es encontraddo // Buscar hasta la llave es encontraddo
if (lista.getSiguente() != null) { if (lista.getSiguente() != null) {
// Buscar en el sigenute enlace // Buscar en el sigenute enlace
lista = lista.getSiguente(); lista = lista.getSiguente();
} }
else { else {
// No se encuentra // No se encuentra
return null; return null;
} }
} }
// Se encontró, devolver el enlace // Se encontró, devolver el enlace
return lista; return lista;
} }
else { else {
// La lista es vacia, devolver null // La lista es vacia, devolver null
return null; return null;
} }
} }
final public class Enlace { final public class Enlace {
private int llave; private int llave;
private Enlace siguente; private Enlace siguente;
private Enlace previo; private Enlace previo;
public Enlace(Enlace siguiente, int llave) { public Enlace(Enlace siguiente, int llave) {
this.siguente = siguente; this.siguente = siguente;
this.llave = llave; this.llave = llave;
} }
public int getLlave() { public int getLlave() {
return llave; return llave;
} }
public Enlace getSiguente() { public Enlace getSiguente() {
return siguente; return siguente;
} }
public void setSiguente(Enlace siguente) { public void setSiguente(Enlace siguente) {
this.siguente = siguente; this.siguente = siguente;
} }
public Enlace getPrevio() { public Enlace getPrevio() {
return previo; return previo;
} }
public void setPrevio(Enlace previo) { public void setPrevio(Enlace previo) {
this.previo = previo; this.previo = previo;
} }
} }

View File

@ -1,63 +1,63 @@
public void eliminar(int llave) { public void eliminar(int llave) {
if (lista != null) { if (lista != null) {
// Crear una lista temporario para trabajar // Crear una lista temporario para trabajar
Enlace lista = this.lista; Enlace lista = this.lista;
// Guardar el enlace previo // Guardar el enlace previo
Enlace previo = lista; Enlace previo = lista;
while (lista.getLlave() != llave) { while (lista.getLlave() != llave) {
// Buscar hasta la llave es encontraddo // Buscar hasta la llave es encontraddo
if (lista.getSiguente() != null) { if (lista.getSiguente() != null) {
// Buscar en el sigenute enlace // Buscar en el sigenute enlace
previo = lista; previo = lista;
lista = lista.getSiguente(); lista = lista.getSiguente();
} }
else { else {
// No se encuentra la llave // No se encuentra la llave
return; return;
} }
} }
// Se encontró // Se encontró
if (lista == this.lista) { if (lista == this.lista) {
// Si es el primer enlace, cambiarlo al siguente enlace // Si es el primer enlace, cambiarlo al siguente enlace
this.lista = this.lista.getSiguente(); this.lista = this.lista.getSiguente();
if (this.lista.getPrevio() != null) { if (this.lista.getPrevio() != null) {
this.lista.setPrevio(null); this.lista.setPrevio(null);
} }
} }
else { else {
// Sino cortar este enlace de la lista // Sino cortar este enlace de la lista
previo.setSiguente(lista.getSiguente()); previo.setSiguente(lista.getSiguente());
} }
} }
} }
final public class Enlace { final public class Enlace {
private int llave; private int llave;
private Enlace siguente; private Enlace siguente;
private Enlace previo; private Enlace previo;
public Enlace(Enlace siguiente, int llave) { public Enlace(Enlace siguiente, int llave) {
this.siguente = siguente; this.siguente = siguente;
this.llave = llave; this.llave = llave;
} }
public int getLlave() { public int getLlave() {
return llave; return llave;
} }
public Enlace getSiguente() { public Enlace getSiguente() {
return siguente; return siguente;
} }
public void setSiguente(Enlace siguente) { public void setSiguente(Enlace siguente) {
this.siguente = siguente; this.siguente = siguente;
} }
public Enlace getPrevio() { public Enlace getPrevio() {
return previo; return previo;
} }
public void setPrevio(Enlace previo) { public void setPrevio(Enlace previo) {
this.previo = previo; this.previo = previo;
} }
} }

View File

@ -1,43 +1,43 @@
public void insertar(int llave) { public void insertar(int llave) {
if (buscar(llave) == null) { if (buscar(llave) == null) {
// Crear un enlace nuevo // Crear un enlace nuevo
Enlace nuevo = new Enlace(lista, llave); Enlace nuevo = new Enlace(lista, llave);
if (lista != null) { if (lista != null) {
// El previo es el nuevo. // El previo es el nuevo.
lista.setPrevio(nuevo); lista.setPrevio(nuevo);
} }
// Agregar el enlace a la lista // Agregar el enlace a la lista
lista = nuevo; lista = nuevo;
} }
} }
final public class Enlace { final public class Enlace {
private int llave; private int llave;
private Enlace siguente; private Enlace siguente;
private Enlace previo; private Enlace previo;
public Enlace(Enlace siguiente, int llave) { public Enlace(Enlace siguiente, int llave) {
this.siguente = siguente; this.siguente = siguente;
this.llave = llave; this.llave = llave;
} }
public int getLlave() { public int getLlave() {
return llave; return llave;
} }
public Enlace getSiguente() { public Enlace getSiguente() {
return siguente; return siguente;
} }
public void setSiguente(Enlace siguente) { public void setSiguente(Enlace siguente) {
this.siguente = siguente; this.siguente = siguente;
} }
public Enlace getPrevio() { public Enlace getPrevio() {
return previo; return previo;
} }
public void setPrevio(Enlace previo) { public void setPrevio(Enlace previo) {
this.previo = previo; this.previo = previo;
} }
} }

View File

@ -1,45 +1,45 @@
public Enlace buscar(int llave) { public Enlace buscar(int llave) {
if (this.lista != null) { if (this.lista != null) {
// La lista no es vacia // La lista no es vacia
Enlace lista = this.lista; Enlace lista = this.lista;
while (lista.getLlave() != llave) { while (lista.getLlave() != llave) {
// Buscar hasta la llave es encontraddo // Buscar hasta la llave es encontraddo
if (lista.getSiguente() != null) { if (lista.getSiguente() != null) {
// Buscar en el sigenute enlace // Buscar en el sigenute enlace
lista = lista.getSiguente(); lista = lista.getSiguente();
} }
else { else {
// No se encuentra // No se encuentra
return null; return null;
} }
} }
// Se encontró, devolver el enlace // Se encontró, devolver el enlace
return lista; return lista;
} }
else { else {
// La lista es vacia, devolver null // La lista es vacia, devolver null
return null; return null;
} }
} }
final public class Enlace { final public class Enlace {
private int llave; private int llave;
private Enlace siguente; private Enlace siguente;
public Enlace(Enlace siguiente, int llave) { public Enlace(Enlace siguiente, int llave) {
this.siguente = siguente; this.siguente = siguente;
this.llave = llave; this.llave = llave;
} }
public int getLlave() { public int getLlave() {
return llave; return llave;
} }
public Enlace getSiguente() { public Enlace getSiguente() {
return siguente; return siguente;
} }
public void setSiguente(Enlace siguente) { public void setSiguente(Enlace siguente) {
this.siguente = siguente; this.siguente = siguente;
} }
} }

View File

@ -1,51 +1,51 @@
public void eliminar(int llave) { public void eliminar(int llave) {
if (lista != null) { if (lista != null) {
// Crear una lista temporario para trabajar // Crear una lista temporario para trabajar
Enlace lista = this.lista; Enlace lista = this.lista;
// Guardar el enlace previo // Guardar el enlace previo
Enlace previo = lista; Enlace previo = lista;
while (lista.getLlave() != llave) { while (lista.getLlave() != llave) {
// Buscar hasta la llave es encontraddo // Buscar hasta la llave es encontraddo
if (lista.getSiguente() != null) { if (lista.getSiguente() != null) {
// Buscar en el sigenute enlace // Buscar en el sigenute enlace
previo = lista; previo = lista;
lista = lista.getSiguente(); lista = lista.getSiguente();
} }
else { else {
// No se encuentra la llave // No se encuentra la llave
return; return;
} }
} }
// Se encontró // Se encontró
if (lista == this.lista) { if (lista == this.lista) {
// Si es el primer enlace, cambiarlo al siguente enlace // Si es el primer enlace, cambiarlo al siguente enlace
this.lista = this.lista.getSiguente(); this.lista = this.lista.getSiguente();
} }
else { else {
// Sino cortar este enlace de la lista // Sino cortar este enlace de la lista
previo.setSiguente(lista.getSiguente()); previo.setSiguente(lista.getSiguente());
} }
} }
} }
final public class Enlace { final public class Enlace {
private int llave; private int llave;
private Enlace siguente; private Enlace siguente;
public Enlace(Enlace siguiente, int llave) { public Enlace(Enlace siguiente, int llave) {
this.siguente = siguente; this.siguente = siguente;
this.llave = llave; this.llave = llave;
} }
public int getLlave() { public int getLlave() {
return llave; return llave;
} }
public Enlace getSiguente() { public Enlace getSiguente() {
return siguente; return siguente;
} }
public void setSiguente(Enlace siguente) { public void setSiguente(Enlace siguente) {
this.siguente = siguente; this.siguente = siguente;
} }
} }

View File

@ -1,30 +1,30 @@
public void insertar(int llave) { public void insertar(int llave) {
if (buscar(llave) == null) { if (buscar(llave) == null) {
// Crear un enlace nuevo // Crear un enlace nuevo
Enlace nuevo = new Enlace(lista, llave); Enlace nuevo = new Enlace(lista, llave);
// Agregar el enlace a la lista // Agregar el enlace a la lista
lista = nuevo; lista = nuevo;
} }
} }
final public class Enlace { final public class Enlace {
private int llave; private int llave;
private Enlace siguente; private Enlace siguente;
public Enlace(Enlace siguiente, int llave) { public Enlace(Enlace siguiente, int llave) {
this.siguente = siguente; this.siguente = siguente;
this.llave = llave; this.llave = llave;
} }
public int getLlave() { public int getLlave() {
return llave; return llave;
} }
public Enlace getSiguente() { public Enlace getSiguente() {
return siguente; return siguente;
} }
public void setSiguente(Enlace siguente) { public void setSiguente(Enlace siguente) {
this.siguente = siguente; this.siguente = siguente;
} }
} }

View File

@ -1,50 +1,50 @@
public void merge() { public void merge() {
// Crear un array temporario para trabajar. // Crear un array temporario para trabajar.
int[] temp = new int[elementos]; int[] temp = new int[elementos];
// Llamar al metodo recursivo. // Llamar al metodo recursivo.
recMergeSort(temp, 0, elementos - 1); recMergeSort(temp, 0, elementos - 1);
} }
private void recMergeSort(int[] temp, int izquerda, int derecha) { private void recMergeSort(int[] temp, int izquerda, int derecha) {
if (izquerda != derecha) { if (izquerda != derecha) {
int medio = (izquerda + derecha) / 2; int medio = (izquerda + derecha) / 2;
// Trabajar con los valores en el lado izquerdo. // Trabajar con los valores en el lado izquerdo.
recMergeSort(temp, izquerda, medio); recMergeSort(temp, izquerda, medio);
// Trabajar con los valores en el lado derecha. // Trabajar con los valores en el lado derecha.
recMergeSort(temp, medio + 1, derecha); recMergeSort(temp, medio + 1, derecha);
// Unir los valores. // Unir los valores.
merge(temp, izquerda, medio + 1, derecha); merge(temp, izquerda, medio + 1, derecha);
} }
} }
private void merge(int[] temp, int prevIzquerda, int prevMedio, int derecha) { private void merge(int[] temp, int prevIzquerda, int prevMedio, int derecha) {
int j = 0; int j = 0;
int izquerda = prevIzquerda; int izquerda = prevIzquerda;
int medio = prevMedio - 1; int medio = prevMedio - 1;
int masDerecha = derecha - izquerda + 1; int masDerecha = derecha - izquerda + 1;
while (prevIzquerda <= medio && prevMedio <= derecha) { while (prevIzquerda <= medio && prevMedio <= derecha) {
// Poner un valor en el array temporario. // Poner un valor en el array temporario.
if (array[prevIzquerda] < array[prevMedio]) { if (array[prevIzquerda] < array[prevMedio]) {
temp[j++] = array[prevIzquerda++]; temp[j++] = array[prevIzquerda++];
} }
else { else {
temp[j++] = array[prevMedio++]; temp[j++] = array[prevMedio++];
} }
} }
while (prevIzquerda <= medio) { while (prevIzquerda <= medio) {
// Mientras que el valor previos de izquerda es menor que el medio correr los valores. // Mientras que el valor previos de izquerda es menor que el medio correr los valores.
temp[j++] = array[prevIzquerda++]; temp[j++] = array[prevIzquerda++];
} }
while (prevMedio <= derecha) { while (prevMedio <= derecha) {
// Mientras que el valor previos de derecha es menor que el medio correr los valores. // Mientras que el valor previos de derecha es menor que el medio correr los valores.
temp[j++] = array[prevMedio++]; temp[j++] = array[prevMedio++];
} }
for (j = 0; j < masDerecha; j++) { for (j = 0; j < masDerecha; j++) {
// Copiar los valores al array real. // Copiar los valores al array real.
array[izquerda + j] = temp[j]; array[izquerda + j] = temp[j];
} }
} }

View File

@ -1,4 +1,4 @@
public int peek() { public int peek() {
// Devolver el valor encima // Devolver el valor encima
return this.pila[encima]; return this.pila[encima];
} }

View File

@ -1,6 +1,6 @@
public void pop() { public void pop() {
// Borrar el valor que está encima. // Borrar el valor que está encima.
this.pila[encima] = 0; this.pila[encima] = 0;
// Restar el nivel de la pila. // Restar el nivel de la pila.
encima--; encima--;
} }

View File

@ -1,6 +1,6 @@
public void push(int valor) { public void push(int valor) {
// Sumar el nivel de la pila // Sumar el nivel de la pila
encima++; encima++;
// Insertar el valor // Insertar el valor
this.pila[encima] = valor; this.pila[encima] = valor;
} }

View File

@ -1,47 +1,47 @@
public void quick() { public void quick() {
// Llamar al metodo recursivo. // Llamar al metodo recursivo.
recurenciaQuick(0, elementos - 1); recurenciaQuick(0, elementos - 1);
} }
private void recurenciaQuick(int izquerda, int derecha) { private void recurenciaQuick(int izquerda, int derecha) {
if (derecha - izquerda <= 0) { if (derecha - izquerda <= 0) {
// Si derecha es menor que izquerda ya terminó. // Si derecha es menor que izquerda ya terminó.
return; return;
} }
else { else {
int pivot = array[derecha]; int pivot = array[derecha];
int particion = particionar(izquerda, derecha, pivot); int particion = particionar(izquerda, derecha, pivot);
recurenciaQuick(izquerda, particion - 1); recurenciaQuick(izquerda, particion - 1);
recurenciaQuick(particion + 1, derecha); recurenciaQuick(particion + 1, derecha);
} }
} }
private int particionar(int izquerda, int derecha, int pivot) { private int particionar(int izquerda, int derecha, int pivot) {
int punteroIzquerda = izquerda-1; int punteroIzquerda = izquerda-1;
int punteroDerecha = derecha; int punteroDerecha = derecha;
while (true) { while (true) {
// Sumar el punteroIzquerda hasta que es igual al pivot // Sumar el punteroIzquerda hasta que es igual al pivot
while (array[++punteroIzquerda] < pivot); while (array[++punteroIzquerda] < pivot);
// Restar el puntoDerecha hasta que es igual a pivot o hasta 0. // Restar el puntoDerecha hasta que es igual a pivot o hasta 0.
while (punteroDerecha > 0 && array[--punteroDerecha] > pivot); while (punteroDerecha > 0 && array[--punteroDerecha] > pivot);
if (punteroIzquerda >= punteroDerecha) { if (punteroIzquerda >= punteroDerecha) {
// Si el puntero izquerda es mayor o igual a la derech termina el while. // Si el puntero izquerda es mayor o igual a la derech termina el while.
break; break;
} }
else { else {
// Intercambiar los valores. // Intercambiar los valores.
int temp = array[punteroIzquerda]; int temp = array[punteroIzquerda];
array[punteroIzquerda] = array[punteroDerecha]; array[punteroIzquerda] = array[punteroDerecha];
array[punteroDerecha] = temp; array[punteroDerecha] = temp;
} }
} }
// Intercambiar los valores. // Intercambiar los valores.
int temp = array[punteroIzquerda]; int temp = array[punteroIzquerda];
array[punteroIzquerda] = array[derecha]; array[punteroIzquerda] = array[derecha];
array[derecha] = temp; array[derecha] = temp;
// Devolver la posición donde terminó. // Devolver la posición donde terminó.
return punteroIzquerda; return punteroIzquerda;
} }

View File

@ -1,13 +1,13 @@
public void seleccion() { public void seleccion() {
for (int i = 0; i < elementos - 1; i++) { for (int i = 0; i < elementos - 1; i++) {
int minimo = i; int minimo = i;
for (int j = i + 1; j < elementos; j++) { for (int j = i + 1; j < elementos; j++) {
if (array[j] < array[minimo]) { if (array[j] < array[minimo]) {
minimo = j; minimo = j;
} }
} }
int temp = array[i]; int temp = array[i];
array[i] = array[minimo]; array[i] = array[minimo];
array[minimo] = temp; array[minimo] = temp;
} }
} }

View File

@ -1,25 +1,25 @@
public void shell() { public void shell() {
int i, j; int i, j;
int temp; int temp;
int h = 1; int h = 1;
while (h <= elementos / 3) { while (h <= elementos / 3) {
// Sumatorio de (h * 3 + 1) // Sumatorio de (h * 3 + 1)
h = h * 3 + 1; h = h * 3 + 1;
} }
// Mientras que h es mayor que 0. // Mientras que h es mayor que 0.
while (h > 0) { while (h > 0) {
for (i = h; i < elementos; i++) { for (i = h; i < elementos; i++) {
temp = array[i]; temp = array[i];
j = i; j = i;
while (j > h-1 && array[j-h] >= temp) { while (j > h-1 && array[j-h] >= temp) {
// Ordenar dento el "shell" // Ordenar dento el "shell"
array[j] = array[j-h]; array[j] = array[j-h];
j -= h; j -= h;
} }
array[j] = temp; array[j] = temp;
} }
h = (h-1) / 3; h = (h-1) / 3;
} }
} }