1+ import java .util .Scanner ;
2+ import java .util .Stack ;
3+ import java .util .LinkedList ;
4+ import java .util .Queue ;
5+
6+ public class TofeDev {
7+ /* EJERCICIO:
8+ * Implementa los mecanismos de introducción y recuperación de elementos propios de las
9+ * pilas (stacks - LIFO) y las colas (queue - FIFO) utilizando una estructura de array
10+ * o lista (dependiendo de las posibilidades de tu lenguaje).
11+ *
12+ * DIFICULTAD EXTRA (opcional):
13+ * - Utilizando la implementación de pila y cadenas de texto, simula el mecanismo adelante/atrás
14+ * de un navegador web. Crea un programa en el que puedas navegar a una página o indicarle
15+ * que te quieres desplazar adelante o atrás, mostrando en cada caso el nombre de la web.
16+ * Las palabras "adelante", "atrás" desencadenan esta acción, el resto se interpreta como
17+ * el nombre de una nueva web.
18+ * - Utilizando la implementación de cola y cadenas de texto, simula el mecanismo de una
19+ * impresora compartida que recibe documentos y los imprime cuando así se le indica.
20+ * La palabra "imprimir" imprime un elemento de la cola, el resto de palabras se
21+ * interpretan como nombres de documentos.
22+ */
23+ public class Navegador {
24+
25+ public static void main (String [] args ) {
26+ stackNavegacion ();
27+ }
28+
29+ public static void stackNavegacion () {
30+ Stack <String > historial = new Stack <>();
31+ Scanner scan = new Scanner (System .in );
32+ int pointerIndex = 0 ;
33+
34+ while (true ) {
35+ if (!historial .isEmpty ()) {
36+ System .out .println ("---------------------------" );
37+ historial .forEach (h -> System .out .printf ("%s | " , h ));
38+ System .out .println ("\n " + "---------------------------" );
39+ System .out .print ("Ingrese la 'página' o 'adelante' para avanzar, 'atras' para retroceder, o 'salir' para finalizar: " );
40+ } else {
41+ System .out .println ("Ingrese la página a visitar: " );
42+ }
43+
44+ String comando = scan .next ();
45+
46+ switch (comando ) {
47+ case "adelante" :
48+ if (pointerIndex < historial .size () - 1 ) {
49+ pointerIndex ++;
50+ System .out .printf ("Visualizando la página %s\n \n " , historial .get (pointerIndex ));
51+ } else {
52+ System .out .println ("No hay más historial hacia adelante\n \n " );
53+ }
54+ break ;
55+
56+ case "atras" :
57+ if (pointerIndex > 0 ) {
58+ pointerIndex --;
59+ System .out .printf ("Visualizando la página %s\n \n " , historial .get (pointerIndex ));
60+ } else {
61+ System .out .println ("No hay más historial hacia atrás\n \n " );
62+ }
63+ break ;
64+
65+ case "salir" :
66+ System .out .println ("Saliendo del navegador" );
67+ scan .close ();
68+ System .exit (0 );
69+ break ;
70+
71+ default :
72+ System .out .printf ("Visualizando la página %s\n \n " , comando );
73+ historial .add (comando );
74+ pointerIndex = historial .size () - 1 ;
75+ break ;
76+ }
77+ }
78+ }
79+ }
80+
81+ public class Impresora {
82+
83+ public static void main (String [] args ) {
84+ colaImpresora ();
85+ }
86+
87+ public static void colaImpresora () {
88+ Queue <String > porImprimir = new LinkedList <>();
89+ Scanner scanner = new Scanner (System .in );
90+
91+ System .out .println ("******************************************************************" );
92+ System .out .println ("Ingrese 'agregar' para agregar un archivo a la cola de impresión" );
93+ System .out .println ("Ingrese 'imprimir' para empezar a imprimir un documento de la cola" );
94+ System .out .println ("Ingrese 'mostrar' para mostrar todos los documentos en la cola" );
95+ System .out .println ("Ingrese 'salir' para finalizar" );
96+ System .out .println ("******************************************************************" );
97+
98+ while (true ) {
99+ System .out .print ("Acción a realizar: " );
100+ String comando = scanner .next ();
101+
102+ switch (comando ) {
103+ case "mostrar" :
104+ System .out .println ("-----------------------------------" );
105+ System .out .println (String .format ("Documentos en cola (%d)" , porImprimir .size ()));
106+ for (String doc : porImprimir ) {
107+ System .out .println ("- " + doc );
108+ }
109+ break ;
110+
111+ case "agregar" :
112+ System .out .println ("-----------------------------------" );
113+ System .out .print ("Ingresa el nombre del documento: " );
114+ String nombre = scanner .next ();
115+ porImprimir .add (nombre );
116+ break ;
117+
118+ case "imprimir" :
119+ System .out .println ("-----------------------------------" );
120+ if (porImprimir .isEmpty ()) {
121+ System .out .println ("No hay nada para imprimir" );
122+ break ;
123+ }
124+ System .out .println ("Imprimiendo " + porImprimir .poll () + " ..." );
125+ try {
126+ Thread .sleep (2000 );
127+ } catch (InterruptedException e ) {
128+ e .printStackTrace ();
129+ }
130+ break ;
131+ case "salir" :
132+ System .out .println ("Apagando la impresora" );
133+ scanner .close ();
134+ System .exit (0 );
135+ break ;
136+ default :
137+ System .out .println ("Comando no reconocido" );
138+ break ;
139+ }
140+ }
141+ }
142+ }
143+ }
0 commit comments