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.
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;
}
}
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);
}
}
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?