2017
Desarrollo de colas en java
EQUIPO:
ALEXIS LEYVA CABRERA PATRICIO BLANCO TOLENTINO
ALEXIS MARTNEZ LEZAMA
UTIM | Universidad Tecnolgicas de Izcar de Matamoros
Tabla de contenido
Contenido
Introduccin ........................................................................................................................................ 3
Desarrollo ............................................................................................................................................ 6
Clase Nodo .......................................................................................................................................... 6
Clase main ........................................................................................................................................... 6
Clase cola ............................................................................................................................................ 7
Clase Sample ....................................................................................................................................... 8
Clase controller ................................................................................................................................. 11
Pruebas ............................................................................................................................................. 13
Conclusin ......................................................................................................................................... 20
Referencias........................................................................................................................................ 20
Introduccin
Los elementos de la cola se aaden y se eliminan de tal manera que el primero en
entrar es el primero en salir. La adicin de elementos se realiza a travs de una
operacin llamada encolar (enqueue), mientras que la eliminacin se denomina
desencolar (dequeue). La operacin de encolar inserta elementos por un extremo
de la cola, mientras que la de desencolar los elimina por el otro.
En las siguientes pginas encontrarn la realizacin del proyecto de colas:
Primero lo que realizamos de este proyecto fue crear las diferentes clases que
iban a tener nuestro cdigo como la interfaz que iba a ir en sample.
Cola
Controller
Main
Nodo
Al tener ya las clases lo subimos al repositorio que creo mi compaero en el cual
cada integrante del equipo bamos a subir nuestra parte que nos tocaba agregar.
En el cual bamos a subirlo al repositorio github.com en donde hay bamos a
descargar el archivo con las clases para empezar a realizar nuestras partes a
realizar.
En el cual cada quien iba a realizar su parte en una rama diferente ya que para
mayor precaucin y responsabilidad realizamos en una rama diferente para as si
tenamos alguna falla poder regresar el archivo al anterior y as no daar la rama
master que es la rama principal.
En la clase simple tenemos ya realizada lo que es la interfaz que es donde
deberamos de partir.
En el cual a cada Button y a cada TextFiel le debemos agregar un ID, en el cual
ese nos iba ayudar a identificarlos.
En el cual a los Button los identificamos con la terminacin al final Btn y a lo
TextFiel los identificamos como un Txt
Desarrollo
Clases de nuestro programa ya comentados.
Clase Nodo
package sample;
public class Nodo {
private int valor;//Valor que da el usuario al elemento
private Nodo proximo;//Apunta al siguiente
//Constructor inicializa sin valor public Nodo(){
this.valor=0; this.proximo=null;
}
//Constructor
public Nodo(int valor){
this.valor=valor;
this.proximo=null;
}
//Getters y Setters del valor que da el usuario a nuestro puntero.
public void setValor(int valor){this.valor=valor;} public void
setProx(Nodo siguiente){this.proximo=siguiente;} public int
getValor(){ return this.valor;
}
public Nodo getProx(){
return this.proximo;
}
}
Clase main
package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader; import
javafx.scene.Parent; import
javafx.scene.Scene; import
javafx.stage.Stage;
//Clase principal que manda a traer nuestro programa.
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Colas");
primaryStage.setScene(new Scene(root, 1000, 600));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Clase cola
package sample;
public class Cola {
private Nodo frente; //el inicial de la cola
private int tamao;//Llevara el control del tamao de nuestra cola public
boolean vacia(){return frente==null;}//Verifica si nuestra cola tiene valores
public int getTamao(){ return tamao;}//Devuelve el tamao de la cola
//constructor simple
public Cola() {
frente= null;
tamao = 0;
}
//Mtodo para insertar siguiente elemento(nodo), el elemento debe colocarse
detras del ltimo nodo public void insertar(int valor){ Nodo
nuevo=new Nodo(valor);
if(frente==null){//Coloca nuestra insercin como frente
frente=nuevo;
}else{
Nodo temp=frente;
while(temp.getProx()!=null){
temp=temp.getProx();//Recorre la cola
}
temp.setProx(nuevo);//Coloca nuestra insercin despus del ltimo
elemento }
tamao++;//Aumenta la cola
}
//Mtodo para mostrar los elementos de la cola
public void mostrar(){ if( frente !=
null){ Nodo temp= frente;
while(temp!= null){
System.out.println(temp.getValor());
temp= temp.getProx();
}
}else{
System.out.println("La cola est vaca.");
}
}
//Mtodo para extraer el elemento del frente
public int extraer(){
if(frente == null){//Si no tiene valores
return 0; }else{
tamao--;//Decementa nuestra cola
int valorExtraer= frente.getValor(); //variable temporal
frente = frente.getProx(); //cambiar el frente por el siguiente
return valorExtraer; //devolver el valor extrado de la cola
}
}
public String vaciarLista(){//Vaca nuestra cola
if(!vacia()){//Si la cola tiene valores
frente=null;//Borra los elementos de cola
tamao=0;//Tamao toma el valor de 0.
return "La cola ha sido vaciada"; }else{//La
cola no tiene valores return "La cola no
tiene valores";
}
}
public String buscarXValor(int valor){//Buscamos por valor en la cola
if(!vacia()){//Si la cola tiene valores entra al ciclo int i
=1;//Empieza nuestra conteo en 1
Nodo temp=frente;//Temporal que almacena nuestra cola
if(valor==frente.getValor()){//Si el elemento es el primero
return "El valor "+valor+" se ubica en el lugar "+i; }else{//Si el
elemento esta despus del primero
while(temp!= null){//Hasta que ya no tenga valores la cola
if(valor==temp.getValor()){ return "El valor de
"+valor+ " es igual a :"+i;
}
i++;//Incrementa el contador
temp= temp.getProx();//Recorre la cola con ayuda del temporal
}
}
}return"Valor no encontrado";
}
Clase Sample
<?xml version="1.0" encoding="UTF-8"?> <?import
javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<!--Interfaz grfica de nuestra aplicacin-->
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
minWidth="-Infinity" prefHeight="600.0" prefWidth="1000.0" style="-fx-
backgroundcolor: #fffff;" xmlns="http://javafx.com/javafx/8.0.112"
xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
<children>
<VBox prefHeight="600.0" prefWidth="1000.0">
<children>
<Label alignment="CENTER" prefHeight="100.0" prefWidth="1000.0"
text="Manipulacin de colas" textFill="#1a2ea1">
<padding>
<Insets left="40.0" />
</padding>
<font>
<Font name="AngsanaUPC" size="36.0" />
</font>
</Label>
<HBox fx:id="contenedorPrincipal" prefHeight="206.0"
prefWidth="1000.0">
<children>
<ImageView fx:id="imagen" fitHeight="206.0"
fitWidth="123.0" pickOnBounds="true">
<HBox.margin>
<Insets bottom="10.0" left="10.0" right="10.0"
top="10.0" />
</HBox.margin>
<image>
<Image url="@Museum-icon.png" />
</image></ImageView>
<ScrollPane hbarPolicy="ALWAYS" pannable="true" prefHeight="106.0"
prefWidth="445.0">
<HBox fx:id="cola1" prefHeight="88.0" maxWidth="Infinity">
<HBox.margin>
<Insets />
</HBox.margin>
<children>
</children>
</HBox>
<HBox.margin>
<Insets left="10.0" top="120.0" />
</HBox.margin>
</ScrollPane>
</children>
</HBox>
<HBox prefHeight="69.0" prefWidth="1000.0">
<children>
<Label fx:id="resultado" text="Resulltados"
textFill="#1a2ea1">
<HBox.margin>
<Insets left="350.0" top="20.0" />
</HBox.margin>
<font>
<Font name="AngsanaUPC Bold" size="24.0" />
</font></Label>
</children>
</HBox>
<GridPane prefHeight="133.0" prefWidth="1000.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0"
prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0"
prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0"
prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0"
vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0"
vgrow="SOMETIMES" />
</rowConstraints>
<children>
<TextField fx:id="insertarTxt" promptText="Ingrese
nmero" GridPane.columnIndex="1">
<GridPane.margin>
<Insets bottom="10.0" left="10.0" right="10.0"
top="10.0" />
</GridPane.margin></TextField>
<Button fx:id="insertar" mnemonicParsing="false"
prefHeight="25.0" prefWidth="60.0" text="Insertar" GridPane.columnIndex="2" />
<TextField fx:id="buscarTxt" prefHeight="22.0"
prefWidth="313.0" promptText="Ingrese nmero" GridPane.columnIndex="1"
GridPane.rowIndex="1">
<GridPane.margin>
<Insets bottom="10.0" left="10.0" right="10.0"
top="10.0" />
</GridPane.margin></TextField>
<Label text="Nmero que desea insertar:">
<GridPane.margin>
<Insets left="100.0" />
</GridPane.margin>
<font>
<Font size="18.0" />
</font></Label>
<Label text="Valor que desea encontrar:"
GridPane.rowIndex="1">
<GridPane.margin>
<Insets left="100.0" />
</GridPane.margin>
<font>
<Font size="18.0" />
</font></Label>
<Button fx:id="buscar" mnemonicParsing="false"
prefHeight="25.0" prefWidth="60.0" text="Buscar" GridPane.columnIndex="2"
GridPane.rowIndex="1" />
</children>
</GridPane>
<HBox prefHeight="126.0" prefWidth="1000.0">
<children>
<Button fx:id="extraer" mnemonicParsing="false"
prefHeight="25.0" prefWidth="60.0" text="Extraer">
<HBox.margin>
<Insets left="430.0" top="20.0" />
</HBox.margin>
</Button>
<Button fx:id="vaciar" mnemonicParsing="false"
prefHeight="25.0" prefWidth="60.0" text="Vaciar">
<HBox.margin>
<Insets left="10.0" top="20.0" />
</HBox.margin>
</Button>
<Button fx:id="tamao" mnemonicParsing="false"
prefHeight="25.0" prefWidth="60.0" text="Tamao">
<HBox.margin>
<Insets left="10.0" top="20.0" />
</HBox.margin>
</Button>
</children>
</HBox>
</children></VBox>
</children>
</AnchorPane>
Clase controller
package sample;
import javafx.event.ActionEvent; import
javafx.event.EventHandler; import
javafx.fxml.FXML; import
javafx.fxml.Initializable; import
javafx.scene.control.*; import
javafx.scene.image.Image; import
javafx.scene.image.ImageView; import
javafx.scene.layout.HBox; import javax.swing.*;
import java.net.URL; import
java.util.ResourceBundle; import static
java.lang.Integer.parseInt; public class
Controller implements Initializable{
@FXML
Button insertar, extraer, tamao, vaciar, buscar;
@FXML
TextField insertarTxt, buscarTxt;
@FXML
HBox cola1;
@FXML
Label resultado;
public Cola cola= new Cola();//Creamos instancia de la clase cola para poder
utilizar sus mtodos
public ImageView imagen(){//Mtodo que permite mandar la imagen a donde se
requiera solo con su nombre.
Image image = new Image("sample/95790.png");//Convertimos nuestra imagen
en instancia
ImageView iv1=new ImageView();//La imagen anterior se alojara en este
objeto iv1.
iv1.setFitHeight(60);//Altura de la imagen
iv1.setFitWidth(30);//Anchura de la imagen
iv1.setImage(image);//Colocamos el objeto imagen el control ImageView
return iv1;//Retornamos el control con ImageView con la imagen
}
Alert alert = new Alert(Alert.AlertType.ERROR);//Mandamos a traer la clase
Alert
@Override
public void initialize(URL location, ResourceBundle resources) {
this.insertar.setOnAction(new EventHandler<ActionEvent>( ) {//Evento click
de insertar @Override
public void handle(ActionEvent event) {
try {//Amortiguador de errores de este evento
if (cola.getTamao( ) < 15) {//Establecemos un lmite en las
inserciones de 15
int valor = parseInt(insertarTxt.getText(
));//Convertimos lo que manda el usuario a entero
cola.insertar(valor);//Mandamos lo que inserto el usuario
a la clase cola
//Creamos un label para almacenar el nmero insertado con
su imagen
Label label = new Label( );
label.maxWidth(50);
label.setText(insertarTxt.getText( ));
//Creamos un hbox para almacenar nuestra imagen con su
nmero de insertado
HBox hBox = new HBox(5);
hBox.prefWidth(40);
label.maxWidth(50); hBox.getChildren(
).add(label); hBox.getChildren(
).add(imagen( ));
cola1.getChildren( ).add(hBox);//Colocamos el hbox en el
contenedor cola1.
resultado.setText("Usted a insertado la cantidad: " +
valor);//Mandamos mensaje al usuario en label resultado
insertarTxt.setText("");//Vaciamos nuestro TextField
} else {//Mandamos mensaje al usuario en alert tipo error
alert.setTitle("Cuadro de Error");
alert.setHeaderText("Error");
alert.setContentText("A superado el lmite de inserciones
");
alert.showAndWait();
}
}catch (Exception e){//Mandamos mensaje al usuario en alert tipo
error
alert.setTitle("Cuadro de Error");
alert.setHeaderText("Error");
alert.setContentText("Inserte un valor nmerico en el
recuadro");
alert.showAndWait();
}
}
});
this.extraer.setOnAction(new EventHandler<ActionEvent>( ) {//Evento click
de extraer
@Override
public void handle(ActionEvent event) {
try {//Amortiguador de errores de este evento
cola1.getChildren( ).remove(0);//Removemos el primer elemento
del hbox resultado.setText("sted extrajo la cantidad:
"+String.valueOf(cola.extraer( )));//Mandamos mensaje al usuario en label
resultado
}catch (Exception e){//Mandamos mensaje al usuario en alert tipo
error
alert.setTitle("Cuadro de informacin");
alert.setHeaderText("Informacin");
alert.setContentText("La cola no tiene elementos que
extraer");
alert.showAndWait();
}
}
});
this.tamao.setOnAction(new EventHandler<ActionEvent>( ) {//Evento click
de tamao
@Override
public void handle(ActionEvent event) {
resultado.setText("El tamao de la cola es: "+
cola.getTamao());//Mandamos mensaje al usuario en label resultado
}
});
this.vaciar.setOnAction(new EventHandler<ActionEvent>( ) {//Evento click
de vaciar
@Override
public void handle(ActionEvent event) {
cola1.getChildren().clear();//Limpiamos el contenedor principal
System.gc();//Llamamos a la papelera
resultado.setText(cola.vaciarLista());//Mandamos mensaje al
usuario en label resultado
}
});
this.buscar.setOnAction(new EventHandler<ActionEvent>( ) {//Evento click
de buscar
@Override
public void handle(ActionEvent event) {
try {//Amortiguador de errores de este evento
int buscar=parseInt(buscarTxt.getText());//Convertimos lo que
manda el usuario a entero
cola.buscarXValor(buscar);//Mandamos el valor que queremos
buscar a la clase cola
resultado.setText(cola.buscarXValor(buscar));//Mandamos
mensaje al usuario en label resultado
buscarTxt.setText("");//Vaciamos nuestro TextField
}catch (Exception e){//Mandamos mensaje al usuario en alert tipo error
alert.setTitle("Cuadro de Error");
alert.setHeaderText("Error");
alert.setContentText("Inserte un valor nmerico en el
recuadro");
alert.showAndWait();
}
}
});
}
}
Pruebas
Interfaz
Insertar nmeros
Vaciar
Buscar
Tamao
Extraer
El tamao de la pila era de 7 al momento de dar clic en extraer lo que hace es
extraer el primero. Que era la cantidad de 1.
Ya que su motivo es que descolan ya pasa su turno uno de los ejemplos ms claros
podra ser una fila de tortillas al momento de formarse los primeros que salen son
los de adelante ya que dan paso al siguiente y as sucesivamente el que descola
es el primero
El tamao de la cola era de 8 al momento darle extraer elimina al primero que era
el nmero 434.
Mensaje de error
Conclusin
En la presente semana realizamos una pequea aplicacin en javafx con la finalidad de mostrar el
funcionamiento de cola.
Implementamos las clases nodo y la clase cola para poder realizar el funcionamiento de la aplicacin.
Recordando lo aprendido en la clase por el docente el cual nos explic que en una cola el primer
elemento en ingresar es el primero en salir a diferencia de las pilas donde el primero elemento en
entrar es el ltimo en salir.
Aprendimos a implementar los diferentes mtodos que se pueden implementar en una cola como
es el mtodo de insertar este mtodo lo implementamos en la clase cola.java donde el element
que insertamos es igual a un nuevo nodo.
De igual manera realizamos el mtodo Extraer en el cual se realizaba la extraccin del primero
elemento al entrar en la cola.
Tambin se implementaron los mtodos para mostrar los elementos de la cola, mtodo para vaciar
la cola, y el mtodo para buscar algn elemento en la cola.
Todo el funcionamiento de la cola lo representamos en una interfaz grfica para comprender
mejor el funcionamiento de esta.
La actividad que se realiz nos ayud a fortalecer nuestros conocimientos y aprender cosas nuevas,
me gusto que realizramos esta actividad en javafx ya que nos ayud y quedo claro el concepto de
cola y en cmo se implementa.
Referencias
codigofacilito. (21 de 11 de 2017). Obtenido de codigofacilito:
https://codigofacilito.com/videos/tutorial_de_colas_en_java
Roldn, . (21 de 11 de 2017). Ciberaula. Obtenido de Ciberaula:
http://www.ciberaula.com/articulo/colas_en_java
torres, M. (17 de 11 de 2017). Michelletorres.mx. Obtenido de Michelletorres.mx:
http://michelletorres.mx/colas/