Validando Seleção de um menu simples

Olá,sou iniciante em Java e fiz uma calculadora simples para estudo,porém não consigo validar a escolha do usuário,ou seja as escolhas são 1,2,3,4,5,6,7,8 e 0 se ele digitar algum número além desses o programa deveria parar(vai ficar mais claro se eu mostrar o código).

tentei assim:


Scanner entrada = new Scanner (System.in);
int selecao = 0;
boolean OpcaoInvalida = false;
int opcoes[] = {0,1,2,3,4,5,6,7,8};

System.out.println("Digite sua opção:");
selecao = entrada.nextInt();

for (int i = 0 ; i <8 ; i++){
    if(opcoes[i] != selecao){
        System.out.println ("Opção inválida!"); 
    }else{
         //Resto do código...
    }

}

O código compilou corretamente,porém sempre que eu digito uma opção,mesmo sendo válida ela é considerada inválida.

Restante do código:

Funções da calculadora

class FuncoesCalculadora{
  
  void Soma (Double n1, Double n2){
    Double soma;
    soma  = n1 + n2;
    System.out.println(soma);
  }
  
  void Multiplicacao ( Double n1 , Double n2){
    Double produto ;
    produto = n1 * n2;
    System.out.println(produto);
  }
  
  void Divisao ( Double n1 , Double n2 ){
    Double divisao ;
    divisao = n1 / n2;
    System.out.println (divisao);
  }
  
  void Subtracao ( Double n1 , Double n2 ){
    Double subtracao ;
    subtracao = n1 - n2;
    System.out.println(subtracao);
  }
  
  void LogaritmoNatural ( Double n1){
    Double logaritmo;
    logaritmo = Math.log(n1);
    System.out.println(logaritmo);
  }
  
  void GerarAleatorio (){
    int aleatorio;
    aleatorio = (int) (Math.random () * 10);
    System.out.println(aleatorio);
  }
  
  void RaizQuadrada(Double n1){
    Double raiz;
    raiz = Math.sqrt(n1);
    System.out.println(raiz);
  }
  
  void Potencia(Double n1 , Double n2){
    Double potencia;
    potencia = Math.pow(n1,n2);
    System.out.println(potencia);
  }
}
  

Menu da calculadora

import java.util.Scanner;

