Cleanup code.

This commit is contained in:
Chris Cromer 2016-07-02 18:04:18 -04:00
parent 458aea6269
commit 49f0064d49
15 changed files with 975 additions and 1083 deletions

View File

@ -1,487 +1,530 @@
package cl.cromer.estructuras; package cl.cromer.estructuras;
import java.util.Random;
/** /**
* Crear una estructura de dato de tipo array. * Crear una estructura de dato de tipo array.
* *
* @author Chris Cromer * @author Chris Cromer
*/ */
final public class Array { final public class Array {
/** /**
* El array. * El array.
*/ */
final private String array[]; final private String array[];
/** /**
* La cantidad de elementos en el array. * La cantidad de elementos en el array.
*/ */
private int size; private int size;
/** /**
* Si es de tipo ordenado o simple. * Si es de tipo ordenado o simple.
*/ */
private boolean ordered; private boolean ordered;
/** /**
* Crear el array con el tamaño pasador por argumento. * Crear el array con el tamaño pasador por argumento.
* *
* @param tamano int: El tamaño del array a crear. * @param tamano int: El tamaño del array a crear.
*/ */
public Array(int tamano) { public Array(int tamano) {
this.array = new String[tamano]; this.array = new String[tamano];
size = 0; size = 0;
ordered = false; ordered = false;
} }
/** /**
* Devolver la cantidad de elementos en el array. * Dovolver si el tipo es ordenado o no.
* *
* @return int: Devolver la cantidad de elementos en el array. * @return boolean: Si el tipo de array es ordenado.
*/ */
public int size() { public boolean isOrdered() {
return size; return ordered;
} }
/** /**
* Dovolver si el tipo es ordenado o no. * Cambiar el tipo de array entre ordenado o simple.
* *
* @return boolean: Si el tipo de array es ordenado. * @param ordered boolean: Si es verdad, es de tipo ordenado, sino el tipo es simple.
*/ */
public boolean isOrdered() { public void setOrdered(boolean ordered) {
return ordered; this.ordered = ordered;
} }
/** /**
* Cambiar el tipo de array entre ordenado o simple. * Eliminar un valor del array si existe.
* *
* @param ordered boolean: Si es verdad, es de tipo ordenado, sino el tipo es simple. * @param valor int: El valor a eliminar.
*/ *
public void setOrdered(boolean ordered) { * @return boolean: Verdad si fue encontrado y borrado, sino falso.
this.ordered = ordered; */
} public boolean eliminar(int valor) {
boolean borrado = false;
for (int i = 0; i < array.length; i++) {
if (array[i] != null && array[i].equals(String.valueOf(valor))) {
// Eliminar el valor
array[i] = null;
borrado = true;
size--;
if (ordered) {
for (int j = i; j < array.length; j++) {
if (j != array.length - 1) {
// Correr la array hacia arriba
array[j] = array[j + 1];
}
}
array[array.length - 1] = null;
}
else {
break;
}
}
}
return borrado;
}
/** /**
* Insertar un valor al array. * Devolver el valor que está guardado en cada indice del array. Se usa para construir la grafica.
* *
* @param valor int: El valor a insertar. * @param indice int: El indice que desea ver.
* @return boolean: Verdad si fue exitoso, sino falso. *
*/ * @return String: El valor que está en dicho indice.
public boolean insertar(int valor) { */
for (int i = 0; i < array.length; i++) { public String getIndice(int indice) {
if (array[i] == null) { if (indice >= 0 && indice < array.length) {
array[i] = String.valueOf(valor); return array[indice];
size++; }
return true; else {
} return null;
else if (array[i].equals(String.valueOf(valor))) { }
// Ya existe el valor en el array }
return false;
}
}
return false;
}
/** /**
* Eliminar un valor del array si existe. * Llenar el array con valores al azar.
* */
* @param valor int: El valor a eliminar. public void llenar() {
* @return boolean: Verdad si fue encontrado y borrado, sino falso. Random random = new Random();
*/ int maximo = 99;
public boolean eliminar(int valor) { int minimo = 0;
boolean borrado = false; int rango = maximo - minimo + 1;
for (int i = 0; i < array.length; i++) {
if (array[i] != null && array[i].equals(String.valueOf(valor))) {
// Eliminar el valor
array[i] = null;
borrado = true;
size--;
if (ordered) {
for (int j = i; j < array.length; j++) {
if (j != array.length - 1) {
// Correr la array hacia arriba
array[j] = array[j + 1];
}
}
array[array.length - 1] = null;
}
else {
break;
}
}
}
return borrado;
}
/** for (int i = size(); i < 10; i++) {
* Buscar si existe un valor dentro el array. int numero = random.nextInt(rango) + minimo;
* while (buscar(numero) != - 1) {
* @param valor int: Valor a buscar. numero = random.nextInt(rango) + minimo;
* @return int: Devuelve el indice donde fue encontrado, o -1 si no fue encontrado. }
*/ insertar(numero);
public int buscar(int valor) { }
for (int i = 0; i < array.length; i++) { }
if (array[i] != null && array[i].equals(String.valueOf(valor))) {
// Se encontró
return i;
}
}
// No se encontró
return -1;
}
/** /**
* Devolver el valor que está guardado en cada indice del array. Se usa para construir la grafica. * Devolver la cantidad de elementos en el array.
* *
* @param indice int: El indice que desea ver. * @return int: Devolver la cantidad de elementos en el array.
* @return String: El valor que está en dicho indice. */
*/ public int size() {
public String getIndice(int indice) { return size;
if (indice >= 0 && indice < array.length) { }
return array[indice];
}
else {
return null;
}
}
/** /**
* Ordenar el array usando burbuja. * Buscar si existe un valor dentro el array.
* *
* @param paso boolean: Si es verdad, solo hago en paso del ordenamiento, sino ordenear todos los elementos. * @param valor int: Valor a buscar.
* @return boolean: Verdad si algo cambió, sino falso. *
*/ * @return int: Devuelve el indice donde fue encontrado, o -1 si no fue encontrado.
public boolean burbuja(boolean paso) { */
boolean cambio = false; public int buscar(int valor) {
for (int i = 0; i < array.length; i++) {
if (array[i] != null && array[i].equals(String.valueOf(valor))) {
// Se encontró
return i;
}
}
// No se encontró
return - 1;
}
for (int i = size() - 1; i > 1; i--) { /**
for (int j = 0; j < i; j++) { * Insertar un valor al array.
if (Integer.valueOf(array[j]) > Integer.valueOf(array[j + 1])) { *
String temp = array[j]; * @param valor int: El valor a insertar.
array[j] = array[j + 1]; *
array[j + 1] = temp; * @return boolean: Verdad si fue exitoso, sino falso.
cambio = true; */
if (paso) { public boolean insertar(int valor) {
return true; for (int i = 0; i < array.length; i++) {
} if (array[i] == null) {
} array[i] = String.valueOf(valor);
} size++;
} return true;
}
else if (array[i].equals(String.valueOf(valor))) {
// Ya existe el valor en el array
return false;
}
}
return false;
}
return cambio; /**
} * Borrar el array.
*/
public void nuevo() {
for (int i = 0; i < size(); i++) {
array[i] = null;
}
}
/** /**
* Ordenar el array usando inserción. * Ordenar el array usando burbuja.
* *
* @param paso boolean: Si es verdad, solo hago en paso del ordenamiento, sino ordenear todos los elementos. * @param paso boolean: Si es verdad, solo hago en paso del ordenamiento, sino ordenear todos los elementos.
* @return boolean: Verdad si algo cambió, sino falso. *
*/ * @return boolean: Verdad si algo cambió, sino falso.
public boolean insercion(boolean paso) { */
boolean cambio = false; public boolean burbuja(boolean paso) {
boolean cambio = false;
for (int i = 1; i < size(); i++) { for (int i = size() - 1; i > 1; i--) {
String temp = array[i]; for (int j = 0; j < i; j++) {
int j = i; if (Integer.valueOf(array[j]) > Integer.valueOf(array[j + 1])) {
while (j > 0 && Integer.valueOf(array[j - 1]) >= Integer.valueOf(temp)) { String temp = array[j];
array[j] = array[j - 1]; array[j] = array[j + 1];
--j; array[j + 1] = temp;
cambio = true; cambio = true;
} if (paso) {
array[j] = temp; return true;
if (paso && cambio) { }
return true; }
} }
} }
return cambio; return cambio;
} }
/** /**
* Ordenar el array usando selección. * Ordenar el array usando inserción.
* *
* @param paso boolean: Si es verdad, solo hago en paso del ordenamiento, sino ordenear todos los elementos. * @param paso boolean: Si es verdad, solo hago en paso del ordenamiento, sino ordenear todos los elementos.
* @return boolean: Verdad si algo cambió, sino falso. *
*/ * @return boolean: Verdad si algo cambió, sino falso.
public boolean seleccion(boolean paso) { */
boolean cambio = false; public boolean insercion(boolean paso) {
boolean cambio = false;
for (int i = 0; i < size() - 1; i++) { for (int i = 1; i < size(); i++) {
int minimo = i; String temp = array[i];
for (int j = i + 1; j < size(); j++) { int j = i;
if (Integer.valueOf(array[j]) < Integer.valueOf(array[minimo])) { while (j > 0 && Integer.valueOf(array[j - 1]) >= Integer.valueOf(temp)) {
minimo = j; array[j] = array[j - 1];
cambio = true; -- j;
} cambio = true;
} }
String temp = array[i]; array[j] = temp;
array[i] = array[minimo]; if (paso && cambio) {
array[minimo] = temp; return true;
if (paso && cambio) { }
return true; }
}
}
return cambio; return cambio;
} }
/** /**
* Ordenar el array usando shell. * Ordenar el array usando selección.
* *
* @param paso boolean: Si es verdad, solo hago en paso del ordenamiento, sino ordenear todos los elementos. * @param paso boolean: Si es verdad, solo hago en paso del ordenamiento, sino ordenear todos los elementos.
* @return boolean: Verdad si algo cambió, sino falso. *
*/ * @return boolean: Verdad si algo cambió, sino falso.
public boolean shell(boolean paso) { */
boolean cambio = false; public boolean seleccion(boolean paso) {
boolean cambio = false;
int j, i; for (int i = 0; i < size() - 1; i++) {
String temp; int minimo = i;
for (int j = i + 1; j < size(); j++) {
if (Integer.valueOf(array[j]) < Integer.valueOf(array[minimo])) {
minimo = j;
cambio = true;
}
}
String temp = array[i];
array[i] = array[minimo];
array[minimo] = temp;
if (paso && cambio) {
return true;
}
}
int h = 1; return cambio;
while (h <= size() / 3) { }
h = h * 3 + 1;
}
while (h > 0) { /**
for (i = h; i < size(); i++) { * Ordenar el array usando shell.
temp = array[i]; *
j = i; * @param paso boolean: Si es verdad, solo hago en paso del ordenamiento, sino ordenear todos los elementos.
while (j > h - 1 && Integer.valueOf(array[j - h]) >= Integer.valueOf(temp)) { *
array[j] = array[j - h]; * @return boolean: Verdad si algo cambió, sino falso.
j -= h; */
cambio = true; public boolean shell(boolean paso) {
} boolean cambio = false;
array[j] = temp;
if (paso && cambio) {
return true;
}
}
h = (h - 1) / 3;
}
return cambio; int j, i;
} String temp;
/** int h = 1;
* Ordenar el array usando quick. while (h <= size() / 3) {
* h = h * 3 + 1;
* @param paso boolean: Si es verdad, solo hago en paso del ordenamiento, sino ordenear todos los elementos. }
* @return boolean: Verdad si algo cambió, sino falso.
*/
public boolean quick(boolean paso) {
String array[] = this.array.clone();
boolean cambio = false;
boolean cambio2;
cambio2 = recurenciaQuick(0, size() - 1, paso);
for (int i = 0; i < size(); i++) {
if (!array[i].equals(this.array[i])) {
cambio = true;
}
}
return (cambio || cambio2);
}
/** while (h > 0) {
* Metodo recursivo para ordenar using quick sort. for (i = h; i < size(); i++) {
* temp = array[i];
* @param izquerda int: La posición del quick desded la izquerda. j = i;
* @param derecha int: La posición del quick desded la derecha.. while (j > h - 1 && Integer.valueOf(array[j - h]) >= Integer.valueOf(temp)) {
* @param paso boolean: Si es verdad, solo hago en paso del ordenamiento, sino ordenear todos los elementos. array[j] = array[j - h];
* @return boolean: Verdad si algo cambió, sino falso. j -= h;
*/ cambio = true;
private boolean recurenciaQuick(int izquerda, int derecha, boolean paso) { }
boolean cambio; array[j] = temp;
boolean cambio2; if (paso && cambio) {
return true;
}
}
h = (h - 1) / 3;
}
if (derecha - izquerda <= 0) { return cambio;
return false; }
}
else {
String pivot = array[derecha];
ParticionarResult particionarResult = particionar(izquerda, derecha, pivot); /**
if (paso && particionarResult.getCambio()) { * Ordenar el array usando quick.
return particionarResult.getCambio(); *
} * @param paso boolean: Si es verdad, solo hago en paso del ordenamiento, sino ordenear todos los elementos.
cambio = recurenciaQuick(izquerda, particionarResult.getPunteroIzquerda() - 1, paso); *
cambio2 = recurenciaQuick(particionarResult.getPunteroIzquerda() + 1, derecha, paso); * @return boolean: Verdad si algo cambió, sino falso.
return (paso && (cambio || cambio2)); */
} public boolean quick(boolean paso) {
} String array[] = this.array.clone();
boolean cambio = false;
boolean cambio2;
cambio2 = recurenciaQuick(0, size() - 1, paso);
for (int i = 0; i < size(); i++) {
if (! array[i].equals(this.array[i])) {
cambio = true;
}
}
return (cambio || cambio2);
}
/** /**
* Particionar el array desded la izquerda y derecho usando un pivot. * Metodo recursivo para ordenar using quick sort.
* *
* @param izquerda int: La posición del quick desde la izquerda. * @param izquerda int: La posición del quick desded la izquerda.
* @param derecha int: La posición del quick desde la derecha. * @param derecha int: La posición del quick desded la derecha..
* @param pivot String: El valor a comparar con los otros. * @param paso boolean: Si es verdad, solo hago en paso del ordenamiento, sino ordenear todos los elementos.
* @return ParticionarResult: Los resultados de particionar. *
*/ * @return boolean: Verdad si algo cambió, sino falso.
private ParticionarResult particionar(int izquerda, int derecha, String pivot) { */
boolean cambio = false; private boolean recurenciaQuick(int izquerda, int derecha, boolean paso) {
boolean cambio;
boolean cambio2;
int punteroIzquerda = izquerda - 1; if (derecha - izquerda <= 0) {
int punteroDerecha = derecha; return false;
while (true) { }
//noinspection StatementWithEmptyBody else {
while (Integer.valueOf(array[++punteroIzquerda]) < Integer.valueOf(pivot)) { String pivot = array[derecha];
}
//noinspection StatementWithEmptyBody
while (punteroDerecha > 0 && Integer.valueOf(array[--punteroDerecha]) > Integer.valueOf(pivot)) {
}
if (punteroIzquerda >= punteroDerecha) { ParticionarResult particionarResult = particionar(izquerda, derecha, pivot);
break; if (paso && particionarResult.getCambio()) {
} return particionarResult.getCambio();
else { }
String temp = array[punteroIzquerda]; cambio = recurenciaQuick(izquerda, particionarResult.getPunteroIzquerda() - 1, paso);
array[punteroIzquerda] = array[punteroDerecha]; cambio2 = recurenciaQuick(particionarResult.getPunteroIzquerda() + 1, derecha, paso);
array[punteroDerecha] = temp; return (paso && (cambio || cambio2));
cambio = true; }
} }
}
String temp = array[punteroIzquerda];
array[punteroIzquerda] = array[derecha];
array[derecha] = temp;
return new ParticionarResult(cambio, punteroIzquerda); /**
} * Particionar el array desded la izquerda y derecho usando un pivot.
*
* @param izquerda int: La posición del quick desde la izquerda.
* @param derecha int: La posición del quick desde la derecha.
* @param pivot String: El valor a comparar con los otros.
*
* @return ParticionarResult: Los resultados de particionar.
*/
private ParticionarResult particionar(int izquerda, int derecha, String pivot) {
boolean cambio = false;
/** int punteroIzquerda = izquerda - 1;
* Ordenar el array usando merge. int punteroDerecha = derecha;
* while (true) {
* @param paso boolean: Si es verdad, solo hago en paso del ordenamiento, sino ordenear todos los elementos. //noinspection StatementWithEmptyBody
* @return boolean: Verdad si algo cambió, sino falso. while (Integer.valueOf(array[++ punteroIzquerda]) < Integer.valueOf(pivot)) {
*/ }
public boolean merge(boolean paso) { //noinspection StatementWithEmptyBody
String array[] = this.array.clone(); while (punteroDerecha > 0 && Integer.valueOf(array[-- punteroDerecha]) > Integer.valueOf(pivot)) {
boolean cambio = false; }
boolean cambio2;
String[] temp = new String[size()];
cambio2 = recurenciaMerge(temp, 0, size() - 1, paso);
for (int i = 0; i < size(); i++) {
if (!array[i].equals(this.array[i])) {
cambio = true;
}
}
return (cambio || cambio2);
}
/** if (punteroIzquerda >= punteroDerecha) {
* El metodo recursivo para ordenar con merge. break;
* }
* @param temp String[]: El array temporario para trabajar. else {
* @param izquerda int: El lado izquerda. String temp = array[punteroIzquerda];
* @param derecha int: El lado derecha. array[punteroIzquerda] = array[punteroDerecha];
* @param paso boolean: Verdad si es paso por paso. array[punteroDerecha] = temp;
* @return boolean: Devolver si algo cambió. cambio = true;
*/ }
private boolean recurenciaMerge(String[] temp, int izquerda, int derecha, boolean paso) { }
if (izquerda != derecha) { String temp = array[punteroIzquerda];
boolean cambio; array[punteroIzquerda] = array[derecha];
boolean cambio2; array[derecha] = temp;
boolean cambio3;
int medio = (izquerda + derecha) / 2; return new ParticionarResult(cambio, punteroIzquerda);
cambio = recurenciaMerge(temp, izquerda, medio, paso); }
if (paso && cambio) {
return true;
}
cambio2 = recurenciaMerge(temp, medio + 1, derecha, paso);
if (paso && cambio2) {
return true;
}
cambio3 = merge(temp, izquerda, medio + 1, derecha, paso);
return (paso && cambio3);
}
else {
return false;
}
}
/** /**
* Este metodo hace los cambios al array. * Ordenar el array usando merge.
* *
* @param temp String[]: El array temporario para trabajar. * @param paso boolean: Si es verdad, solo hago en paso del ordenamiento, sino ordenear todos los elementos.
* @param prevIzquerda int: El valor previo de la izquerda. *
* @param prevMedio int: El valor previo al medio. * @return boolean: Verdad si algo cambió, sino falso.
* @param prevDerecha int: El valor previo de la derecha. */
* @param paso boolean: Si es paso por paso. public boolean merge(boolean paso) {
* @return boolean: Devolver si algo cambió. String array[] = this.array.clone();
*/ boolean cambio = false;
private boolean merge(String[] temp, int prevIzquerda, int prevMedio, int prevDerecha, boolean paso) { boolean cambio2;
boolean cambio = false; String[] temp = new String[size()];
int j = 0; cambio2 = recurenciaMerge(temp, 0, size() - 1, paso);
int izquerda = prevIzquerda; for (int i = 0; i < size(); i++) {
int medio = prevMedio - 1; if (! array[i].equals(this.array[i])) {
int derecha = prevDerecha - izquerda + 1; cambio = true;
}
}
return (cambio || cambio2);
}
while (prevIzquerda <= medio && prevMedio <= prevDerecha) { /**
if (Integer.valueOf(array[prevIzquerda]) < Integer.valueOf(array[prevMedio])) { * El metodo recursivo para ordenar con merge.
temp[j++] = array[prevIzquerda++]; *
} * @param temp String[]: El array temporario para trabajar.
else { * @param izquerda int: El lado izquerda.
temp[j++] = array[prevMedio++]; * @param derecha int: El lado derecha.
} * @param paso boolean: Verdad si es paso por paso.
} *
* @return boolean: Devolver si algo cambió.
*/
private boolean recurenciaMerge(String[] temp, int izquerda, int derecha, boolean paso) {
if (izquerda != derecha) {
boolean cambio;
boolean cambio2;
boolean cambio3;
while (prevIzquerda <= medio) { int medio = (izquerda + derecha) / 2;
temp[j++] = array[prevIzquerda++]; cambio = recurenciaMerge(temp, izquerda, medio, paso);
} if (paso && cambio) {
return true;
}
cambio2 = recurenciaMerge(temp, medio + 1, derecha, paso);
if (paso && cambio2) {
return true;
}
cambio3 = merge(temp, izquerda, medio + 1, derecha, paso);
return (paso && cambio3);
}
else {
return false;
}
}
while (prevMedio <= prevDerecha) { /**
temp[j++] = array[prevMedio++]; * Este metodo hace los cambios al array.
} *
* @param temp String[]: El array temporario para trabajar.
* @param prevIzquerda int: El valor previo de la izquerda.
* @param prevMedio int: El valor previo al medio.
* @param prevDerecha int: El valor previo de la derecha.
* @param paso boolean: Si es paso por paso.
*
* @return boolean: Devolver si algo cambió.
*/
private boolean merge(String[] temp, int prevIzquerda, int prevMedio, int prevDerecha, boolean paso) {
boolean cambio = false;
int j = 0;
int izquerda = prevIzquerda;
int medio = prevMedio - 1;
int derecha = prevDerecha - izquerda + 1;
for (j = 0; j < derecha; j++) { while (prevIzquerda <= medio && prevMedio <= prevDerecha) {
String temp2 = array[izquerda + j]; if (Integer.valueOf(array[prevIzquerda]) < Integer.valueOf(array[prevMedio])) {
array[izquerda + j] = temp[j]; temp[j++] = array[prevIzquerda++];
if (paso && !array[izquerda + j].equals(temp2)) { }
cambio = true; else {
} temp[j++] = array[prevMedio++];
} }
return cambio; }
}
/** while (prevIzquerda <= medio) {
* Esta clase contiene los resultados de Partricionar. temp[j++] = array[prevIzquerda++];
*/ }
final public class ParticionarResult {
/**
* Si habia algun cambio.
*/
final private boolean cambio;
/** while (prevMedio <= prevDerecha) {
* La parte izquerda que cambió. temp[j++] = array[prevMedio++];
*/ }
final private int punteroIzquerda;
/** for (j = 0; j < derecha; j++) {
* Inicializar. String temp2 = array[izquerda + j];
* array[izquerda + j] = temp[j];
* @param cambio boolean: Si habia un cambio o no. if (paso && ! array[izquerda + j].equals(temp2)) {
* @param punteroIzquerda: El valor desde la izquerda donde fue un cambio. cambio = true;
*/ }
public ParticionarResult(boolean cambio, int punteroIzquerda) { }
this.cambio = cambio; return cambio;
this.punteroIzquerda = punteroIzquerda; }
}
/** /**
* Devolver el cambio. * Esta clase contiene los resultados de Partricionar.
* */
* @return boolean: Devolver el valor de cambio. final public class ParticionarResult {
*/ /**
public boolean getCambio() { * Si habia algun cambio.
return cambio; */
} final private boolean cambio;
/** /**
* Devolver el puntero izquerda. * La parte izquerda que cambió.
* */
* @return int: Devolver el valor de puntero. final private int punteroIzquerda;
*/
public int getPunteroIzquerda() { /**
return punteroIzquerda; * Inicializar.
} *
} * @param cambio boolean: Si habia un cambio o no.
* @param punteroIzquerda: El valor desde la izquerda donde fue un cambio.
*/
public ParticionarResult(boolean cambio, int punteroIzquerda) {
this.cambio = cambio;
this.punteroIzquerda = punteroIzquerda;
}
/**
* Devolver el cambio.
*
* @return boolean: Devolver el valor de cambio.
*/
public boolean getCambio() {
return cambio;
}
/**
* Devolver el puntero izquerda.
*
* @return int: Devolver el valor de puntero.
*/
public int getPunteroIzquerda() {
return punteroIzquerda;
}
}
} }

