Autor Tema: Menú Java seleccionar opción ejecutar y al finalizar regresar hasta salir código  (Leído 10345 veces)

ElMike

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 13
    • Ver Perfil
Estimados amigos, pido de sus amables atenciones para saber como puedo hacer para que al seleccionar una opción de un menú en java, se ejecute el programa y al finalizar dicho programa regrese al menú, hasta seleccionar la opción de salir.

De momento ya tengo los programas así como el menú, que acontinuación les incluyo:

Código: [Seleccionar]
package menu;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Menu {

    public static void main(String[] args) {
        Scanner sn = new Scanner(System.in);
       
        boolean salir = false;
        int opcion;
       
        while(!salir){
           
            System.out.println("\n\t-- Programa que muestra un menu con opciones de ejercicios de las diferentes estructuras --");
           
            System.out.println("1.- Funciones");
            System.out.println("2.- Recursividad");
            System.out.println("3.- Metodo de ordenacion de insercion");
            System.out.println("4.- Metodo de ordenacion Shell");
            System.out.println("5.- Listas de personas");
            System.out.println("6.- Pilas");
            System.out.println("7.- Colas");
            System.out.println("8.- Salir");
           
            try{
           
            System.out.println("Seleccione la opcion deseada: ");
            opcion = sn.nextInt();
           
            switch (opcion){
                case 1:
                    System.out.println("Este es el programa que realiza Funciones");
                    break;
                case 2:
                    System.out.println("Este es el programa que muestra la Recursividad");
                    break;
                case 3:
                    System.out.println("Este es el programa que realiza el Metodo de ordenacion de insercion");
                    break;
                case 4:
                    System.out.println("Este es el programa que realiza el Metodo de ordenacion Shell");
                    break;
                case 5:
                    System.out.println("Este es el programa que realiza Listas de personas");
                    break;
                case 6:
                    System.out.println("Este es el programa que realiza el Metodo de pilas");
                    break; 
                case 7:
                    System.out.println("Este es el programa que realiza el Metodo de colas");
                    break;
                case 8:
                    salir=true;
                    break;   
                default:   
                   System.out.println("Las opciones son entre 1 y 8");
               
            }
            }
            catch(InputMismatchException e){
                System.out.println("Debes seleccionar un numero de opcion");
                sn.next();
            }
    }
   
                System.out.println("Gracias por utilizar el sistema, hasta luego... ");
}
}   

Ejemplo:

-- Programa que muestra un menu con opciones de ejercicios de las diferentes estructuras --
1.- Funciones
2.- Recursividad
3.- Metodo de ordenacion de insercion
4.- Metodo de ordenacion Shell
5.- Listas de personas
6.- Pilas
7.- Colas
8.- Salir
Seleccione la opcion deseada:
4
Este es el programa que realiza el Metodo de ordenacion Shell


Código: [Seleccionar]
package shell;


public class Shell {

    public static void main(String[] args) {
    int arreglo[]={5,4,2,1,3,6}, aux, pos, salto;
     System.out.println("Se muestra el contenido de la serie de datos numericos...");
     for(int i=0;i<=5;i++){
         System.out.print(arreglo[i]+ " - ");
     }
       
        //Ordenamiento por el metodo Shell
       
        boolean cambios;
 
        for (salto = 6 / 2; salto != 0; salto /= 2) {
            cambios = true;
            while (cambios) {   // Mientras se intercambie algún elemento                                         
                cambios = false;
                for (int i = salto; i < 6; i++)   // se da una pasada
                {
                    if (arreglo[i - salto] > arreglo[i]) {       // y si están desordenados
                        aux = arreglo[i];                  // se reordenan
                        arreglo[i] = arreglo[i - salto];
                        arreglo[i - salto] = aux;
                        cambios = true;              // y se marca como cambio.                                   
                    }
                }
            }
        }
       
          //Mostrando el arreglo ordenando
        System.out.println("\n\nSe esta imprimiento los valores del arreglo en forma ascendete");
        for(int i=0;i<6;i++){
        System.out.print(arreglo[i]+ " - ");
        }
        System.out.println();
    }
   
}

