Erro: Exception in thread main java.util.NoSuchElementException

Olá, boa tarde. Sou novo na programação em java e estou tendo esse erro: Exception in thread main java.util.NoSuchElementException (…) quando tento acessar a opção -1 do switch case presente no método AlteraDadosPessoais da classe DadosPessoais. A ideia seria retornar ao menu principal do método main da classe Cliente, mas acontece o erro. (Quando ocorre senha inválida, também vai para o mesmo erro). Alguem sabe como consertar esse erro? Seguem abaixo os códigos:

import java.util.Scanner;
public class Cliente{
public static void Menu() {
System.out.println(“Para saque digite: 0”);
System.out.println(“Para deposito digite: 1”);
System.out.println(“Para alterar seus dados pessoais digite: 3”);
System.out.println(“Para encerrar a cessão digite: -1”);
}

public static void main(String[] args) {
	Scanner en = new Scanner(System.in);
		Conta conta1 = new Conta(en.nextLine(),en.nextLine(),en.nextLine(), 
		en.nextLine(),en.nextLine(), en.nextInt(),en.nextFloat(),en.nextFloat());
		
		Menu();
		short escolha = en.nextShort();
		
		while(escolha!=-1) {
			switch (escolha) {
				case 0: conta1.Saque(en.nextFloat());
					break;
				case 1: conta1.Deposito(en.nextFloat());
					break;
				case 3: conta1.AlteraDadosPessoais();
					break;
				default: System.out.println("Opção inválida");
					break;
			}
			System.out.println();
			Menu();
			escolha = en.nextShort();
		}
		System.out.println("Obrigado pela preferência");
	en.close();
	
}

}

public class Conta extends DadosPessoais{
private int numeroConta;
private float saldo;
private float limite;

public Conta(String nome, String Senha, String endereco, String nacionalidade, String estadoCivil,
							   int numeroConta,float saldo,float limite){

	super(nome,Senha,endereco,nacionalidade,estadoCivil);
	this.numeroConta = numeroConta;
	this.saldo = saldo;
	this.limite = limite;
	
}


public void Saque(float valor) {
	if(this.saldo<valor)
		System.out.println("Saldo insuficiente");
	else {
		this.saldo = this.saldo - valor;
		System.out.println("Saldo atual: " + this.saldo);
	}
		
}

public void Deposito(float valor) {
	if(this.saldo + valor>this.limite) 
		System.out.println("Fora do limite permitido");
	else {
		this.saldo = this.saldo + valor;
		System.out.println("Saldo atual: " + this.saldo);
	}
		
	
}

}

import java.util.Scanner;
public class DadosPessoais{
private String nome,endereco,estadoCivil,nacionalidade,Senha;

public DadosPessoais (String nome, String Senha, String endereco, String nacionalidade, String estadoCivil) {
	
	this.nome = nome;
	this.Senha = Senha;
	this.endereco = endereco;
	this.nacionalidade = nacionalidade;
	this.estadoCivil = estadoCivil;
}


public static void MenuAlterar() {
	System.out.println("Para alterar o nome diga: 0");
	System.out.println("Para alterar a Senha diga: 1");
	System.out.println("Para alterar o Endereço diga: 2");
	System.out.println("Para alterar Estado Civil diga: 3");
	System.out.println("Para voltar ao menu principal digite: -1");
}


public void AlteraDadosPessoais(){
	String senhaDeProva;
	short escolhaAlterar;
	Scanner in = new Scanner(System.in);
		System.out.println("Digite sua Senha");
		senhaDeProva = new String(in.nextLine());
		
		if(senhaDeProva.equals(this.Senha)){
			this.MenuAlterar();
			escolhaAlterar = in.nextShort();
			while(escolhaAlterar!=-1){
				switch (escolhaAlterar) {
					case 0: this.nome = new String(in.next()); 
							System.out.println("Alteração feita com sucesso!");
						break;
					case 1: this.Senha = in.next(); 
							System.out.println("Alteração feita com sucesso!");
						break;
					case 2: this.endereco = in.next(); 
							System.out.println("Alteração feita com sucesso!");
						break;
					case 3: this.estadoCivil = in.next(); 
							System.out.println("Alteração feita com sucesso!");
						break;
					default: System.out.println("Opção inválida");
						break;
				}
				System.out.println();
				this.MenuAlterar();
				escolhaAlterar = in.nextShort();
			}
			in.close();
		}else{
			System.out.println("Senha inválida");
		}
		
			
	in.close();
			
}

}

Tira todos close q vc tem e testa.

Rapaz, quem diria! Deu certo! Aprendi que toda vez que abro um objeto tipo Scanner eu preciso fecha-lo. Será que aprendi errado ou tem como usar o .close() sem bugar?
De qqr forma, valeu ai pela ajuda!

O Scanner utilizando o System.in nunca fechei ou ouvi falar que teria que fechar, justamente pq se fechar, vai fechar o System.in (entrada padrão do sistema para o console), oq n se faz.