View File

@ -7,7 +7,6 @@ import javafx.scene.layout.VBox;
import javafx.scene.text.Text; import javafx.scene.text.Text;
import java.net.URL; import java.net.URL;
import java.util.Random;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.Scanner; import java.util.Scanner;
import java.util.logging.Level; import java.util.logging.Level;
@ -85,21 +84,34 @@ public class ArrayController implements Initializable {
initializeArray(); initializeArray();
} }
Random random = new Random(); array.llenar();
int maximo = 99;
int minimo = 0;
int rango = maximo - minimo + 1;
for (int i = array.size(); i < 10; i++) {
int numero = random.nextInt(rango) + minimo;
while (array.buscar(numero) != -1) {
numero = random.nextInt(rango) + minimo;
}
array.insertar(numero);
}
generarGrafico(); generarGrafico();
} }
/**
* Crear el array de tamaño 10. La scene está usado para saber si es de tipo ordenado o simple segun el ménu.
*/
private void initializeArray() {
scene = contenidoArray.getScene();
grafico = new Grafico(scene);
this.array = new Array(10);
ArrayTipos arrayTipos = (ArrayTipos) scene.getUserData();
if (arrayTipos.getTipo() == ArrayTipos.ORDENADO) {
this.array.setOrdered(true);
}
}
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
grafico.removerDestacar();
for (int i = 0; i < 10; i++) {
Text text = (Text) scene.lookup("#texto_" + String.valueOf(i));
text.setText(array.getIndice(i));
}
}
/** /**
* Vaciar el array de todos los valores. * Vaciar el array de todos los valores.
*/ */
@ -235,28 +247,4 @@ public class ArrayController implements Initializable {
Main.mostrarError(resourceBundle.getString("arrayNoValor"), resourceBundle); Main.mostrarError(resourceBundle.getString("arrayNoValor"), resourceBundle);
} }
} }
/**
* Crear el array de tamaño 10. La scene está usado para saber si es de tipo ordenado o simple segun el ménu.
*/
private void initializeArray() {
scene = contenidoArray.getScene();
grafico = new Grafico(scene);
this.array = new Array(10);
ArrayTipos arrayTipos = (ArrayTipos) scene.getUserData();
if (arrayTipos.getTipo() == ArrayTipos.ORDENADO) {
this.array.setOrdered(true);
}
}
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
grafico.removerDestacar();
for (int i = 0; i < 10; i++) {
Text text = (Text) scene.lookup("#texto_" + String.valueOf(i));
text.setText(array.getIndice(i));
}
}
} }