-- Programa que muestra un menu con opciones de ejercicios de las diferentes estructuras --
1.- Funciones
2.- Recursividad
3.- Metodo de ordenacion de insercion
4.- Metodo de ordenacion Shell
5.- Listas de personas
6.- Pilas
7.- Colas
8.- Salir
Seleccione la opcion deseada:



Espero haber sido claro y me puedan ayudar, gracias.

Saludos con afecto,
ElMike.
« Última modificación: 05 de Noviembre 2022, 20:24 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re: Ayuda con Menú en Java
« Respuesta #1 en: 20 de Julio 2022, 11:04 »
Mhhh..., desde la consola no se si se puede invocar otro programa.
Y de poderse, probablemente se ejecutaría en paralelo al programa principal. Es decir, el programa principal no tendría control sobre el programa "secundario". No sabría si ya ha empezado, ni cuando termina, ni nada...

Lo que tienes que hacer es reconvertir esos programas secundarios en métodos estáticos para poder invocarlos desde el switch en el main() del programa principal.
Esto puedes hacerlo de dos maneras:

1- Escribiendo los métodos dentro del propio programa principal:

Código: [Seleccionar]
public class Menu {
public static void main(String[] args) {
Scanner sn = new Scanner(System.in);

boolean salir = false;
int opcion;

while(!salir){

System.out.println("\n\t-- Programa que muestra un menu con opciones de ejercicios de las diferentes estructuras --");

System.out.println("1.- Funciones");
System.out.println("2.- Recursividad");
System.out.println("3.- Metodo de ordenacion de insercion");
System.out.println("4.- Metodo de ordenacion Shell");
System.out.println("5.- Listas de personas");
System.out.println("6.- Pilas");
System.out.println("7.- Colas");
System.out.println("8.- Salir");

try{

System.out.println("Seleccione la opcion deseada: ");
opcion = sn.nextInt();

switch (opcion){
case 1:
funciones();
break;
case 2:
recursividad();
break;
case 3:
ordenacionInsercion();
break;
case 4:
ordenacionShell();
break;
case 5:
listaPersonas();
break;
case 6:
metodoPilas();
break;
case 7:
metodoColas();
break;
case 8:
salir=true;
break;   
default:   
System.out.println("Las opciones son entre 1 y 8");

}
}
catch(InputMismatchException e){
System.out.println("Debes seleccionar un numero de opcion");
sn.next();
}
}

System.out.println("Gracias por utilizar el sistema, hasta luego... ");
}

//Métodos para los diferentes ejercicios
public static void funciones() {
System.out.println("\nEste es el programa que realiza Funciones\n");
}

public static void recursividad() {
System.out.println("\nEste es el programa que muestra la Recursividad\n");
}

public static void ordenacionInsercion() {
System.out.println("Este es el programa que realiza el Metodo de ordenacion de insercion");
}

public static void ordenacionShell() {
int arreglo[]={5,4,2,1,3,6}, aux, salto;
System.out.println("Se muestra el contenido de la serie de datos numericos...");
for(int i=0;i<=5;i++){
System.out.print(arreglo[i]+ " - ");
}

//Ordenamiento por el metodo Shell

boolean cambios;

for (salto = 6 / 2; salto != 0; salto /= 2) {
cambios = true;
while (cambios) {   // Mientras se intercambie algún elemento                                         
cambios = false;
for (int i = salto; i < 6; i++)   // se da una pasada
{
if (arreglo[i - salto] > arreglo[i]) {       // y si están desordenados
aux = arreglo[i];                  // se reordenan
arreglo[i] = arreglo[i - salto];
arreglo[i - salto] = aux;
cambios = true;              // y se marca como cambio.                                   
}
}
}
}

//Mostrando el arreglo ordenando
System.out.println("\n\nSe esta imprimiento los valores del arreglo en forma ascendete");
for(int i=0;i<6;i++){
System.out.print(arreglo[i]+ " - ");
}
System.out.println();
}

public static void listaPersonas() {
System.out.println("\nEste es el programa que realiza Listas de personas\n");
}

public static void metodoPilas() {
System.out.println("\nEste es el programa que realiza el Metodo de pilas\n");
}

public static void metodoColas() {
System.out.println("\nEste es el programa que realiza el Metodo de colas\n");
}

}