class MenuCalculadora{
  
  
  void menu (){
  FuncoesCalculadora Executor = new FuncoesCalculadora();
  boolean sair = false ;
  Scanner entrada = new Scanner (System.in);
  int opcoes[] = {0 , 1 , 2 ,3 ,4 ,5 ,6 ,7 ,8 };
  int selecao;
  Double n1,n2;
    
  System.out.println ( "_______________Calculadora______________");
  System.out.println ("(1)Somar dois números.");
  System.out.println ("(2)Subtrair dois números.");
  System.out.println ("(3)Multiplicar dois números.");
  System.out.println ("(4)Dividir dois números.");
  System.out.println ("(5)Gerar um número aleatório entre 0 e 10.");
  System.out.println ("(6)Obter o valor do Logaritmo Natural de um número.");
  System.out.println ("(7)Obter o valor da raíz quadrada de um número.");
  System.out.println ("(8)Potência.");
  System.out.println ("(0)Sair.");
  System.out.println ("___________________________________________");
  
  while (sair == false){
    selecao = entrada.nextInt();
    switch (selecao){
      case 1:
        System.out.println ("Digite o primeiro número:");
        n1 = entrada.nextDouble();
        System.out.println ();
        System.out.println ("Digite o segundo número:");
        n2 = entrada.nextDouble ();
        Executor.Soma(n1 , n2);
        System.out.println("digite outra opção:");
        break;
        
      case 2:
        System.out.println ("Digite o primeiro número:");
        n1 = entrada.nextDouble();
        System.out.println ("Digite o segundo número:");
        n2 = entrada.nextDouble();
        Executor.Subtracao(n1 , n2);
        System.out.println("digite outra opção:");
        break;
        
      case 3 :
        System.out.println ("Digite o primeiro número:");
        n1 = entrada.nextDouble();
        System.out.println ("Digite o segundo número:");
        n2 = entrada.nextDouble();
        Executor.Multiplicacao(n1 , n2);
        System.out.println("digite outra opção:");
        break;
        
      case 4 :
        System.out.println ("Digite o primeiro número:");
        n1 = entrada.nextDouble();
        System.out.println ("Digite o segundo número:");
        n2 = entrada.nextDouble();
        Executor.Divisao(n1 , n2);
        System.out.println("digite outra opção:");
        break;
        
      case 5:
        Executor.GerarAleatorio();
        System.out.println("digite outra opção:");
        break;
        
      case 6:
        System.out.println ("Digite o número:");
        n1 = entrada.nextDouble();
        Executor.LogaritmoNatural(n1);
        System.out.println("digite outra opção:");
        break;
        
      case 7:
        System.out.println ("Digite o número:");
        n1 = entrada.nextDouble();
        Executor.RaizQuadrada(n1);
        System.out.println("digite outra opção:");
        break;
        
      case 8 :
        System.out.println ("Digite o número:");
        n1 = entrada.nextDouble();
        System.out.println ("Digite o Expoente:");
        n2 = entrada.nextDouble();
        Executor.Potencia(n1 , n2);
        System.out.println("digite outra opção:");
        break;
      case 0:
        sair = true;
        break;
        
      default :
        System.out.println ("Nenhuma opção Selecionada.");
        break;
    }//Switch
  }//While
  }//Menu
}//Classe

Classe para iniciar a Calculadora;

public class IniciarCalculadora{
  public static void main (String args []){
    MenuCalculadora Iniciar = new MenuCalculadora ();
    
    Iniciar.menu();
  }
}

Onde eu tentei implementar o validador:


import java.util.Scanner;