View File

@ -3,14 +3,10 @@ package cl.cromer.estructuras;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.control.ButtonBar;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.layout.HBox; import javafx.scene.layout.HBox;
import javafx.scene.text.Text; import javafx.scene.text.Text;
import java.net.URL; import java.net.URL;
import java.util.Random;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.Scanner; import java.util.Scanner;
@ -54,6 +50,7 @@ public class BurbujaController implements Initializable {
* @param resourceBundle ResourceBundle: Tiene datos de idioma. * @param resourceBundle ResourceBundle: Tiene datos de idioma.
*/ */
@Override @Override
@SuppressWarnings("Duplicates")
public void initialize(URL location, ResourceBundle resourceBundle) { public void initialize(URL location, ResourceBundle resourceBundle) {
this.resourceBundle = resourceBundle; this.resourceBundle = resourceBundle;
@ -61,21 +58,12 @@ public class BurbujaController implements Initializable {
Colores colores = new Colores(); Colores colores = new Colores();
Random random = new Random();
int maximo = 99;
int minimo = 0;
int rango = maximo - minimo + 1;
array = new Array(10); array = new Array(10);
array.setOrdered(true); array.setOrdered(true);
array.llenar();
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
int numero = random.nextInt(rango) + minimo; contenidoBurbuja.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i), String.valueOf(array.getIndice(i))));
while (array.buscar(numero) != -1) {
numero = random.nextInt(rango) + minimo;
}
array.insertar(numero);
contenidoBurbuja.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i), String.valueOf(numero)));
colores.siguinteColor(); colores.siguinteColor();
} }
} }
@ -89,24 +77,28 @@ public class BurbujaController implements Initializable {
initializeScene(); initializeScene();
} }
array = new Array(10); array.nuevo();
array.setOrdered(true); array.llenar();
Random random = new Random();
int maximo = 99;
int minimo = 0;
int rango = maximo - minimo + 1;
for (int i = array.size(); i < 10; i++) {
int numero = random.nextInt(rango) + minimo;
while (array.buscar(numero) != -1) {
numero = random.nextInt(rango) + minimo;
}
array.insertar(numero);
}
generarGrafico(); generarGrafico();
} }
/**
* Crear el array de tamaño 10.
*/
private void initializeScene() {
scene = contenidoBurbuja.getScene();
}
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
for (int i = 0; i < 10; i++) {
Text text = (Text) scene.lookup("#texto_" + String.valueOf(i));
text.setText(array.getIndice(i));
}
}
/** /**
* Ordenarlo paso por paso. * Ordenarlo paso por paso.
*/ */
@ -146,21 +138,4 @@ public class BurbujaController implements Initializable {
generarGrafico(); generarGrafico();
} }
/**
* Crear el array de tamaño 10.
*/
private void initializeScene() {
scene = contenidoBurbuja.getScene();
}
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
for (int i = 0; i < 10; i++) {
Text text = (Text) scene.lookup("#texto_" + String.valueOf(i));
text.setText(array.getIndice(i));
}
}
} }