2- Creando una clase (sin main, no ejecutable) por separado que contenga los métodos para los ejercicios:
Código: [Seleccionar]
public class Ejercicios {

public static void funciones() {
System.out.println("\nEste es el programa que realiza Funciones\n");
}

public static void recursividad() {
System.out.println("\nEste es el programa que muestra la Recursividad\n");
}

public static void ordenacionInsercion() {
System.out.println("Este es el programa que realiza el Metodo de ordenacion de insercion");
}

public static void ordenacionShell() {
int arreglo[]={5,4,2,1,3,6}, aux, salto;
System.out.println("Se muestra el contenido de la serie de datos numericos...");
for(int i=0;i<=5;i++){
System.out.print(arreglo[i]+ " - ");
}

//Ordenamiento por el metodo Shell

boolean cambios;

for (salto = 6 / 2; salto != 0; salto /= 2) {
cambios = true;
while (cambios) {   // Mientras se intercambie algún elemento                                         
cambios = false;
for (int i = salto; i < 6; i++)   // se da una pasada
{
if (arreglo[i - salto] > arreglo[i]) {       // y si están desordenados
aux = arreglo[i];                  // se reordenan
arreglo[i] = arreglo[i - salto];
arreglo[i - salto] = aux;
cambios = true;              // y se marca como cambio.                                   
}
}
}
}

//Mostrando el arreglo ordenando
System.out.println("\n\nSe esta imprimiento los valores del arreglo en forma ascendete");
for(int i=0;i<6;i++){
System.out.print(arreglo[i]+ " - ");
}
System.out.println();
}

public static void listaPersonas() {
System.out.println("\nEste es el programa que realiza Listas de personas\n");
}

public static void metodoPilas() {
System.out.println("\nEste es el programa que realiza el Metodo de pilas\n");
}

public static void metodoColas() {
System.out.println("\nEste es el programa que realiza el Metodo de colas\n");
}
}

Y en el main del programa principal llamamos a esos métodos nombrando primero a esa clase:
Citar
public class Menu {
   public static void main(String[] args) {
      Scanner sn = new Scanner(System.in);

      boolean salir = false;
      int opcion;

      while(!salir){

         System.out.println("\n\t-- Programa que muestra un menu con opciones de ejercicios de las diferentes estructuras --");

         System.out.println("1.- Funciones");
         System.out.println("2.- Recursividad");
         System.out.println("3.- Metodo de ordenacion de insercion");
         System.out.println("4.- Metodo de ordenacion Shell");
         System.out.println("5.- Listas de personas");
         System.out.println("6.- Pilas");
         System.out.println("7.- Colas");
         System.out.println("8.- Salir");

         try{

            System.out.println("Seleccione la opcion deseada: ");
            opcion = sn.nextInt();

            switch (opcion){
            case 1:
               Ejercicios.funciones();
               break;
            case 2:
               Ejercicios.recursividad();
               break;
            case 3:
               Ejercicios.ordenacionInsercion();
               break;
            case 4:
               Ejercicios.ordenacionShell();
               break;
            case 5:
               Ejercicios.listaPersonas();
               break;
            case 6:
               Ejercicios.metodoPilas();
               break;
            case 7:
               Ejercicios.metodoColas();
               break;
            case 8:
               salir=true;
               break;   
            default:   
               System.out.println("Las opciones son entre 1 y 8");

            }
         }
         catch(InputMismatchException e){
            System.out.println("Debes seleccionar un numero de opcion");
            sn.next();
         }
      }

      System.out.println("Gracias por utilizar el sistema, hasta luego... ");
   }
   
}



La segunda opción es más "profesional". El programa va a funcionar lo hagamos de una forma o de otra.
Pero siempre se recomienda "modular" el código, así que puede estar bien separar en una clase el código para efectuar los distintos ejercicios y en otra clase tener el programa principal que se encarga de mostrar el menú, llamar a esos ejercicios y poco más.



