0% encontró este documento útil (0 votos)
10 vistas28 páginas

PASOAPASO ProyectoFinal

tarea

Cargado por

Dalwin Lagos
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
10 vistas28 páginas

PASOAPASO ProyectoFinal

tarea

Cargado por

Dalwin Lagos
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 28

1

public class ProyectoFinal {


static Scanner scanner = new Scanner(System.in);
static String[] vistas = new String[255];
static int numVistas = 0;
static int[][] compras = new int[255][3];
static int numCompras = 0;

public class ProyectoFinal {: Esta línea declara una clase pública llamada ProyectoFinal. Público
significa que se puede acceder a esta clase desde otras partes de su programa.

static Scanner scanner = new Scanner(System.in);: Esta línea crea una variable estática llamada
scanner de tipo Scanner. static significa que esta variable pertenece a la clase misma y no a
ninguna instancia específica de la clase. Se inicializa con un nuevo objeto Scanner que lee la
entrada del estándar de entrada (generalmente el teclado).

static String[] vistas = new String[255];: Esta línea declara otra variable estática llamada vistas
de tipo arreglo de cadenas (String). Esencialmente, es un arreglo que puede almacenar hasta
255 cadenas de texto. Este arreglo podría usarse para almacenar información sobre diferentes
"vistas" (pantallas en la interfaz), lo que podría estar relacionado con un sistema de menús o
diferentes pantallas en su programa.

static int numVistas = 0;: Esta línea declara una variable entera estática llamada numVistas y la
inicializa a 0. Esta variable podría llevar un control de la cantidad de elementos utilizados
actualmente en el arreglo vistas.

static int[][] compras = new int[255][3];: Esta línea declara otra variable estática llamada
compras de tipo arreglo bidimensional de enteros. Puede contener hasta 255 filas (que
representan potencialmente 255 compras) y cada fila tiene 3 columnas para enteros. Este
arreglo podría usarse para almacenar información sobre compras, donde cada fila representa
una compra y las tres columnas almacenan detalles como ID del artículo, cantidad o precio
(dependiendo de la lógica de su programa).

static int numCompras = 0;: Esta línea declara una variable entera estática llamada
numCompras y la inicializa a 0. Esta variable podría llevar un control de la cantidad de filas
utilizadas actualmente en el arreglo compras, esencialmente la cantidad de compras
almacenadas.
2
public static void main(String[] args) {
cargarVistas();

public static void principal(String[] argumentos) {: Esta línea declara el método principal, que
es el punto de entrada de la ejecución de su programa en Java.

cargarVistas();: Esta línea llama a un método llamado cargarVistas. El punto y coma indica el
final de la declaración

while (true) {
System.out.println("Menú Principal");
System.out.println("1. Administrador");
System.out.println("2. Comprador");
System.out.println("3. Salir");
System.out.print("Ingrese su opción: ");
int opcion = scanner.nextInt();
scanner.nextLine();

while (true) {: Este bucle while se ejecuta mientras la condición true sea cierta. En este caso, la
condición siempre será cierta, lo que significa que el bucle se repetirá indefinidamente hasta
que se encuentre una instrucción break dentro del bucle.

System.out.println("Menú Principal");: Esta línea imprime el título "Menú Principal" en la


consola.

System.out.println("1. Administrador");: Esta línea imprime la opción "1. Administrador" en la


consola.

System.out.println("2. Comprador");: Esta línea imprime la opción "2. Comprador" en la


consola.

System.out.println("3. Salir");: Esta línea imprime la opción "3. Salir" en la consola.


System.out.print("Ingrese su opción: ");: Esta línea imprime el mensaje "Ingrese su opción:" en
la consola, solicitando al usuario que ingrese su elección.

int opcion = scanner.nextInt();: Esta línea lee un número entero del usuario utilizando el objeto
Scanner y lo almacena en la variable opcion.

scanner.nextLine();: Esta línea consume la línea restante en el búfer de entrada del Scanner,
evitando que el siguiente System.in.read() lea la misma línea. Esto es importante para evitar
problemas al leer la entrada del usuario en la siguiente iteración del bucle.

}: Esta llave cierra el bloque del bucle while.

4
switch (opcion) {
case 1:
menuAdministrador();
break;
case 2:
menuComprador();
break;
case 3:
System.out.println("Saliendo del programa...");
guardarVistas(); // Guardar las vistas al salir del programa
return;
default:
System.out.println("Opción no válida. Intente de nuevo.");

Este fragmento de código Java utiliza una instrucción switch para evaluar la variable
opcion y ejecutar el código correspondiente a la opción seleccionada por el usuario.

switch (opcion) {: Esta línea inicia una instrucción switch. La variable opcion se utiliza
como la expresión de control para determinar qué bloque de código se ejecutará.

case 1:: Este bloque de código se ejecuta si la variable opcion es igual a 1.

menuAdministrador();: Esta línea llama a una función llamada menuAdministrador().


Se asume que esta función muestra o ejecuta las opciones disponibles para el usuario
en el rol de administrador.
break;: Esta instrucción break hace que el flujo de control salga del bloque case 1 y del
switch completo. Esto significa que si el usuario elige la opción 1, se ejecutará la
función menuAdministrador() y luego se saldrá del switch.

case 2:: Este bloque de código se ejecuta si la variable opcion es igual a 2.

menuComprador();: Esta línea llama a una función llamada menuComprador(). Se


asume que esta función muestra o ejecuta las opciones disponibles para el usuario en
el rol de comprador.

break;: Similar al caso anterior, esta instrucción break hace que el flujo de control salga
del bloque case 2 y del switch completo.
case 3:: Este bloque de código se ejecuta si la variable opcion es igual a 3.

System.out.println("Saliendo del programa...");: Esta línea imprime el mensaje


"Saliendo del programa..." en la consola para notificar al usuario que el programa está
por finalizar.

guardarVistas();: Esta línea llama a una función llamada guardarVistas(). Se asume que
esta función guarda las "vistas" (pantallas o interfaces) utilizadas en el programa antes
de salir.

return;: Esta instrucción return hace que la función actual (posiblemente la función
main) finalice su ejecución y devuelva el control al programa que la llamó. Esto
significa que si el usuario elige la opción 3, se guardarán las vistas y el programa
terminará.

default:: Este bloque de código se ejecuta si la variable opcion no es igual a ninguno de


los valores de los casos anteriores.
System.out.println("Opción no válida. Intente de nuevo.");: Esta línea imprime el
mensaje "Opción no válida. Intente de nuevo." en la consola para informar al usuario
que la opción seleccionada no es válida y que debe intentar nuevamente.
}: Esta llave cierra la instrucción switch
5
public static void cargarVistas() {
try {
File file = new File("vistas.txt");
Scanner fileScanner = new Scanner(file);
while (fileScanner.hasNextLine()) {
String vista = fileScanner.nextLine();
vistas[numVistas++] = vista;

Función: cargarVistas()

Propósito: Esta función carga las vistas del programa desde un archivo de texto.

public static void cargarVistas() {: Esta línea declara una función pública y estática llamada
cargarVistas que no devuelve ningún valor (void).

try {: Esta línea inicia un bloque try para manejar posibles excepciones que puedan ocurrir
durante la lectura del archivo.

File file = new File("vistas.txt");: Esta línea crea un objeto File que representa el archivo de
texto llamado "vistas.txt". El archivo se supone que está ubicado en el mismo directorio que el
código fuente del programa.

Scanner fileScanner = new Scanner(file);: Esta línea crea un objeto Scanner asociado al archivo
file para leer su contenido línea por línea.

while (fileScanner.hasNextLine()) {: Esta línea inicia un bucle while que se repetirá mientras el
Scanner tenga líneas por leer en el archivo.

String vista = fileScanner.nextLine();: Esta línea lee una línea del archivo y la almacena en la
variable vista de tipo cadena de texto (String).

vistas[numVistas++] = vista;: Esta línea agrega la vista leída (vista) al arreglo vistas.

vistas[numVistas]: Accede a la posición actual del arreglo vistas indicada por el índice
numVistas.

numVistas++: Incrementa el valor de numVistas después de usarlo como índice. Esto asegura
que la próxima vista se agregue a la siguiente posición disponible en el arreglo.

}: Esta llave cierra el bloque while.

catch (FileNotFoundException e) {: Este bloque catch se ejecutará si ocurre una excepción de


tipo FileNotFoundException. Esto significa que el archivo "vistas.txt" no se pudo encontrar.

Dentro del bloque catch se podría agregar código para manejar el error, como imprimir un
mensaje de aviso al usuario o finalizar el programa.

}: Esta llave cierra el bloque try-catch


6

fileScanner.close();
System.out.println("Vistas cargadas correctamente.");
} catch (IOException e) {
System.out.println("Error al cargar las vistas desde el
archivo.");

fileScanner.close();: Esta línea cierra el objeto Scanner asociado al archivo


"vistas.txt". Esto libera los recursos del sistema utilizados por el Scanner y
garantiza que el archivo se cierre correctamente.
System.out.println("Vistas cargadas correctamente.");: Esta línea imprime
el mensaje "Vistas cargadas correctamente." en la consola para informar
al usuario que las vistas se han cargado exitosamente desde el archivo.
catch (IOException e) {: Este bloque catch se ejecutará si ocurre una
excepción de tipo IOException durante la ejecución del código dentro del
bloque try anterior. Las excepciones de tipo IOException son generales y
pueden indicar diversos problemas de entrada/salida, como errores de
lectura o escritura en archivos, problemas de red o acceso a dispositivos.
System.out.println("Error al cargar las vistas desde el archivo.");: Dentro
del bloque catch, esta línea imprime el mensaje "Error al cargar las vistas
desde el archivo." en la consola para informar al usuario que hubo un
problema al intentar leer las vistas del archivo.

Se podría agregar código adicional dentro del bloque catch para manejar
el error de manera más específica, como registrar el error en un archivo
de log o realizar acciones de recuperación.

}: Esta llave cierra el bloque catch.


7
public static void guardarVistas() {
try {
FileWriter writer = new FileWriter("vistas.txt");
for (int i = 0; i < numVistas; i++) {
writer.write(vistas[i] + "\n");

Función: guardarVistas()
Propósito: Esta función guarda las vistas del programa en un archivo de texto.
public static void guardarVistas() {: Esta línea declara una función pública y estática
llamada guardarVistas que no devuelve ningún valor (void).
try {: Esta línea inicia un bloque try para manejar posibles excepciones que puedan
ocurrir durante la escritura en el archivo.

FileWriter writer = new FileWriter("vistas.txt");: Esta línea crea un objeto FileWriter


asociado al archivo de texto llamado "vistas.txt". El archivo se supone que está ubicado
en el mismo directorio que el código fuente del programa. Si el archivo no existe, se
creará un nuevo archivo.

for (int i = 0; i < numVistas; i++) {: Esta línea inicia un bucle for que se repetirá desde i =
0 hasta i < numVistas.
i: Variable de control del bucle que itera a través de los elementos del arreglo vistas.
writer.write(vistas[i] + "\n");: Esta línea dentro del bucle escribe el contenido de la
posición actual i del arreglo vistas seguido de un salto de línea (\n) al archivo utilizando
el objeto writer.
}: Esta llave cierra el bloque for. Este bucle iterará y escribirá todas las vistas
almacenadas en el arreglo vistas al archivo "vistas.txt".
catch (IOException e) {: Este bloque catch se ejecutará si ocurre una excepción de tipo
IOException durante la escritura en el archivo. Esto podría deberse a problemas como
falta de permisos para escribir en el archivo o errores en el disco.

Dentro del bloque catch se podría agregar código para manejar el error, como imprimir
un mensaje de aviso al usuario o finalizar el programa.
}: Esta llave cierra el bloque try-catch.
8

writer.close();
System.out.println("Vistas guardadas correctamente.");
} catch (IOException e) {
System.out.println("Error al guardar las vistas en el archivo.");
}

writer.close();: Esta línea cierra el objeto FileWriter asociado al archivo en


el que se está escribiendo. Esto asegura que el archivo se cierre
correctamente y que todos los recursos del sistema utilizados por el
FileWriter se liberen.
System.out.println("Vistas guardadas correctamente.");: Esta línea
imprime el mensaje "Vistas guardadas correctamente." en la consola. Esto
informa al usuario que las vistas se han guardado en el archivo sin errores.
catch (IOException e) {: Este bloque catch se ejecutará si ocurre una
excepción IOException durante la ejecución del código dentro del bloque
try anterior. Las excepciones IOException son generales y pueden indicar
varios problemas de entrada/salida, como errores de lectura/escritura de
archivos, problemas de red o problemas de acceso a dispositivos.

System.out.println("Error al guardar las vistas en el archivo.");: Dentro del


bloque catch, esta línea imprime el mensaje "Error al guardar las vistas en
el archivo." en la consola. Esto informa al usuario que ocurrió un problema
al intentar guardar las vistas en el archivo.

Se podría agregar código adicional dentro del bloque catch para manejar
el error de manera más específica, como registrar el error en un archivo o
tomar acciones de recuperación.

}: Esta llave de cierre marca el final del bloque catch


.
9

public static void menuAdministrador() {


while (true) {
System.out.println("Menú Administrador");
System.out.println("1. Insertar Nueva Vista");
System.out.println("2. Imprimir Vistas");
System.out.println("3. Menú Principal");
System.out.print("Ingrese su opción: ");
int opcion = scanner.nextInt();
scanner.nextLine();

Función: menuAdministrador()
Propósito: Esta función presenta un menú interactivo para el
administrador del programa, permitiéndole elegir entre diferentes
opciones.

public static void menuAdministrador() {: Esta línea declara una función


pública y estática llamada menuAdministrador() que no devuelve ningún
valor (void).
while (true) {: Este bucle while infinito indica que el menú del
administrador se repetirá continuamente hasta que el usuario elija la
opción "Menú Principal" (opción 3).

System.out.println("Menú Administrador");: Esta línea imprime el título


"Menú Administrador" en la consola.

System.out.println("1. Insertar Nueva Vista");: Esta línea imprime la


primera opción del menú: "1. Insertar Nueva Vista".

System.out.println("2. Imprimir Vistas");: Esta línea imprime la segunda


opción del menú: "2. Imprimir Vistas".
System.out.println("3. Menú Principal");: Esta línea imprime la tercera
opción del menú: "3. Menú Principal".

System.out.print("Ingrese su opción: ");: Esta línea imprime un mensaje


solicitando al usuario que ingrese su opción del menú.

int opcion = scanner.nextInt();: Esta línea lee la opción ingresada por el


usuario como un número entero y lo almacena en la variable opcion.

scanner.nextLine();: Esta línea consume el resto de la línea de entrada del


usuario (que podría contener espacios en blanco o caracteres adicionales)
para evitar problemas con la lectura de la siguiente entrada.

switch (opcion) {: Esta declaración switch inicia un bloque switch que


evalúa el valor de la variable opcion para determinar qué acción se debe
tomar en función de la opción seleccionada.

case 1:: Si el valor de opcion es 1, se ejecuta el código dentro de este caso.


En este caso, no se muestra código específico, lo que sugiere que se
podría implementar la funcionalidad para insertar una nueva vista.

case 2:: Si el valor de opcion es 2, se ejecuta el código dentro de este caso.


En este caso, no se muestra código específico, lo que sugiere que se
podría implementar la funcionalidad para imprimir las vistas existentes.

case 3:: Si el valor de opcion es 3, se ejecuta el código dentro de este caso.


En este caso, se llama a la función menuPrincipal(), lo que probablemente
lleve al usuario al menú principal del programa.
default:: Si el valor de opcion no coincide con ninguno de los casos
anteriores, se ejecuta el código dentro del bloque default. En este caso, se
imprime un mensaje indicando que la opción ingresada es inválida.

}: Esta llave cierra el bloque switch.

}: Esta llave cierra el bucle while infinito

10

public static void insertarNuevaVista() {


if (numVistas >= 255) {
System.out.println("El almacen de vistas está lleno.");
return;

Función: insertarNuevaVista()

Propósito: Esta función permite insertar una nueva vista en el programa,


verificando primero si hay espacio disponible y luego solicitando al usuario
los detalles de la vista.
public static void insertarNuevaVista() {: Esta línea declara una función
pública y estática llamada insertarNuevaVista() que no devuelve ningún
valor (void).

if (numVistas >= 255) {: Esta condición verifica si la cantidad actual de


vistas almacenadas (numVistas) es igual o mayor que 255.

System.out.println("El almacen de vistas está lleno.");: Si la condición se


cumple, significa que el almacén de vistas está lleno y no se pueden
agregar más vistas. En este caso, se imprime un mensaje informando al
usuario de esta situación.
return;: La instrucción return se ejecuta dentro de la condición if si el
almacén está lleno. Esto finaliza la función insertarNuevaVista() y devuelve
el control al código que la llamó.

System.out.print("Ingrese el nombre de la vista: ");: Esta línea imprime un


mensaje solicitando al usuario que ingrese el nombre de la nueva vista.

String nombreVista = scanner.nextLine();: Esta línea lee la entrada del


usuario como una cadena de texto y la almacena en la variable
nombreVista.

System.out.print("Ingrese la descripción de la vista: ");: Esta línea imprime


un mensaje solicitando al usuario que ingrese la descripción de la nueva
vista.

String descripcionVista = scanner.nextLine();: Esta línea lee la entrada del


usuario como una cadena de texto y la almacena en la variable
descripcionVista.

vistas[numVistas] = new Vista(nombreVista, descripcionVista);: Esta línea


crea un nuevo objeto Vista con los datos ingresados por el usuario y lo
almacena en la posición actual del arreglo vistas.

numVistas++;: Esta línea incrementa el valor de la variable numVistas en 1


para reflejar que se ha agregado una nueva vista al almacén.

System.out.println("Vista insertada correctamente.");: Esta línea imprime


un mensaje informando al usuario que la vista se ha insertado
correctamente.
}: Esta llave cierra la función insertarNuevaVista()
11

try { //investigacion
FileWriter writer = new FileWriter("vistas.txt", true);
writer.write(nuevaVista + "\n");
writer.close();
System.out.println("Vista insertada correctamente.");
} catch (IOException e) {
System.out.println("Error al guardar la vista en el archivo.");

Este código intenta guardar los detalles de una nueva vista en un archivo de texto
llamado "vistas.txt". Lo hace utilizando un bloque try-catch para manejar posibles
errores de entrada/salida (I/O).
try {: Inicia un bloque try. El código dentro de este bloque se intentará ejecutar
primero.

FileWriter writer = new FileWriter("vistas.txt", true);:


Crea un nuevo objeto FileWriter llamado writer.
El primer argumento, "vistas.txt", especifica el nombre del archivo al que se escribirá.
El segundo argumento, true, indica que se debe abrir el archivo en modo "append"
(anexar). Esto significa que cualquier información nueva se agregará al final del archivo
existente, en lugar de sobrescribirlo.
writer.write(nuevaVista + "\n");:

Escribe el contenido de la variable nuevaVista en el archivo abierto por writer.


Se agrega un salto de línea (\n) al final de la cadena para separar la nueva vista de las
vistas existentes en el archivo.
writer.close();: Cierra el archivo abierto por writer. Esto libera los recursos del sistema
utilizados por el objeto FileWriter.

System.out.println("Vista insertada correctamente.");:

Si todo se ejecuta correctamente dentro del bloque try, esta línea se imprime en la
consola, informando al usuario que la vista se insertó exitosamente en el archivo.
} catch (IOException e) {:
Inicia un bloque catch. Este bloque solo se ejecutará si ocurre un error de
entrada/salida (cualquier tipo de excepción IOException) durante la ejecución del
código dentro del bloque try.
System.out.println("Error al guardar la vista en el archivo.");:

Si ocurre un error de I/O, se imprime este mensaje en la consola, informando al


usuario del problema.
}: Cierra el bloque catch.
Este código intenta guardar la información de una nueva vista en un archivo de texto.
Si la operación se realiza correctamente, informa al usuario del éxito. Si ocurre un
error de I/O, el bloque catch se encarga de informar al usuario del problema.

12

public static void imprimirVistas() {


System.out.println("Vistas disponibles:");
for (int i = 0; i < numVistas; i++) {
System.out.println((i + 1) + ". " + vistas[i]);
}

Función: imprimirVistas()
Propósito: Esta función imprime una lista de las vistas almacenadas en el
programa.
public static void imprimirVistas() {: Esta línea declara una función pública
y estática llamada imprimirVistas() que no devuelve ningún valor (void).

System.out.println("Vistas disponibles:");: Esta línea imprime un mensaje


de encabezado "Vistas disponibles:" en la consola.

for (int i = 0; i < numVistas; i++) {:


Se inicia un bucle for que itera desde i = 0 hasta i < numVistas. La variable
numVistas almacena la cantidad actual de vistas guardadas.
System.out.println((i + 1) + ". " + vistas[i]);:

Dentro del bucle for, esta línea imprime el número de la vista actual
(comenzando en 1), un punto (.), un espacio y luego el contenido de la
vista almacenada en la posición i del arreglo vistas.

La expresión (i + 1) se utiliza para numerar las vistas comenzando desde 1


(en lugar de 0) para una presentación más amigable al usuario.

}: Esta llave cierra el bucle for.

}: Esta llave cierra la función imprimirVistas().

La función imprimirVistas() recorre el arreglo vistas utilizando un bucle for.


En cada iteración, imprime el número de la vista y su contenido
correspondiente, creando una lista ordenada de las vistas disponibles
13

public static void menuComprador() {


while (true) {
System.out.println("Menú Comprador");
System.out.println("1. Comprar Vista");
System.out.println("2. Ver Vistas");
System.out.println("3. Menú Principal");
System.out.print("Ingrese su opción: ");
int opcion = scanner.nextInt();
scanner.nextLine(); // Consumir el salto de línea

switch (opcion) {
case 1:
comprarVista();
break;
case 2:
imprimirCompras();
break;
case 3:
return;
default:
System.out.println("Opción no válida. Intente de
nuevo.");

Función: menuComprador()
Propósito: Esta función presenta un menú interactivo para el comprador,
permitiéndole elegir entre diferentes opciones.
public static void menuComprador() {: Esta línea declara una función pública y estática
llamada menuComprador() que no devuelve ningún valor (void).

while (true) {: Este bucle while infinito indica que el menú del comprador se repetirá
continuamente hasta que el usuario elija la opción "Menú Principal" (opción 3).

System.out.println("Menú Comprador");: Esta línea imprime el título "Menú


Comprador" en la consola.

System.out.println("1. Comprar Vista");: Esta línea imprime la primera opción del


menú: "1. Comprar Vista".

System.out.println("2. Ver Vistas");: Esta línea imprime la segunda opción del menú:
"2. Ver Vistas".
System.out.println("3. Menú Principal");: Esta línea imprime la tercera opción del
menú: "3. Menú Principal".

System.out.print("Ingrese su opción: ");: Esta línea imprime un mensaje solicitando al


usuario que ingrese su opción del menú.

int opcion = scanner.nextInt();: Esta línea lee la opción ingresada por el usuario como
un número entero y lo almacena en la variable opcion.

scanner.nextLine();: Esta línea consume el resto de la línea de entrada del usuario (que
podría contener espacios en blanco o caracteres adicionales) para evitar problemas
con la lectura de la siguiente entrada.

switch (opcion) {: Esta declaración switch inicia un bloque switch que evalúa el valor de
la variable opcion para determinar qué acción se debe tomar en función de la opción
seleccionada.

case 1:: Si el valor de opcion es 1, se ejecuta el código dentro de este caso. En este
caso, se llama a la función comprarVista() para iniciar el proceso de compra de una
vista.

case 2:: Si el valor de opcion es 2, se ejecuta el código dentro de este caso. En este
caso, se llama a la función imprimirCompras() para mostrar al comprador las vistas que
ha comprado anteriormente.

case 3:: Si el valor de opcion es 3, se ejecuta el código dentro de este caso. En este
caso, se utiliza la instrucción return para salir de la función menuComprador(), lo que
significa que el usuario regresa al menú principal.

default:: Si el valor de opcion no coincide con ninguno de los casos anteriores, se


ejecuta el código dentro del bloque default. En este caso, se imprime un mensaje
indicando que la opción ingresada es inválida.
}: Esta llave cierra el bloque switch.

}: Esta llave cierra el bucle while infinito.

14
public static void comprarVista() {
if (numVistas == 0) {
System.out.println("No hay vistas disponibles para comprar.");
return;

Función: comprarVista()

Propósito: Esta función permite al comprador adquirir una vista disponible


en el programa.
public static void comprarVista() {: Esta línea declara una función pública y
estática llamada comprarVista() que no devuelve ningún valor (void).

if (numVistas == 0) {: Esta condición verifica si la cantidad actual de vistas


disponibles (numVistas) es igual a 0.

System.out.println("No hay vistas disponibles para comprar.");: Si la


condición se cumple, significa que no hay vistas disponibles para comprar.
En este caso, se imprime un mensaje informando al comprador de esta
situación.

return;: La instrucción return se ejecuta dentro de la condición if si no hay


vistas disponibles. Esto finaliza la función comprarVista() y devuelve el
control al código que la llamó.

System.out.println("Vistas disponibles:");: Esta línea imprime un mensaje


de encabezado "Vistas disponibles:" en la consola.
for (int i = 0; i < numVistas; i++) {:

Se inicia un bucle for que itera desde i = 0 hasta i < numVistas.


System.out.println((i + 1) + ". " + vistas[i]);:

Dentro del bucle for, esta línea imprime el número de la vista actual
(comenzando en 1), un punto (.), un espacio y luego el contenido de la
vista almacenada en la posición i del arreglo vistas.

La expresión (i + 1) se utiliza para numerar las vistas comenzando desde 1


(en lugar de 0) para una presentación más amigable al usuario.

}: Esta llave cierra el bucle for.

System.out.print("Ingrese el número de la vista que desea comprar: ");:


Esta línea imprime un mensaje solicitando al comprador que ingrese el
número de la vista que desea comprar.

int vistaElegida = scanner.nextInt();: Esta línea lee el número ingresado por


el comprador como un número entero y lo almacena en la variable
vistaElegida.

scanner.nextLine();: Esta línea consume el resto de la línea de entrada del


usuario (que podría contener espacios en blanco o caracteres adicionales)
para evitar problemas con la lectura de la siguiente entrada.

if (vistaElegida <= 0 || vistaElegida > numVistas) {: Esta condición verifica


si el número ingresado por el comprador es válido.
System.out.println("Número de vista inválido. Intente de nuevo.");: Si el
número ingresado es inválido (menor o igual a 0 o mayor que el número
total de vistas), se imprime un mensaje informando al comprador del
error.

return;: La instrucción return se ejecuta dentro de la condición if si el


número ingresado es inválido. Esto finaliza la función comprarVista() y
devuelve el control al código que la llamó.

vistaElegida--;: Esta línea decrementa el valor de la variable vistaElegida en


1. Esto se hace porque el arreglo vistas está indexado desde 0, mientras
que el usuario ingresa el número de la vista comenzando desde 1.

compradorVistas[vistaElegida] = true;: Esta línea marca como comprada la


vista seleccionada por el comprador. El arreglo compradorVistas almacena
un valor booleano para cada vista: true indica que la vista ha sido
comprada por el comprador actual, y false indica que no ha sido
comprada.

System.out.println("Vista comprada correctamente.");: Esta línea imprime


un mensaje informando al comprador que la vista ha sido comprada
exitosamente.

}: Esta llave cierra la condición if que valida el número ingresado por el


comprador.

}: Esta llave cierra la función comprarVista().


15

Random random = new Random();


int[] numerosAleatorios = new int[3];
for (int i = 0; i < 3; i++) {
numerosAleatorios[i] = random.nextInt(numVistas);
}:

Random random = new Random();:

Se crea un objeto de la clase Random llamado random. Este objeto se


utiliza para generar números aleatorios.
int[] numerosAleatorios = new int[3];:

Se declara un arreglo de enteros llamado numerosAleatorios con


capacidad para almacenar 3 elementos.
for (int i = 0; i < 3; i++) {:

Se inicia un bucle for que se repetirá 3 veces (una vez por cada elemento
del arreglo). La variable i se utiliza como contador para iterar a través de
cada posición del arreglo.
numerosAleatorios[i] = random.nextInt(numVistas);:

Dentro del bucle for, se genera un número aleatorio utilizando el método


nextInt(numVistas) del objeto random.
nextInt(numVistas) genera un número entero aleatorio entre 0 (inclusive)
y numVistas (exclusive).
El número aleatorio generado se almacena en la posición actual i del
arreglo numerosAleatorios.
16
for (int i = 0; i < 3; i++) {
boolean vistaExiste = false;
for (int j = 0; j < numCompras; j++) {
if (compras[j][0] == numerosAleatorios[i]) {
compras[j][2]++;
vistaExiste = true;
break;

for (int i = 0; i < 3; i++) {:

Se inicia un bucle for externo que se ejecuta 3 veces (una vez por cada
número aleatorio generado anteriormente). La variable i se utiliza como
contador para iterar a través de cada elemento del arreglo
numerosAleatorios.
boolean vistaExiste = false;:

Se declara una variable booleana llamada vistaExiste y se inicializa en


false. Esta variable se utilizará para saber si la vista del número aleatorio
actual ya se encuentra en el arreglo compras.
for (int j = 0; j < numCompras; j++) {:

Dentro del bucle for externo, se inicia otro bucle for interno que itera a
través de todas las compras registradas en el arreglo compras. La variable j
se utiliza como contador para iterar a través de cada elemento del arreglo
compras.

Ten en cuenta: El arreglo compras probablemente sea bidimensional y


almacene información sobre las compras realizadas. El código no muestra
la definición de este arreglo, pero se asume que cada elemento del arreglo
compras representa una compra y tiene al menos 3 columnas (índice 0, 1,
y 2).

if (compras[j][0] == numerosAleatorios[i]) {:
Se verifica si el valor en la columna 0 (índice 0) del elemento actual j del
arreglo compras coincide con el número aleatorio actual en la posición i
del arreglo numerosAleatorios.
Si esta condición se cumple, significa que la vista del número aleatorio
actual ya se encuentra en el registro de compras.
compras[j][2]++;:

Si la condición se cumple (la vista ya está comprada), se incrementa el


valor en la columna 2 (índice 2) del elemento j del arreglo compras.
Asumiendo que la columna 2 representa la cantidad comprada de la vista,
este incremento indica que se ha comprado una unidad adicional de la
vista correspondiente.
vistaExiste = true;:

Se cambia el valor de la variable vistaExiste a true para indicar que la vista


del número aleatorio actual sí se encuentra en el registro de compras.
break;:

Una vez que se encuentra la vista en el registro de compras y se actualiza


su cantidad, se utiliza la instrucción break para salir del bucle for interno j.
No es necesario seguir buscando en las compras restantes.
// Bloque opcional fuera del bucle j:

Hay un comentario que indica la posibilidad de un bloque de código fuera


del bucle for interno j. Sin ver ese código, no se puede explicar su
funcionalidad con certeza. Sin embargo, si hubiera código en esta sección,
se ejecutaría una vez por cada iteración del bucle for externo i. En otras
palabras, este código se ejecutaría 3 veces en total, una vez por cada
número aleatorio procesado
17
if (!vistaExiste) {
compras[numCompras][0] = numerosAleatorios[i];
compras[numCompras][1] = numerosAleatorios[i];
compras[numCompras++][2] = 1;

if (!vistaExiste) {:

Se verifica la condición !vistaExiste. Si la variable vistaExiste es false (lo


que significa que la vista del número aleatorio actual no se encontró en el
registro de compras), se ejecuta el código dentro del bloque if.
compras[numCompras][0] = numerosAleatorios[i];:

Si la condición se cumple, se almacena el valor del número aleatorio actual


en la posición 0 (índice 0) del elemento numCompras del arreglo compras.
Asumiendo que la columna 0 representa el identificador de la vista, se
almacena el número aleatorio que representa la vista correspondiente.
compras[numCompras][1] = numerosAleatorios[i];:

Se almacena nuevamente el valor del número aleatorio actual en la


posición 1 (índice 1) del elemento numCompras del arreglo compras.
No está claro por qué se almacena el número aleatorio dos veces en el
mismo elemento de compras.
compras[numCompras++][2] = 1;:

Se almacena el valor 1 en la posición 2 (índice 2) del elemento


numCompras del arreglo compras.
Asumiendo que la columna 2 representa la cantidad comprada de la vista,
se establece la cantidad inicial en 1 para indicar que se ha comprado una
unidad de la vista correspondiente.
numCompras++;:
Se incrementa el valor de la variable numCompras en 1.
Esto actualiza el índice que se utiliza para acceder al siguiente elemento
del arreglo compras en las iteraciones posteriores del bucle for externo.

18
try { //investigacion
FileWriter writer = new FileWriter("compras.txt", true);
for (int i = 0; i < numCompras; i++) {
writer.write(compras[i][0] + " " + vistas[compras[i][1]] + " "
+ compras[i][2] + "\n");
}
writer.close();
System.out.println("Vistas compradas correctamente.");
} catch (IOException e) {
System.out.println("Error al guardar las compras en el archivo.");

try {:
FileWriter writer = new FileWriter("compras.txt", true);:

Se crea un objeto de la clase FileWriter llamado writer. Este objeto se


utiliza para escribir información en un archivo de texto.
El constructor FileWriter("compras.txt", true) crea un archivo llamado
"compras.txt" si no existe o abre el archivo existente en modo append
(true). El modo append permite agregar información al final del archivo
existente en lugar de sobrescribirlo.
for (int i = 0; i < numCompras; i++) {:

Se inicia un bucle for que se ejecuta numCompras veces (una vez por cada
registro de compra). La variable i se utiliza como contador para iterar a
través de cada elemento del arreglo compras.
writer.write(compras[i][0] + " " + vistas[compras[i][1]] + " " + compras[i][2]
+ "\n");:
Dentro del bucle for, se utiliza el método write del objeto writer para
escribir información en el archivo de texto.
La línea que se escribe en el archivo se construye concatenando:
El valor en la columna 0 (índice 0) del elemento actual i del arreglo
compras (posiblemente el identificador de la vista).
Un espacio en blanco (" ").
El contenido de la vista correspondiente obtenida del arreglo vistas
utilizando el valor en la columna 1 (índice 1) del elemento actual i del
arreglo compras.
Un espacio en blanco (" ").
El valor en la columna 2 (índice 2) del elemento actual i del arreglo
compras (posiblemente la cantidad comprada).
Un salto de línea ("\n").
writer.close();:

Fuera del bucle for, se utiliza el método close del objeto writer para cerrar
el archivo de texto. Es importante cerrar el archivo para liberar recursos.
System.out.println("Vistas compradas correctamente.");:

Si no hay errores durante la escritura en el archivo, se imprime un


mensaje indicando que las compras se guardaron correctamente.
} catch (IOException e) {:

Se define un bloque catch que se ejecuta si ocurre una excepción de tipo


IOException durante la escritura en el archivo. Las excepciones de tipo
IOException indican errores relacionados con la entrada o salida de datos.
System.out.println("Error al guardar las compras en el archivo.");:
Dentro del bloque catch, se imprime un mensaje indicando que hubo un
error al guardar las compras en el archivo.

19

public static void imprimirCompras() {


System.out.println("Código\tNombre\tCantidad");
for (int i = 0; i < numCompras; i++) {
System.out.println(compras[i][0] + "\t" +
vistas[compras[i][1]] + "\t" + compras[i][2]);
}
}
}

Función: imprimirCompras()

Propósito: Esta función imprime una lista de las compras realizadas por el
usuario.
public static void imprimirCompras() {: Esta línea declara una función
pública y estática llamada imprimirCompras() que no devuelve ningún
valor (void).

System.out.println("Código\tNombre\tCantidad");: Esta línea imprime un


encabezado de tabla que indica las columnas para mostrar: "Código",
"Nombre" y "Cantidad".

for (int i = 0; i < numCompras; i++) {:

Se inicia un bucle for que se ejecuta numCompras veces (una vez por cada
registro de compra). La variable i se utiliza como contador para iterar a
través de cada elemento del arreglo compras.
System.out.println(compras[i][0] + "\t" + vistas[compras[i][1]] + "\t" +
compras[i][2]);:
Dentro del bucle for, se imprime una línea en la consola que muestra la
información de la compra actual:
El valor en la columna 0 (índice 0) del elemento actual i del arreglo
compras (posiblemente el identificador de la vista).
Un tabulador ("\t").
El contenido de la vista correspondiente obtenida del arreglo vistas
utilizando el valor en la columna 1 (índice 1) del elemento actual i del
arreglo compras.
Un tabulador ("\t").
El valor en la columna 2 (índice 2) del elemento actual i del arreglo
compras (posiblemente la cantidad comprada).

También podría gustarte