View File

@ -1,5 +1,7 @@
package cl.cromer.estructuras; package cl.cromer.estructuras;
import java.util.Random;
/** /**
* Crear una estructura de dato de tipo cola. * Crear una estructura de dato de tipo cola.
* *
@ -24,39 +26,6 @@ final public class Cola {
size = 0; size = 0;
} }
/**
* Devolver la cantidad de elementos que están en la cola.
*
* @return int: La cantidad de elementos.
*/
public int size() {
return size;
}
/**
* Push un valor en la cola encima.
*
* @param valor int: El valor a push.
*/
public void push(int valor) {
if (this.cola != null) {
String cola[] = new String[this.cola.length + 1];
int i;
for (i = 0; i < this.cola.length; i++) {
cola[i] = this.cola[i];
}
cola[i] = String.valueOf(valor);
this.cola = cola;
size++;
}
else {
String pila[] = new String[1];
pila[0] = String.valueOf(valor);
this.cola = pila;
size++;
}
}
/** /**
* Pop un valor del principio de la cola. * Pop un valor del principio de la cola.
* *
@ -90,6 +59,15 @@ final public class Cola {
} }
} }
/**
* Devolver la cantidad de elementos que están en la cola.
*
* @return int: La cantidad de elementos.
*/
public int 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.
* *
@ -104,4 +82,44 @@ final public class Cola {
return null; return null;
} }
} }
/**
* Llenar la cola con valores al azar.
*/
@SuppressWarnings("Duplicates")
public void llenar() {
Random random = new Random();
int maximo = 99;
int minimo = 0;
int rango = maximo - minimo + 1;
for (int i = size(); i < 10; i++) {
int numero = random.nextInt(rango) + minimo;
push(numero);
}
}
/**
* Push un valor en la cola encima.
*
* @param valor int: El valor a push.
*/
public void push(int valor) {
if (this.cola != null) {
String cola[] = new String[this.cola.length + 1];
int i;
for (i = 0; i < this.cola.length; i++) {
cola[i] = this.cola[i];
}
cola[i] = String.valueOf(valor);
this.cola = cola;
size++;
}
else {
String pila[] = new String[1];
pila[0] = String.valueOf(valor);
this.cola = pila;
size++;
}
}
} }

View File

@ -7,7 +7,6 @@ import javafx.scene.layout.VBox;
import javafx.scene.text.Text; import javafx.scene.text.Text;
import java.net.URL; import java.net.URL;
import java.util.Random;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.Scanner; import java.util.Scanner;
import java.util.logging.Level; import java.util.logging.Level;
@ -87,18 +86,21 @@ public class ColaController implements Initializable {
grafico = new Grafico(scene); grafico = new Grafico(scene);
} }
Random random = new Random(); cola.llenar();
int maximo = 99;
int minimo = 0;
int rango = maximo - minimo + 1;
for (int i = cola.size(); i < 10; i++) {
int numero = random.nextInt(rango) + minimo;
cola.push(numero);
}
generarGrafico(); generarGrafico();
} }
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
grafico.removerDestacar();
for (int i = 0; i < 10; i++) {
Text text = (Text) scene.lookup("#texto_" + String.valueOf(i));
text.setText(cola.getIndice(i));
}
}
/** /**
* Vaciar la cola de todos los valores. * Vaciar la cola de todos los valores.
*/ */
@ -201,15 +203,4 @@ public class ColaController implements Initializable {
Main.mostrarError(resourceBundle.getString("colaVacia"), resourceBundle); Main.mostrarError(resourceBundle.getString("colaVacia"), resourceBundle);
} }
} }
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
grafico.removerDestacar();
for (int i = 0; i < 10; i++) {
Text text = (Text) scene.lookup("#texto_" + String.valueOf(i));
text.setText(cola.getIndice(i));
}
}
} }

View File