En cualquier caso, lo que hay que tener claro es que para conseguir lo que quieres, hay que transformar los ejercicios en métodos.
Si intentamos tratarlos como programas individuales, cada uno con su main ejecutable y tal..., con las limitaciones del modo consola me temo que no sería posible tener un control sobre ellos y cada uno andaría funcionando por su lado.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

ElMike

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 13
    • Ver Perfil
Re: Ayuda con Menú en Java
« Respuesta #2 en: 20 de Julio 2022, 23:18 »
Muchas gracias amigo Kabuto, te comento que opte por la opción 2 (Clase sin Main) el programa quedo así:

1. Menu

Código: [Seleccionar]
package menu;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Menu {

    public static void main(String[] args) {
        Scanner sn = new Scanner(System.in);
       
        boolean salir = false;
        int opcion;
       
        while(!salir){
           
            System.out.println("\n\t-- Programa que muestra un menu con opciones de ejercicios de las diferentes estructuras --");
           
            System.out.println();
           
            System.out.println("1.- Funciones");
            System.out.println("2.- Recursividad");
            System.out.println("3.- Metodo de ordenacion de insercion");
            System.out.println("4.- Metodo de ordenacion Shell");
            System.out.println("5.- Listas de personas");
            System.out.println("6.- Pilas");
            System.out.println("7.- Colas");
            System.out.println("8.- Salir");
           
            System.out.println();
           
            try{
           
            System.out.print("Seleccione cualquiera de las opciones anteriores: ");
            opcion = sn.nextInt();
           
            switch (opcion){
                case 1:
                    funciones.funciones();
                    break;
                case 2:
                    funciones.recursividad();
                    break;
                case 3:
                    funciones.ordenacionInsercion();
                    break;
                case 4:
                    funciones.ordenacionShell();
                    break;
                case 5:
                    funciones.listaPersonas();
                    break;
                case 6:
                    funciones.metodoPilas();
                    break; 
                case 7:
                    funciones.metodoColas();
                    break;
                case 8:
                    salir=true;
                    break;   
                default:   
                   System.out.println("Las opciones son entre 1 y 8");
               
            }
            }
            catch(InputMismatchException e){
                System.out.print("Debes seleccionar un numero de opcion");
                sn.next();
            }
    }
   
                System.out.println("\n\t *-* Gracias por utilizar el sistema, hasta luego *-* ");
}
}   

2. Clases sin el main

Código: [Seleccionar]
package menu;

import java.util.ArrayList;
import java.util.Scanner;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