class MenuCalculadora{
  
  
  void menu (){
  FuncoesCalculadora Executor = new FuncoesCalculadora();
  boolean sair = false , OpcaoInvalida = false;
  Scanner entrada = new Scanner (System.in);
  int opcoes[] = {0 , 1 , 2 ,3 ,4 ,5 ,6 ,7 ,8 };
  int selecao;
  Double n1,n2;
    
  System.out.println ( "_______________Calculadora______________");
  System.out.println ("(1)Somar dois números.");
  System.out.println ("(2)Subtrair dois números.");
  System.out.println ("(3)Multiplicar dois números.");
  System.out.println ("(4)Dividir dois números.");
  System.out.println ("(5)Gerar um número aleatório entre 0 e 10.");
  System.out.println ("(6)Obter o valor do Logaritmo Natural de um número.");
  System.out.println ("(7)Obter o valor da raíz quadrada de um número.");
  System.out.println ("(8)Potência.");
  System.out.println ("(0)Sair.");
  System.out.println ("___________________________________________");
  
  while (sair == false){
    selecao = entrada.nextInt();
  for(int i = 0 ; i <8 ; i++){
    if(opcoes[i] != selecao){
       System.out.println ("Opção inválida!");
   }else{
   
    switch (selecao){
      case 1:
        System.out.println ("Digite o primeiro número:");
        n1 = entrada.nextDouble();
        System.out.println ();
        System.out.println ("Digite o segundo número:");
        n2 = entrada.nextDouble ();
        Executor.Soma(n1 , n2);
        System.out.println("digite outra opção:");
        break;
        
      case 2:
        System.out.println ("Digite o primeiro número:");
        n1 = entrada.nextDouble();
        System.out.println ("Digite o segundo número:");
        n2 = entrada.nextDouble();
        Executor.Subtracao(n1 , n2);
        System.out.println("digite outra opção:");
        break;
        
      case 3 :
        System.out.println ("Digite o primeiro número:");
        n1 = entrada.nextDouble();
        System.out.println ("Digite o segundo número:");
        n2 = entrada.nextDouble();
        Executor.Multiplicacao(n1 , n2);
        System.out.println("digite outra opção:");
        break;
        
      case 4 :
        System.out.println ("Digite o primeiro número:");
        n1 = entrada.nextDouble();
        System.out.println ("Digite o segundo número:");
        n2 = entrada.nextDouble();
        Executor.Divisao(n1 , n2);
        System.out.println("digite outra opção:");
        break;
        
      case 5:
        Executor.GerarAleatorio();
        System.out.println("digite outra opção:");
        break;
        
      case 6:
        System.out.println ("Digite o número:");
        n1 = entrada.nextDouble();
        Executor.LogaritmoNatural(n1);
        System.out.println("digite outra opção:");
        break;
        
      case 7:
        System.out.println ("Digite o número:");
        n1 = entrada.nextDouble();
        Executor.RaizQuadrada(n1);
        System.out.println("digite outra opção:");
        break;
        
      case 8 :
        System.out.println ("Digite o número:");
        n1 = entrada.nextDouble();
        System.out.println ("Digite o Expoente:");
        n2 = entrada.nextDouble();
        Executor.Potencia(n1 , n2);
        System.out.println("digite outra opção:");
        break;
      case 0:
        sair = true;
        break;
        
      default :
        System.out.println ("Nenhuma opção Selecionada.");
        break;
    }//Switch
  }//While
  }//Menu
}//Else
}//Classe

Desculpem a confusão no código,pois estou aprendendo OO e não tenho muita noção ainda.

Sei que nesse caso o Switch resolveria meu problema apenas utilizando o Default , mas se o Switch não existisse,o que eu faria?

Agradeço a ajuda.

vc quer fazer o menu sem um switch?
faça com o if

[code]private void menu(){

int opcao=0;
Scanner sc=new Scanner(System.in);
System.out.println("Menu 1");
System.out.println("Menu 2");
System.out.println("Menu 3");
System.out.println("Menu 4");
opcao=sc.nextInt();


if(opcao==1)
	System.out.println("Vc escolheu a opcao 1");
else if(opcao==2)
	System.out.println("Vc escolheu a opcao 2");
else if(opcao==3)
	System.out.println("Vc escolheu a opcao 3");
else if(opcao==4)
	System.out.println("Vc escolheu a opcao 4");
else 
	System.out.println("ESTOU SAINDO");

}[/code]

o melhor seria vc colocar dentro de uma estrutura de repetição assim:

[code]private static void menu(){

int opcao=-1;
Scanner sc=new Scanner(System.in);
while(opcao!=0){
System.out.println("Menu 1");
System.out.println("Menu 2");
System.out.println("Menu 3");
System.out.println("Menu 4");
System.out.println("SAIR 0");
opcao=sc.nextInt();


if(opcao==1)
	System.out.println("Vc escolheu a opcao 1");
else if(opcao==2)
	System.out.println("Vc escolheu a opcao 2");
else if(opcao==3)
	System.out.println("Vc escolheu a opcao 3");
else if(opcao==4)
	System.out.println("Vc escolheu a opcao 4");
else if(opcao==0)
	System.out.println("TCHAU");
else 
	System.out.println("OPÇAO INVALIDA");

}

}[/code]

Ok , entendi,além de ser um pouco mais desorganizado do que o seu modo (na minha opinião) existe mais alguma desvantagem em usar o Switch?

Tenho uma outra dúvida,quando eu uso o Scanner para variáveis do tipo inteiro e o usuário insere algo que não um valor inteiro(String,por exemplo) ele recebe um Mismatch Error , tem como solucionar esse problema evitando esse erro?

Agradeço a ajuda,sua resposta não só esclareceu minha dúvida como também me ajudou a usar outros modos de realizar a minha tarefa,obrigado.