@ -19,6 +19,7 @@ public class HashTable {
* @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")
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;
@ -41,22 +42,6 @@ public class HashTable {
return (Math.abs(sum) % tamano); return (Math.abs(sum) % tamano);
} }
/**
* Este metodo crea un hash usando una llave.
* @param string String: El string a hashear.
* @return int: El hash a devolver.
*/
public int hash(String string) {
int hash = 31;
for (int i = 0; i < string.length(); i++) {
hash = hash * 31 + string.charAt(i);
}
if (hash < 0) {
hash = hash * -1;
}
return hash % tamano;
}
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());
@ -80,6 +65,24 @@ public class HashTable {
} }
} }
/**
* Este metodo crea un hash usando una llave.
*
* @param string String: El string a hashear.
*
* @return int: El hash a devolver.
*/
public int hash(String string) {
int hash = 31;
for (int i = 0; i < string.length(); i++) {
hash = hash * 31 + string.charAt(i);
}
if (hash < 0) {
hash = hash * - 1;
}
return hash % tamano;
}
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());

View File

@ -7,7 +7,6 @@ import javafx.scene.layout.HBox;
import javafx.scene.text.Text; import javafx.scene.text.Text;
import java.net.URL; import java.net.URL;
import java.util.Random;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.Scanner; import java.util.Scanner;
@ -51,6 +50,7 @@ public class InsercionController implements Initializable {
* @param resourceBundle ResourceBundle: Tiene datos de idioma. * @param resourceBundle ResourceBundle: Tiene datos de idioma.
*/ */
@Override @Override
@SuppressWarnings("Duplicates")
public void initialize(URL location, ResourceBundle resourceBundle) { public void initialize(URL location, ResourceBundle resourceBundle) {
this.resourceBundle = resourceBundle; this.resourceBundle = resourceBundle;
@ -58,21 +58,12 @@ public class InsercionController implements Initializable {
Colores colores = new Colores(); Colores colores = new Colores();
Random random = new Random();
int maximo = 99;
int minimo = 0;
int rango = maximo - minimo + 1;
array = new Array(10); array = new Array(10);
array.setOrdered(true); array.setOrdered(true);
array.llenar();
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
int numero = random.nextInt(rango) + minimo; contenidoInsercion.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i), String.valueOf(array.getIndice(i))));
while (array.buscar(numero) != -1) {
numero = random.nextInt(rango) + minimo;
}
array.insertar(numero);
contenidoInsercion.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i), String.valueOf(numero)));
colores.siguinteColor(); colores.siguinteColor();
} }
} }
@ -86,24 +77,28 @@ public class InsercionController implements Initializable {
initializeScene(); initializeScene();
} }
array = new Array(10); array.nuevo();
array.setOrdered(true); array.llenar();
Random random = new Random();
int maximo = 99;
int minimo = 0;
int rango = maximo - minimo + 1;
for (int i = array.size(); i < 10; i++) {
int numero = random.nextInt(rango) + minimo;
while (array.buscar(numero) != -1) {
numero = random.nextInt(rango) + minimo;
}
array.insertar(numero);
}
generarGrafico(); generarGrafico();
} }
/**
* Crear el array de tamaño 10.
*/
private void initializeScene() {
scene = contenidoInsercion.getScene();
}
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
for (int i = 0; i < 10; i++) {
Text text = (Text) scene.lookup("#texto_" + String.valueOf(i));
text.setText(array.getIndice(i));
}
}
/** /**
* Ordenarlo paso por paso. * Ordenarlo paso por paso.
*/ */
@ -143,21 +138,4 @@ public class InsercionController implements Initializable {
generarGrafico(); generarGrafico();
} }
/**
* Crear el array de tamaño 10.
*/
private void initializeScene() {
scene = contenidoInsercion.getScene();
}
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
for (int i = 0; i < 10; i++) {
Text text = (Text) scene.lookup("#texto_" + String.valueOf(i));
text.setText(array.getIndice(i));
}
}
} }

View File