class funciones {

public static void funciones() {
Scanner sc = new Scanner(System.in);
        float numero1, numero2, suma, resta, mult, div, resto;
       
        System.out.print("Digite el primer numero: ");
        numero1 = sc.nextFloat();
        System.out.print("Digite el segundo numero: ");
        numero2 = sc.nextFloat();
       
        suma = numero1+numero2;
        resta = numero1-numero2;
        mult = numero1*numero2;
        div = numero1/numero2;
        resto = numero1%numero2;
       
       
        System.out.println("La suma es: "+suma);
        System.out.println("La resta es: "+resta);
        System.out.println("La multiplicacion es: "+mult);
        System.out.println("La division es: "+div);
        System.out.println("El resto es: "+resto);
}

       
       
public static void recursividad() {
    //Utilizacmos Scanner para leer datos desde teclado podemos usamos el metodo nextInt
    Scanner datos= new Scanner(System.in);
    //Se declaran las variables (int=entero)
    int fin, inicio, incremento;
    //Solicitamos la informacion al usuario
    System.out.println("\n\t--Programa que muestra el funcionamiento de la recursividad solicitando 3 numeros--");
    System.out.println("Ingresa el numero de inicio de la lista: ");
    //Aqui se almacena la informacion de la variable
    inicio= datos.nextInt();
    System.out.println("Ingresa el numero en el que quieres finalizar la lista: ");
    fin= datos.nextInt();
    System.out.println("Indica el incremento de la lista: ");
    incremento= datos.nextInt();

    listaNumeros(fin,inicio,incremento);

}
//Aqui aplicamos la Recursividad
public static void listaNumeros(int fin,int inicio, int incremento){
    if(fin > 0 ){
    System.out.println(inicio);
    listaNumeros(fin - incremento,inicio+incremento,incremento);
}
}       




public static void ordenacionInsercion() {
                int[] lista = new int[100]; // Lista de números enteros que supondremos llena.
int i,j; // Índices sobre la lista.
int aux; // Variable auxiliar para el intercambio de valores.

for (i = 1; i < 100; i++){ // ¡Ojo! Empezamos en 1
aux = lista[i]; // Guardamos el valor a ordenar.
j = i - 1;
while ( (j >= 0) && lista[j] > aux ) // Siempre que sea mayor que aux.
// ordenamos de menor a mayor.
lista[j+1] = lista[j--]; // Trasladamos el valor y movemos el indice.
lista [j+1] = aux; // Ponemos el valor a ordenar en su sitio.
}
}

       
       

public static void ordenacionShell() {
int arreglo[]={5,4,2,1,3,6}, aux, salto;
System.out.println("Se muestra el contenido de la serie de datos numericos...");
for(int i=0;i<=5;i++){
System.out.print(arreglo[i]+ " - ");
}

//Ordenamiento por el metodo Shell

boolean cambios;

for (salto = 6 / 2; salto != 0; salto /= 2) {
cambios = true;
while (cambios) {   // Mientras se intercambie algún elemento                                         
cambios = false;
for (int i = salto; i < 6; i++)   // se da una pasada
{
if (arreglo[i - salto] > arreglo[i]) {       // y si están desordenados
aux = arreglo[i];                  // se reordenan
arreglo[i] = arreglo[i - salto];
arreglo[i - salto] = aux;
cambios = true;              // y se marca como cambio.                                   
}
}
}
}

//Mostrando el arreglo ordenando
System.out.println("\n\nSe esta imprimiento los valores del arreglo en forma ascendente");
for(int i=0;i<6;i++){
System.out.print(arreglo[i]+ " - ");
}
System.out.println();
}

       
       
       
public static void listaPersonas() {
//creamos el ArrayList que contendrá la altura de los alumnos
      ArrayList<Double> altura = new ArrayList();
      int N;
      double media;
      //obtenemos el número de alumnos de la clase
      N = numeroAlumnos();
      //leemos la altura de los N alumnos
      leerAlturas(altura, N);
      //calculamos la media
      media = calcularMedia(altura);
      //mostramos los resultados
      mostrarResultados(altura, media);
   }

   //Método para pedir por teclado el número de alumnos de la clase
   public static int numeroAlumnos() {
      Scanner sc = new Scanner(System.in);
      int n;
      do {
            System.out.print("Introduce numero de alumnos: ");
            n = sc.nextInt();
      } while (n < 1);
      return n;
   }

   //Este método recibe el ArrayList y el número de alumnos de la clase
   //Pide por teclado la altura de todos los alumnos y las guarda en el ArrayList
   public static void leerAlturas(ArrayList<Double> a, int n) {
      Scanner sc = new Scanner(System.in);
      int i;
      double alto;
      for (i = 1; i <= n; i++) {
           do {
                 System.out.print("Alumno " + i + " altura: ");
                 alto = sc.nextDouble();
           } while (alto <= 0);
           a.add(alto); //añade la altura al final del ArrayList
      }
  }

   //Este método recibe el ArrayList con todas las alturas
   //calcula y devuelve la media
   public static double calcularMedia(ArrayList<Double> a) {
      double media = 0;
      for (Double d : a) {
            media = media + d;
      }
      return media / a.size();
   }

