Ciao a tutti,
ho iniziato da poco a studiare il Java. Il libro che sto usando spiega bene i concetti più che la pratica in sè, e consiglia di provare da soli a progettare un programma e scrivere un codice. Ho pensato di fare una piccola avventura testuale. Sono riuscito a fare senza errori il primo passo, cioè quello di avere delle stanze e di potermi muovere tra esse. Ho costruito due classi per farlo, Stanza e Gioco. Ne ho aggiunta una terza Porta, per avere delle uscite bloccate, ma qui ho avuto i primi errori. Chiedo a voi come mai.
codice:
import java.util.Scanner;

public class Stanza {
    
    private String dir;
    private Scanner s;
    private Stanza[] usciteStanza;
    private String Descrizione;
    private Boolean[] usciteChiuse;
    private Porta porta;
    private String[] porteChiuse;
    private Boolean statoPorta;
    
    //Le stanze adiacenti possibili
    public void setUscite(Stanza uscite[]){
        this.usciteStanza = uscite;
    }
    
    public Stanza[] getUscite(){
        return usciteStanza;
    }
    //Richiesta di una direzione in input
    public Scanner getDirezione(){
        System.out.println("Dove vorresti muoverti?");
        Scanner s = new Scanner(System.in);
        return s;
    }
    
    //Controllo la direzione inserita.
    public void miMuovo(Scanner s){
    dir = s.nextLine();
    String[] comeSiApre = this.getPorteChiuse();
    switch(dir){
        case "n":
            if (usciteChiuse[0]==true){
                statoPorta = porta.Aprimi(comeSiApre[0]);
                }
            Stanza Stanza1 = usciteStanza[0];
            Stanza1.getUscite();
            Stanza1.getDescrizione();
            s = Stanza1.getDirezione();
            Stanza1.miMuovo(s);
            break;
        case "s":
            Stanza Stanza2 = usciteStanza[1];
            Stanza2.getUscite();
            Stanza2.getDescrizione();
            s = Stanza2.getDirezione();
            Stanza2.miMuovo(s);
            break;
        case "o":
            Stanza Stanza3 = usciteStanza[2];
            Stanza3.getUscite();
            Stanza3.getDescrizione();
            s = Stanza3.getDirezione();
            Stanza3.miMuovo(s);
            break;
        case "e":
            Stanza Stanza4 = usciteStanza[3];
            Stanza4.getUscite();
            Stanza4.getDescrizione();
            s = Stanza4.getDirezione();
            Stanza4.miMuovo(s);
            break;
        }
    }
    //La descrizione della stanza.
    public String setDescrizione(String Descrizione){
        return this.Descrizione = Descrizione;
    }
    public void getDescrizione(){
        System.out.println(Descrizione);
    }

    public Boolean[] getUsciteChiuse() {
        return usciteChiuse;
    }

    public void setUsciteChiuse(Boolean[] usciteChiuse) {
        this.usciteChiuse = usciteChiuse;
    }

    public String[] getPorteChiuse() {
        return porteChiuse;
    }

    public void setPorteChiuse(String[] porteChiuse) {
        this.porteChiuse = porteChiuse;
    }

}
codice:
import java.util.Scanner;
public class Gioco {
public static void main(String[] args){
    Stanza Terreno1 = new Stanza();
    Stanza Terreno2 = new Stanza();
    Stanza Terreno3 = new Stanza();
    Stanza[] Terreno1Uscite = {Terreno2,Terreno3}; //Stanze adiacenti alla stanza
    Stanza[] Terreno2Uscite = {Terreno3,Terreno1};
    Stanza[] Terreno3Uscite = {Terreno1,Terreno2};
    Terreno1.setUscite(Terreno1Uscite);
    Terreno2.setUscite(Terreno2Uscite);
    Terreno3.setUscite(Terreno3Uscite);
    Terreno1.setDescrizione("Bevenuto nel Terreno1"); 
    Terreno2.setDescrizione("Bevenuto nel Terreno2");
    Terreno3.setDescrizione("Benvenuto nel Terreno3");
    Terreno1.getDescrizione();
    String[] Terreno1PorteChiuse = {"codice","codice"}; //Come si aprono le porte nelle varie direzioni
    Terreno1.setPorteChiuse(Terreno1PorteChiuse);
    Boolean[] Terreno1UsciteChiuse = {true,true}; //Quali direzioni sono chiuse
    Terreno1.setUsciteChiuse(Terreno1UsciteChiuse); 
    Scanner dir = Terreno1.getDirezione(); //prendo la prima direzione
    Terreno1.miMuovo(dir); 
}
}
codice:
import java.util.Scanner;

public class Porta {
    
    private String s;
    
    
    public Boolean Aprimi(String s){
        System.out.println("La porta è chiusa");
        switch(s){
        case "codice":
            System.out.println("Serve un codice per aprirla!");
            Scanner stringaInserita = this.getInput();
            String codiceInserito = stringaInserita.nextLine();
            if (codiceInserito=="1234"){
                return true;
            }
            
        }
        return false;
    }


    private Scanner getInput(){
        System.out.println("Dimmi come");
        Scanner inputInserito = new Scanner(System.in);
        return inputInserito;
    }
}
E restituisce questo messaggio di errore:
Exception in thread "main" java.lang.NullPointerException
at Stanza.miMuovo(Stanza.java:35)
at Stanza.miMuovo(Stanza.java:55)
at Stanza.miMuovo(Stanza.java:55)
at Gioco.main(Gioco.java:22)
Quando inserisco come input "n".

Chi mi può aiutare?