@ -126,14 +126,57 @@ public class ListaEnlazdaController implements Initializable {
} }
/** /**
* Vaciar la lista de todos los valores. * Crear una lista vacia.
*/ */
@FXML private void initializeLista() {
protected void botonVaciar() { scene = contenidoLista.getScene();
if (scene == null) { grafico = new Grafico(scene);
initializeLista(); listaEnlazadaTipos = (ListaEnlazadaTipos) scene.getUserData();
} nuevaLista();
}
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
grafico.removerDestacar();
colores = new Colores();
contenidoLista.getChildren().clear();
contenidoListaCircular.getChildren().clear();
if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) {
for (int i = 0; i < listaEnlazada.size(); i++) {
Enlace enlace = listaEnlazada.getIndice(i);
if (listaEnlazada.getTipo() == ListaEnlazadaTipos.SIMPLE) {
dibujarSimple(enlace, false);
}
else if (listaEnlazada.getTipo() == ListaEnlazadaTipos.DOBLEMENTE_ENLAZADA) {
if (i != listaEnlazada.size() - 1) {
dibujarDoble(enlace, (i == 0));
}
else {
dibujarSimple(enlace, false);
}
}
colores.siguinteColor();
}
}
else {
for (int i = 0; i < listaEnlazadaCircular.size(); i++) {
Enlace enlace = listaEnlazadaCircular.getIndice(i);
dibujarSimple(enlace, (i == listaEnlazadaCircular.size() - 1));
colores.siguinteColor();
}
if (listaEnlazadaCircular.size() > 0) {
contenidoListaCircular.getChildren().addAll(Grafico.crearLineaCircular(listaEnlazadaCircular.size()));
}
}
}
/**
* Crear una nueva lista enlazada.
*/
private void nuevaLista() {
if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) { if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) {
listaEnlazada = new ListaEnlazada(); listaEnlazada = new ListaEnlazada();
listaEnlazada.setTipo(listaEnlazadaTipos.getTipo()); listaEnlazada.setTipo(listaEnlazadaTipos.getTipo());
@ -142,6 +185,57 @@ public class ListaEnlazdaController implements Initializable {
listaEnlazadaCircular = new ListaEnlazadaCircular(); listaEnlazadaCircular = new ListaEnlazadaCircular();
listaEnlazadaCircular.setTipo(ListaEnlazadaTipos.SIMPLE); listaEnlazadaCircular.setTipo(ListaEnlazadaTipos.SIMPLE);
} }
}
/**
* Dibujarlo con una flecha.
*
* @param enlace Enlace: El enlace que tiene la llave y valor.
* @param sinFlecha boolean: Verdad si necesita dibujar una flecha.
*/
private void dibujarSimple(Enlace enlace, boolean sinFlecha) {
contenidoLista.getChildren().addAll(
Grafico.crearCaja(colores, String.valueOf(enlace.getLlave()), String.valueOf(enlace.getLlave()))
);
if (! sinFlecha) {
contenidoLista.getChildren().addAll(
Grafico.crearLineaVertical(),
Grafico.crearFlechaAbajo()
);
}
}
/**
* Dibujarlo con dos flechas.
*
* @param enlace Enlace: El enlace que tiene la llave y valor.
* @param primer boolean: Verdad si es el primer elemento de la lista.
*/
private void dibujarDoble(Enlace enlace, boolean primer) {
if (primer) {
contenidoLista.getChildren().addAll(
Grafico.crearFlechaArriba(),
Grafico.crearLineaVertical()
);
}
contenidoLista.getChildren().addAll(
Grafico.crearCaja(colores, String.valueOf(enlace.getLlave()), String.valueOf(enlace.getLlave())),
Grafico.crearFlechaArriba(),
Grafico.crearLineaVertical(),
Grafico.crearFlechaAbajo()
);
}
/**
* Vaciar la lista de todos los valores.
*/
@FXML
protected void botonVaciar() {
if (scene == null) {
initializeLista();
}
nuevaLista();
generarGrafico(); generarGrafico();
} }
@ -154,20 +248,7 @@ public class ListaEnlazdaController implements Initializable {
initializeLista(); initializeLista();
} }
String tipo; String tipo = getTipoString();
switch (listaEnlazadaTipos.getTipo()) {
case ListaEnlazadaTipos.SIMPLE:
tipo = "Simple";
break;
case ListaEnlazadaTipos.CIRCULAR:
tipo = "Circular";
break;
case ListaEnlazadaTipos.DOBLEMENTE_ENLAZADA:
tipo = "Doble";
break;
default:
tipo = "Simple";
}
// Mostrar el codigo // Mostrar el codigo
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();
@ -201,15 +282,7 @@ public class ListaEnlazdaController implements Initializable {
} }
} }
/** private String getTipoString() {
* Eliminar un valor de la lista si existe y mostrar el codigo en la pantalla.
*/
@FXML
protected void botonEliminar() {
if (scene == null) {
initializeLista();
}
String tipo; String tipo;
switch (listaEnlazadaTipos.getTipo()) { switch (listaEnlazadaTipos.getTipo()) {
case ListaEnlazadaTipos.SIMPLE: case ListaEnlazadaTipos.SIMPLE:
@ -224,6 +297,19 @@ public class ListaEnlazdaController implements Initializable {
default: default:
tipo = "Simple"; tipo = "Simple";
} }
return tipo;
}
/**
* Eliminar un valor de la lista si existe y mostrar el codigo en la pantalla.
*/
@FXML
protected void botonEliminar() {
if (scene == null) {
initializeLista();
}
String tipo = getTipoString();
// Mostrar el codigo // Mostrar el codigo
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/listaEnlazada" + tipo + "/eliminar")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/listaEnlazada" + tipo + "/eliminar")).useDelimiter("\\Z").next();
@ -267,20 +353,7 @@ public class ListaEnlazdaController implements Initializable {
initializeLista(); initializeLista();
} }
String tipo; String tipo = getTipoString();
switch (listaEnlazadaTipos.getTipo()) {
case ListaEnlazadaTipos.SIMPLE:
tipo = "Simple";
break;
case ListaEnlazadaTipos.CIRCULAR:
tipo = "Circular";
break;
case ListaEnlazadaTipos.DOBLEMENTE_ENLAZADA:
tipo = "Doble";
break;
default:
tipo = "Simple";
}
// Mostrar el codigo // Mostrar el codigo
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/listaEnlazada" + tipo + "/buscar")).useDelimiter("\\Z").next(); String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/listaEnlazada" + tipo + "/buscar")).useDelimiter("\\Z").next();
@ -315,98 +388,4 @@ public class ListaEnlazdaController implements Initializable {
Main.mostrarError(resourceBundle.getString("listaNoValor"), resourceBundle); Main.mostrarError(resourceBundle.getString("listaNoValor"), resourceBundle);
} }
} }
/**
* Crear una lista vacia.
*/
private void initializeLista() {
scene = contenidoLista.getScene();
grafico = new Grafico(scene);
listaEnlazadaTipos = (ListaEnlazadaTipos) scene.getUserData();
if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) {
listaEnlazada = new ListaEnlazada();
listaEnlazada.setTipo(listaEnlazadaTipos.getTipo());
}
else {
listaEnlazadaCircular = new ListaEnlazadaCircular();
listaEnlazadaCircular.setTipo(ListaEnlazadaTipos.SIMPLE);
}
}
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
grafico.removerDestacar();
colores = new Colores();
contenidoLista.getChildren().clear();
contenidoListaCircular.getChildren().clear();
if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) {
for (int i = 0; i < listaEnlazada.size(); i++) {
Enlace enlace = listaEnlazada.getIndice(i);
if (listaEnlazada.getTipo() == ListaEnlazadaTipos.SIMPLE) {
dibujarSimple(enlace, false);
}
else if (listaEnlazada.getTipo() == ListaEnlazadaTipos.DOBLEMENTE_ENLAZADA) {
if (i != listaEnlazada.size() - 1) {
dibujarDoble(enlace, (i == 0));
}
else {
dibujarSimple(enlace, false);
}
}
colores.siguinteColor();
}
}
else {
for (int i = 0; i < listaEnlazadaCircular.size(); i++) {
Enlace enlace = listaEnlazadaCircular.getIndice(i);
dibujarSimple(enlace, (i == listaEnlazadaCircular.size() - 1));
colores.siguinteColor();
}
if (listaEnlazadaCircular.size() > 0) {
contenidoListaCircular.getChildren().addAll(Grafico.crearLineaCircular(listaEnlazadaCircular.size()));
}
}
}
/**
* Dibujarlo con una flecha.
*
* @param enlace Enlace: El enlace que tiene la llave y valor.
* @param sinFlecha boolean: Verdad si necesita dibujar una flecha.
*/
private void dibujarSimple(Enlace enlace, boolean sinFlecha) {
contenidoLista.getChildren().addAll(
Grafico.crearCaja(colores, String.valueOf(enlace.getLlave()), String.valueOf(enlace.getLlave()))
);
if (!sinFlecha) {
contenidoLista.getChildren().addAll(
Grafico.crearLineaVertical(),
Grafico.crearFlechaAbajo()
);
}
}
/**
* Dibujarlo con dos flechas.
*
* @param enlace Enlace: El enlace que tiene la llave y valor.
* @param primer boolean: Verdad si es el primer elemento de la lista.
*/
private void dibujarDoble(Enlace enlace, boolean primer) {
if (primer) {
contenidoLista.getChildren().addAll(
Grafico.crearFlechaArriba(),
Grafico.crearLineaVertical()
);
}
contenidoLista.getChildren().addAll(
Grafico.crearCaja(colores, String.valueOf(enlace.getLlave()), String.valueOf(enlace.getLlave())),
Grafico.crearFlechaArriba(),
Grafico.crearLineaVertical(),
Grafico.crearFlechaAbajo()
);
}
} }

View File

@ -61,6 +61,38 @@ public class MenuController extends VBox implements Initializable {
); );
} }
/**
* Cargar el fxml, css y titulo.
*
* @param title String: El titulo de la escena.
* @param fxml String: El archivo de fxml.
* @param css String: El archivo de css.
* @param object Object: El objeto a pasar a la nueva escena.
*/
private void loadStage(String title, String fxml, String css, Object object) {
Scene scene = menuBar.getScene();
Stage stage = (Stage) scene.getWindow();
openFXML(fxml, scene, stage);
scene.getStylesheets().add(css);
scene.setUserData(object);
stage.setScene(scene);
stage.setTitle(this.resourceBundle.getString("titulo") + " - " + title);
}
private void openFXML(String fxml, Scene scene, Stage stage) {
try {
Parent parent = FXMLLoader.load(getClass().getResource(fxml), this.resourceBundle);
scene.setRoot(parent);
}
catch (IOException exception) {
// Este error es fatal, hay que cerrar la aplicación.
Logs.log(Level.SEVERE, "No se pudo abrir el archivo de fxml.");
stage.close();
}
}
/** /**
* Click en Array Ordenado. * Click en Array Ordenado.
*/ */
@ -87,6 +119,24 @@ public class MenuController extends VBox implements Initializable {
); );
} }
/**
* Cargar el fxml, css y titulo.
*
* @param title String: El titulo de la escena.
* @param fxml String: El archivo de fxml.
* @param css String: El archivo de css.
*/
private void loadStage(String title, String fxml, String css) {
Scene scene = menuBar.getScene();
Stage stage = (Stage) scene.getWindow();
openFXML(fxml, scene, stage);
scene.getStylesheets().add(css);
stage.setScene(scene);
stage.setTitle(this.resourceBundle.getString("titulo") + " - " + title);
}
/** /**
* Click en Inserción. * Click en Inserción.
*/ */
@ -254,6 +304,32 @@ public class MenuController extends VBox implements Initializable {
} }
} }
/**
* Cargar el fxml y css.
*
* @param fxml String: El archivo de fxml.
* @param css String: El archivo de css.
* @param resourceBundle ResourceBundle: El idioma nuevo para cambiarlo.
*/
private void loadStage(String fxml, String css, ResourceBundle resourceBundle) {
Scene scene = menuBar.getScene();
Stage stage = (Stage) scene.getWindow();
try {
Parent parent = FXMLLoader.load(getClass().getResource(fxml), resourceBundle);
scene.setRoot(parent);
}
catch (IOException exception) {
// Este error es fatal, hay que cerrar la aplicación.
Logs.log(Level.SEVERE, "No se pudo abrir el archivo de fxml.");
stage.close();
}
scene.getStylesheets().add(css);
stage.setScene(scene);
stage.setTitle(resourceBundle.getString("titulo"));
}
/** /**
* Click en Español. * Click en Español.
*/ */
@ -297,84 +373,4 @@ public class MenuController extends VBox implements Initializable {
Main.setIcon(dialog, getClass()); Main.setIcon(dialog, getClass());
dialog.show(); dialog.show();
} }
/**
* Cargar el fxml, css y titulo.
*
* @param title String: El titulo de la escena.
* @param fxml String: El archivo de fxml.
* @param css String: El archivo de css.
*/
private void loadStage(String title, String fxml, String css) {
Scene scene = menuBar.getScene();
Stage stage = (Stage) scene.getWindow();
try {
Parent parent = FXMLLoader.load(getClass().getResource(fxml), resourceBundle);
scene.setRoot(parent);
}
catch (IOException exception) {
// Este error es fatal, hay que cerrar la aplicación.
Logs.log(Level.SEVERE, "No se pudo abrir el archivo de fxml.");
stage.close();
}
scene.getStylesheets().add(css);
stage.setScene(scene);
stage.setTitle(resourceBundle.getString("titulo") + " - " + title);
}
/**
* Cargar el fxml y css.
*
* @param fxml String: El archivo de fxml.
* @param css String: El archivo de css.
* @param resourceBundle ResourceBundle: El idioma nuevo para cambiarlo.
*/
private void loadStage(String fxml, String css, ResourceBundle resourceBundle) {
Scene scene = menuBar.getScene();
Stage stage = (Stage) scene.getWindow();
try {
Parent parent = FXMLLoader.load(getClass().getResource(fxml), resourceBundle);
scene.setRoot(parent);
}
catch (IOException exception) {
// Este error es fatal, hay que cerrar la aplicación.
Logs.log(Level.SEVERE, "No se pudo abrir el archivo de fxml.");
stage.close();
}
scene.getStylesheets().add(css);
stage.setScene(scene);
stage.setTitle(resourceBundle.getString("titulo"));
}
/**
* Cargar el fxml, css y titulo.
*
* @param title String: El titulo de la escena.
* @param fxml String: El archivo de fxml.
* @param css String: El archivo de css.
* @param object Object: El objeto a pasar a la nueva escena.
*/
private void loadStage(String title, String fxml, String css, Object object) {
Scene scene = menuBar.getScene();
Stage stage = (Stage) scene.getWindow();
try {
Parent parent = FXMLLoader.load(getClass().getResource(fxml), resourceBundle);
scene.setRoot(parent);
}
catch (IOException exception) {
// Este error es fatal, hay que cerrar la aplicación.
Logs.log(Level.SEVERE, "No se pudo abrir el archivo de fxml.");
stage.close();
}
scene.getStylesheets().add(css);
scene.setUserData(object);
stage.setScene(scene);
stage.setTitle(resourceBundle.getString("titulo") + " - " + title);
}
} }