   //Muestra la altura de todos los alumnos, la media y calcula y muestra
   //cuantos alumnos hay con altura superior a la media
   //y cuántos con altura inferior
   public static void mostrarResultados(ArrayList<Double> a, double media) {                               
      int superior = 0, inferior = 0;
      System.out.println("alturas introducidas: ");
      System.out.println(a);
      for (Double d : a) {
            if (d > media)
                superior++;
            else if (d < media)
                       inferior++;
      }
      System.out.printf("Media: %.2f %n", media);
      System.out.println("Hay " + superior + " alumnos mas altos que la media");
      System.out.println("Hay " + inferior + " alumnos mas bajos que la media");
}

   
   
   
public static void metodoPilas() {

        //Entrada (Expresión en Postfija)
        String expr = "2 23 6 + * 1 -"; // equivale a 2*(23+6)-1
        String[] post = expr.split(" ");   

        //Declaración de las pilas
        Stack < String > E = new Stack < String > (); //Pila entrada
        Stack < String > P = new Stack < String > (); //Pila de operandos

        //Añadir post (array) a la Pila de entrada (E)
        for (int i = post.length - 1; i >= 0; i--) {
          E.push(post[i]);
        }

        //Algoritmo de Evaluación Postfija
        String operadores = "+-*/%";
        while (!E.isEmpty()) {
          if (operadores.contains("" + E.peek())) {
            P.push(evaluar(E.pop(), P.pop(), P.pop()) + "");
          }else {
            P.push(E.pop());
          }
        }

        //Mostrar resultados:
        System.out.println("Expresion: " + expr);
        System.out.println("Resultado: " + P.peek());

      }

      private static int evaluar(String op, String n2, String n1) {
        int num1 = Integer.parseInt(n1);
        int num2 = Integer.parseInt(n2);
        if (op.equals("+")) return (num1 + num2);
        if (op.equals("-")) return (num1 - num2);
        if (op.equals("*")) return (num1 * num2);
        if (op.equals("/")) return (num1 / num2);
        if (op.equals("%")) return (num1 % num2);
        return 0;
}

public static void metodoColas() {
        /*Creamos la Cola Indicando el tipo de dato*/
        Queue cola=new LinkedList();
        /*Insertamos datos*/
            cola.offer(3);
            cola.add(14);
            cola.offer(12);
            cola.add(7);
            cola.offer(10);
        /*Impresion de la Cola llena con los datos*/
        System.out.println("Cola llena: " + cola);
        /*Estructura repetitiva para desencolar*/
        while(cola.poll()!=null){//Desencolamos y el valor se compara con null
            System.out.println(cola.peek());//Muestra el nuevo Frente
        }
        /*Muestra null debido a que la cola ya esta vacia*/
        System.out.println(cola.peek());     
}
}

Existe un ultimo detalle, cuando seleccionas una opción, la consola muestra el programa seleccionado cumple con su propósito y al terminar regresa de vuelta al menú, ya le busque pero no se como puedo hacer para que el menú pregunte "desea regresar al menú principal" o darle la opción al usuario de terminar el programa, me podrías ayudar por favor?

Nuevamente, muchas gracias por todo.

Quedo atento a tus amables instrucciones.
ElMike

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re: Ayuda con Menú en Java
« Respuesta #3 en: 21 de Julio 2022, 01:33 »
Primero, recuerda que las convenciones de Java indican que los nombres de las clases han de comenzar en mayúscula.

Mal  >:(
Código: [Seleccionar]
class funciones {
Bien ;)
Código: [Seleccionar]
class Funciones {
Esto no afecta al funcionamiento, pero conviene adaptarse a las convenciones del lenguaje.
Así al compartir código entre programadores, todos nos regimos por los mismos usos y costumbres.

Al margen de esto, para lograr una "pausa", yo lo que hago es usar una lectura con el Scanner acompañado de un mensaje en pantalla para que el usuario pulse ENTER.
Esa lectura no impide que el usuario pueda teclear lo que quiera antes de pulsar ENTER, pero no afecta al programa, más allá de quedar un poco feo que el usuario escriba.

Lo puedes poner al final del cuerpo del bucle principal. Lo marco en color azul.

Citar
public class Menu {
   public static void main(String[] args) {
      Scanner sn = new Scanner(System.in);

      boolean salir = false;
      int opcion;

      while(!salir){

         System.out.println("\n\t-- Programa que muestra un menu con opciones de ejercicios de las diferentes estructuras --");

         System.out.println("1.- Funciones");
         System.out.println("2.- Recursividad");
         System.out.println("3.- Metodo de ordenacion de insercion");
         System.out.println("4.- Metodo de ordenacion Shell");
         System.out.println("5.- Listas de personas");
         System.out.println("6.- Pilas");
         System.out.println("7.- Colas");
         System.out.println("8.- Salir");

         try{

            System.out.println("Seleccione la opcion deseada: ");
            opcion = sn.nextInt();

            switch (opcion){
            case 1:
               Ejercicios.funciones();
               break;
            case 2:
               Ejercicios.recursividad();
               break;
            case 3:
               Ejercicios.ordenacionInsercion();
               break;
            case 4:
               Ejercicios.ordenacionShell();
               break;
            case 5:
               Ejercicios.listaPersonas();
               break;
            case 6:
               Ejercicios.metodoPilas();
               break;
            case 7:
               Ejercicios.metodoColas();
               break;
            case 8:
               salir=true;
               break;   
            default:   
               System.out.println("Las opciones son entre 1 y 8");

            }
         }
         catch(InputMismatchException e){
            System.out.println("Debes seleccionar un numero de opcion");
            sn.next();
         }
         
         //Pausa en la ejecución del programa
         System.out.println("\n\t\t---Pulse ENTER para continuar---");
         sn.nextLine();

      }

      System.out.println("Gracias por utilizar el sistema, hasta luego... ");
      sn.close();
   }
   
}

Sin embargo, si lo pruebas, no va a funcionar bien :P
¿Por qué?
Porque para hacer la pausa necesitamos un nextLine(). Y antes de usar este nextLine(), hemos hecho lecturas con nextInt().

Y siempre que leemos con nextInt(), si luego hacemos una lectura con nextLine(), esta va a fallar.
Bueno, en realidad no falla, pero el programa no espera a que el usuario teclee nada, porque el nextLine() se encuentra con "restos" que ha dejado el nextInt() y piensa equivocadamente que el usuario ya ha pulsado ENTER.

Para solucionarlo, habría que cambiar todas las lecturas y hacerlas con nextLine().
Y cuando queramos enteros, pues parseamos lo leído con nextLine().

Dicho parseo, puede generar una excepción si el usuario introduce letras en lugar de números. Pero como ya tenemos un try catch en el programa, ampliamos las excepciones que puede capturar para cubrir todas las posibilidades:

Citar
public class Menu {
   public static void main(String[] args) {
      Scanner sn = new Scanner(System.in);

      boolean salir = false;
      int opcion;

      while(!salir){

         System.out.println("\n\t-- Programa que muestra un menu con opciones de ejercicios de las diferentes estructuras --");

         System.out.println("1.- Funciones");
         System.out.println("2.- Recursividad");
         System.out.println("3.- Metodo de ordenacion de insercion");
         System.out.println("4.- Metodo de ordenacion Shell");
         System.out.println("5.- Listas de personas");
         System.out.println("6.- Pilas");
         System.out.println("7.- Colas");
         System.out.println("8.- Salir");

         try{

            System.out.println("Seleccione la opcion deseada: ");
            opcion = Integer.parseInt(sn.nextLine());

            switch (opcion){
            case 1:
               Ejercicios.funciones();
               break;
            case 2:
               Ejercicios.recursividad();
               break;
            case 3:
               Ejercicios.ordenacionInsercion();
               break;
            case 4:
               Ejercicios.ordenacionShell();
               break;
            case 5:
               Ejercicios.listaPersonas();
               break;
            case 6:
               Ejercicios.metodoPilas();
               break;
            case 7:
               Ejercicios.metodoColas();
               break;
            case 8:
               salir=true;
               break;   
            default:   
               System.out.println("Las opciones son entre 1 y 8");

            }
         }
         catch(InputMismatchException | NumberFormatException e){
            System.out.println("Debes seleccionar un numero de opcion");
         }

         
         //Pausa en la ejecución del programa
         System.out.println("\n\t\t---Pulse ENTER para continuar---");
         sn.nextLine();

      }

      System.out.println("Gracias por utilizar el sistema, hasta luego... ");
      sn.close();
   }
   
}


Con esto ahora, siempre hace una pausa tras ejecutarse un ejercicio, para que el usuario pueda ver los resultados antes de que vuelva a aparecer el menú
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".