View File

@ -7,7 +7,6 @@ import javafx.scene.layout.HBox;
import javafx.scene.text.Text; import javafx.scene.text.Text;
import java.net.URL; import java.net.URL;
import java.util.Random;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.Scanner; import java.util.Scanner;
@ -51,6 +50,7 @@ public class MergeController implements Initializable {
* @param resourceBundle ResourceBundle: Tiene datos de idioma. * @param resourceBundle ResourceBundle: Tiene datos de idioma.
*/ */
@Override @Override
@SuppressWarnings("Duplicates")
public void initialize(URL location, ResourceBundle resourceBundle) { public void initialize(URL location, ResourceBundle resourceBundle) {
this.resourceBundle = resourceBundle; this.resourceBundle = resourceBundle;
@ -58,21 +58,12 @@ public class MergeController implements Initializable {
Colores colores = new Colores(); Colores colores = new Colores();
Random random = new Random();
int maximo = 99;
int minimo = 0;
int rango = maximo - minimo + 1;
array = new Array(10); array = new Array(10);
array.setOrdered(true); array.setOrdered(true);
array.llenar();
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
int numero = random.nextInt(rango) + minimo; contenidoMerge.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i), String.valueOf(array.getIndice(i))));
while (array.buscar(numero) != -1) {
numero = random.nextInt(rango) + minimo;
}
array.insertar(numero);
contenidoMerge.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i), String.valueOf(numero)));
colores.siguinteColor(); colores.siguinteColor();
} }
} }
@ -86,24 +77,28 @@ public class MergeController implements Initializable {
initializeScene(); initializeScene();
} }
array = new Array(10); array.nuevo();
array.setOrdered(true); array.llenar();
Random random = new Random();
int maximo = 99;
int minimo = 0;
int rango = maximo - minimo + 1;
for (int i = array.size(); i < 10; i++) {
int numero = random.nextInt(rango) + minimo;
while (array.buscar(numero) != -1) {
numero = random.nextInt(rango) + minimo;
}
array.insertar(numero);
}
generarGrafico(); generarGrafico();
} }
/**
* Crear el array de tamaño 10.
*/
private void initializeScene() {
scene = contenidoMerge.getScene();
}
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
for (int i = 0; i < 10; i++) {
Text text = (Text) scene.lookup("#texto_" + String.valueOf(i));
text.setText(array.getIndice(i));
}
}
/** /**
* Ordenarlo paso por paso. * Ordenarlo paso por paso.
*/ */
@ -143,21 +138,4 @@ public class MergeController implements Initializable {
generarGrafico(); generarGrafico();
} }
/**
* Crear el array de tamaño 10.
*/
private void initializeScene() {
scene = contenidoMerge.getScene();
}
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
for (int i = 0; i < 10; i++) {
Text text = (Text) scene.lookup("#texto_" + String.valueOf(i));
text.setText(array.getIndice(i));
}
}
} }

View File

@ -1,5 +1,7 @@
package cl.cromer.estructuras; package cl.cromer.estructuras;
import java.util.Random;
/** /**
* Crear una estructura de dato de tipo pila. * Crear una estructura de dato de tipo pila.
* *
@ -24,39 +26,6 @@ final public class Pila {
size = 0; size = 0;
} }
/**
* Devolver la cantidad de elementos en la pila.
*
* @return int: La cantidad de elementos.
*/
public int size() {
return size;
}
/**
* Push un valor en la pila encima.
*
* @param valor int: El valor a push.
*/
public void push(int valor) {
if (this.pila != null) {
String pila[] = new String[this.pila.length + 1];
int i;
for (i = 0; i < this.pila.length; i++) {
pila[i] = this.pila[i];
}
pila[i] = String.valueOf(valor);
this.pila = pila;
size++;
}
else {
String pila[] = new String[1];
pila[0] = String.valueOf(valor);
this.pila = pila;
size++;
}
}
/** /**
* Pop un valor de encima de la pila. * Pop un valor de encima de la pila.
* *
@ -75,6 +44,15 @@ final public class Pila {
} }
} }
/**
* Devolver la cantidad de elementos en la pila.
*
* @return int: La cantidad de elementos.
*/
public int size() {
return size;
}
/** /**
* Peek al valor que está encima de la pila. * Peek al valor que está encima de la pila.
* *
@ -103,4 +81,44 @@ final public class Pila {
return null; return null;
} }
} }
/**
* Llenar la pila con valores al azar.
*/
@SuppressWarnings("Duplicates")
public void llenar() {
Random random = new Random();
int maximo = 99;
int minimo = 0;
int rango = maximo - minimo + 1;
for (int i = size(); i < 10; i++) {
int numero = random.nextInt(rango) + minimo;
push(numero);
}
}
/**
* Push un valor en la pila encima.
*
* @param valor int: El valor a push.
*/
public void push(int valor) {
if (this.pila != null) {
String pila[] = new String[this.pila.length + 1];
int i;
for (i = 0; i < this.pila.length; i++) {
pila[i] = this.pila[i];
}
pila[i] = String.valueOf(valor);
this.pila = pila;
size++;
}
else {
String pila[] = new String[1];
pila[0] = String.valueOf(valor);
this.pila = pila;
size++;
}
}
} }

View File

@ -7,7 +7,6 @@ import javafx.scene.layout.VBox;
import javafx.scene.text.Text; import javafx.scene.text.Text;
import java.net.URL; import java.net.URL;
import java.util.Random;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.Scanner; import java.util.Scanner;
import java.util.logging.Level; import java.util.logging.Level;
@ -87,18 +86,21 @@ public class PilaController implements Initializable {
grafico = new Grafico(scene); grafico = new Grafico(scene);
} }
Random random = new Random(); pila.llenar();
int maximo = 99;
int minimo = 0;
int rango = maximo - minimo + 1;
for (int i = pila.size(); i < 10; i++) {
int numero = random.nextInt(rango) + minimo;
pila.push(numero);
}
generarGrafico(); generarGrafico();
} }
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
grafico.removerDestacar();
for (int i = 0; i < 10; i++) {
Text text = (Text) scene.lookup("#texto_" + String.valueOf(i));
text.setText(pila.getIndice(i));
}
}
/** /**
* Vaciar la pila de todos los valores. * Vaciar la pila de todos los valores.
*/ */
@ -201,15 +203,4 @@ public class PilaController implements Initializable {
Main.mostrarError(resourceBundle.getString("pilaVacia"), resourceBundle); Main.mostrarError(resourceBundle.getString("pilaVacia"), resourceBundle);
} }
} }
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
grafico.removerDestacar();
for (int i = 0; i < 10; i++) {
Text text = (Text) scene.lookup("#texto_" + String.valueOf(i));
text.setText(pila.getIndice(i));
}
}
} }

View File

@ -7,7 +7,6 @@ import javafx.scene.layout.HBox;
import javafx.scene.text.Text; import javafx.scene.text.Text;
import java.net.URL; import java.net.URL;
import java.util.Random;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.Scanner; import java.util.Scanner;
@ -51,6 +50,7 @@ public class QuickController implements Initializable {
* @param resourceBundle ResourceBundle: Tiene datos de idioma. * @param resourceBundle ResourceBundle: Tiene datos de idioma.
*/ */
@Override @Override
@SuppressWarnings("Duplicates")
public void initialize(URL location, ResourceBundle resourceBundle) { public void initialize(URL location, ResourceBundle resourceBundle) {
this.resourceBundle = resourceBundle; this.resourceBundle = resourceBundle;
@ -58,21 +58,12 @@ public class QuickController implements Initializable {
Colores colores = new Colores(); Colores colores = new Colores();
Random random = new Random();
int maximo = 99;
int minimo = 0;
int rango = maximo - minimo + 1;
array = new Array(10); array = new Array(10);
array.setOrdered(true); array.setOrdered(true);
array.llenar();
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
int numero = random.nextInt(rango) + minimo; contenidoQuick.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i), String.valueOf(array.getIndice(i))));
while (array.buscar(numero) != -1) {
numero = random.nextInt(rango) + minimo;
}
array.insertar(numero);
contenidoQuick.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i), String.valueOf(numero)));
colores.siguinteColor(); colores.siguinteColor();
} }
} }
@ -86,24 +77,28 @@ public class QuickController implements Initializable {
initializeScene(); initializeScene();
} }
array = new Array(10); array.nuevo();
array.setOrdered(true); array.llenar();
Random random = new Random();
int maximo = 99;
int minimo = 0;
int rango = maximo - minimo + 1;
for (int i = array.size(); i < 10; i++) {
int numero = random.nextInt(rango) + minimo;
while (array.buscar(numero) != -1) {
numero = random.nextInt(rango) + minimo;
}
array.insertar(numero);
}
generarGrafico(); generarGrafico();
} }
/**
* Crear el array de tamaño 10.
*/
private void initializeScene() {
scene = contenidoQuick.getScene();
}
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
for (int i = 0; i < 10; i++) {
Text text = (Text) scene.lookup("#texto_" + String.valueOf(i));
text.setText(array.getIndice(i));
}
}
/** /**
* Ordenarlo paso por paso. * Ordenarlo paso por paso.
*/ */
@ -143,21 +138,4 @@ public class QuickController implements Initializable {
generarGrafico(); generarGrafico();
} }
/**
* Crear el array de tamaño 10.
*/
private void initializeScene() {
scene = contenidoQuick.getScene();
}
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
for (int i = 0; i < 10; i++) {
Text text = (Text) scene.lookup("#texto_" + String.valueOf(i));
text.setText(array.getIndice(i));
}
}
} }

View File

@ -7,7 +7,6 @@ import javafx.scene.layout.HBox;
import javafx.scene.text.Text; import javafx.scene.text.Text;
import java.net.URL; import java.net.URL;
import java.util.Random;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.Scanner; import java.util.Scanner;
@ -51,6 +50,7 @@ public class SeleccionController implements Initializable {
* @param resourceBundle ResourceBundle: Tiene datos de idioma. * @param resourceBundle ResourceBundle: Tiene datos de idioma.
*/ */
@Override @Override
@SuppressWarnings("Duplicates")
public void initialize(URL location, ResourceBundle resourceBundle) { public void initialize(URL location, ResourceBundle resourceBundle) {
this.resourceBundle = resourceBundle; this.resourceBundle = resourceBundle;
@ -58,22 +58,13 @@ public class SeleccionController implements Initializable {
Colores colores = new Colores(); Colores colores = new Colores();
Random random = new Random();
int maximo = 99;
int minimo = 0;
int rango = maximo - minimo + 1;
array = new Array(10); array = new Array(10);
array.setOrdered(true); array.setOrdered(true);
array.llenar();
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
int numero = random.nextInt(rango) + minimo; contenidoSeleccion.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i), String.valueOf(array.getIndice(i))));
while (array.buscar(numero) != -1) { colores.siguinteColor();
numero = random.nextInt(rango) + minimo;
}
array.insertar(numero);
contenidoSeleccion.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i), String.valueOf(numero)));
colores.siguinteColor();
} }
} }
@ -86,25 +77,29 @@ public class SeleccionController implements Initializable {
initializeScene(); initializeScene();
} }
array = new Array(10); array.nuevo();
array.setOrdered(true); array.llenar();
generarGrafico();
Random random = new Random();
int maximo = 99;
int minimo = 0;
int rango = maximo - minimo + 1;
for (int i = array.size(); i < 10; i++) {
int numero = random.nextInt(rango) + minimo;
while (array.buscar(numero) != -1) {
numero = random.nextInt(rango) + minimo;
}
array.insertar(numero);
}
generarGrafico();
} }
/** /**
* Crear el array de tamaño 10.
*/
private void initializeScene() {
scene = contenidoSeleccion.getScene();
}
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
for (int i = 0; i < 10; i++) {
Text text = (Text) scene.lookup("#texto_" + String.valueOf(i));
text.setText(array.getIndice(i));
}
}
/**
* Ordenarlo paso por paso. * Ordenarlo paso por paso.
*/ */
@FXML @FXML
@ -143,21 +138,4 @@ public class SeleccionController implements Initializable {
generarGrafico(); generarGrafico();
} }
/**
* Crear el array de tamaño 10.
*/
private void initializeScene() {
scene = contenidoSeleccion.getScene();
}
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
for (int i = 0; i < 10; i++) {
Text text = (Text) scene.lookup("#texto_" + String.valueOf(i));
text.setText(array.getIndice(i));
}
}
} }

View File

@ -7,7 +7,6 @@ import javafx.scene.layout.HBox;
import javafx.scene.text.Text; import javafx.scene.text.Text;
import java.net.URL; import java.net.URL;
import java.util.Random;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.Scanner; import java.util.Scanner;
@ -47,10 +46,11 @@ public class ShellController 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
@SuppressWarnings("Duplicates")
public void initialize(URL location, ResourceBundle resourceBundle) { public void initialize(URL location, ResourceBundle resourceBundle) {
this.resourceBundle = resourceBundle; this.resourceBundle = resourceBundle;
@ -58,22 +58,13 @@ public class ShellController implements Initializable {
Colores colores = new Colores(); Colores colores = new Colores();
Random random = new Random();
int maximo = 99;
int minimo = 0;
int rango = maximo - minimo + 1;
array = new Array(10); array = new Array(10);
array.setOrdered(true); array.setOrdered(true);
array.llenar();
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
int numero = random.nextInt(rango) + minimo; contenidoShell.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i), String.valueOf(array.getIndice(i))));
while (array.buscar(numero) != -1) { colores.siguinteColor();
numero = random.nextInt(rango) + minimo;
}
array.insertar(numero);
contenidoShell.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i), String.valueOf(numero)));
colores.siguinteColor();
} }
} }
@ -86,25 +77,29 @@ public class ShellController implements Initializable {
initializeScene(); initializeScene();
} }
array = new Array(10); array.nuevo();
array.setOrdered(true); array.llenar();
generarGrafico();
Random random = new Random();
int maximo = 99;
int minimo = 0;
int rango = maximo - minimo + 1;
for (int i = array.size(); i < 10; i++) {
int numero = random.nextInt(rango) + minimo;
while (array.buscar(numero) != -1) {
numero = random.nextInt(rango) + minimo;
}
array.insertar(numero);
}
generarGrafico();
} }
/** /**
* Crear el array de tamaño 10.
*/
private void initializeScene() {
scene = contenidoShell.getScene();
}
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
for (int i = 0; i < 10; i++) {
Text text = (Text) scene.lookup("#texto_" + String.valueOf(i));
text.setText(array.getIndice(i));
}
}
/**
* Ordenarlo paso por paso. * Ordenarlo paso por paso.
*/ */
@FXML @FXML
@ -143,21 +138,4 @@ public class ShellController implements Initializable {
generarGrafico(); generarGrafico();
} }
/**
* Crear el array de tamaño 10.
*/
private void initializeScene() {
scene = contenidoShell.getScene();
}
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
for (int i = 0; i < 10; i++) {
Text text = (Text) scene.lookup("#texto_" + String.valueOf(i));
text.setText(array.getIndice(i));
}
}
} }