Guten Abend zusammen,
ich programmiere mein erstes Programm (ein Text Adventure), und ich habe dazu ein Inventar System geschrieben in dem die Waffen
in einem Array (CharInventory[] (int, String, boolean, boolean) = (WaffenID, WaffenName, Waffe im Inventar?, Waffe ausgerüstet?) gespeichert werden.
Das funktioniert auch einwandfrei.
dazu wollte ich jetzt noch ein system schreiben das nachschaut, dass ich nur eine Waffe gleichzeitig ausgerüstet habe. Nur bei dieser bekomme ich eine NullPointerException und ich weiß einfach nicht warum.
Hier ist der Code von der Klasse CharInventory:
[CODE lang="java" title="CharInventory" highlight="60-78"]public class CharInventory {
public CharInventory (int waffenID, String waffenName, boolean waffenDa, boolean waffenAusgeruestet){
this.waffenID = waffenID;
this.waffenName = waffenName;
this.waffenDa = waffenDa;
this.waffenAusgeruestet = waffenAusgeruestet;
}
////////////////////////// Konstruktor ///////////////////////////////////////////
// Attribute
public int waffenID;
public String waffenName;
public boolean waffenDa;
public boolean waffenAusgeruestet;
public static boolean waffenZurueksetzen = false;
// Attribute
// ZwischenSpeicher
public int tempID;
// ZwischenSpeicher
CharInventory [] dieWaffe = new CharInventory[100]; // Array für das waffen Inventar
public void waffenErstellen(int waffenID, String waffenName, boolean waffenDa, boolean waffenAusgeruestet){
dieWaffe [0] = new CharInventory(9999, "Default", false, false); // setzt das erste array auf 9999, damit die WaffenID mit der Array[Nummer] übereinstimmt
if (waffenZurueksetzen == false) {
for (int i = 1; i < dieWaffe.length; i++) {
dieWaffe = new CharInventory(0, "Default", false, false); // setzt das ganze Array (Inventar) auf Default
}
}
this.waffenZurueksetzen = true; // stetzt das zurücksetzen des Arrays außerkraft!!!!!
for (int i = 1; i <= dieWaffe.length; i++) {
if (dieWaffe.waffenID == 0) {
tempID = i; break;
} else if (dieWaffe.waffenID == (dieWaffe.length -1)){ // schaut nach welcher Platz im Array noch keine Waffe gespeichert hat
System.out.println("Es ist kein Platz mehr im Waffen Inventar"); break; // und gibt die Platznummer weiter -TempID-
}
}
dieWaffe [tempID] = new CharInventory(waffenID, waffenName, waffenDa, waffenAusgeruestet); // hier wird auf dem Leeren Platz eine neue Waffe erstellt
}
public void setWaffenAusgeruestet(boolean waffenAusgeruestet){
if (waffenAusgeruestet == true){
for (int i = 1; i < dieWaffe.length; i++) {
if (dieWaffe.waffenAusgeruestet == true && (dieWaffe.waffenID != 1 || dieWaffe.waffenID != 2) && dieWaffe.waffenID != waffenID) { // (1) Fäuste sind immer ausgerüstet
dieWaffe.waffenAusgeruestet = false; // (2) Fackel kann auch mit einer Waffe Ausgrüstet werden
System.out.println(" Du hast von der Waffe -" + dieWaffe.waffenName + "- auf die Waffe -" + waffenName + "- gewechselt."); break;
} // end of if-else
}
}
// // das ist eine Schleife um zu schauen ob was ausgerüstet ist oder nicht
// // damit nicht zwei Sachen gleichzeitig ausgerüstet werden
// // wenn man eine Waffe neu ausrüstet wird die alte Waffe abgelegt
if (waffenDa == true) {
this.waffenAusgeruestet=waffenAusgeruestet;
} else {
System.out.println("Du hast diese Waffe nicht im Inventar. Du kannst sie nicht ausrüsten");
}
}
////////////////////////// Getter und Setter ///////////////////////////////////////////
public void setWaffenDa(boolean waffenDa){
this.waffenDa=waffenDa;
}
} // end of class CharInventory
[/CODE]
In der Main habe ein Objekt "waffenInvetar" erstellt um auf die Klasse zugreifen zu können.
Und das ist der Code der in der Main aufgerufen wird:
[CODE lang="java" title="Main" highlight="4"]CharInventory waffenInventar = new CharInventory(9999, "Default", false, false);
waffenInventar.waffenErstellen(2, "normale Fackel", true, false);
waffenInventar.dieWaffe[2].setWaffenAusgeruestet(true); // Fackel wird ausgerühstet
[/CODE]
und diesen Fehler bekomme ich:
Exception in thread "main" java.lang.NullPointerException
at CharInventory.setWaffenAusgeruestet(CharInventory.java:120)
at TA_Main.main(TA_Main.java:170)
Zeile 120 ist Zeile 64 hier im Beispiel
Zeile 170 ist Zeile 4 hier im Beispiel
wie gesagt es ist mein erstes Programm das ich schreibe, also seit nicht zu hart zu mir xD.
mit freundlichen Grüßen und danke im Vorraus
HighHorizon
ich programmiere mein erstes Programm (ein Text Adventure), und ich habe dazu ein Inventar System geschrieben in dem die Waffen
in einem Array (CharInventory[] (int, String, boolean, boolean) = (WaffenID, WaffenName, Waffe im Inventar?, Waffe ausgerüstet?) gespeichert werden.
Das funktioniert auch einwandfrei.
dazu wollte ich jetzt noch ein system schreiben das nachschaut, dass ich nur eine Waffe gleichzeitig ausgerüstet habe. Nur bei dieser bekomme ich eine NullPointerException und ich weiß einfach nicht warum.
Hier ist der Code von der Klasse CharInventory:
[CODE lang="java" title="CharInventory" highlight="60-78"]public class CharInventory {
public CharInventory (int waffenID, String waffenName, boolean waffenDa, boolean waffenAusgeruestet){
this.waffenID = waffenID;
this.waffenName = waffenName;
this.waffenDa = waffenDa;
this.waffenAusgeruestet = waffenAusgeruestet;
}
////////////////////////// Konstruktor ///////////////////////////////////////////
// Attribute
public int waffenID;
public String waffenName;
public boolean waffenDa;
public boolean waffenAusgeruestet;
public static boolean waffenZurueksetzen = false;
// Attribute
// ZwischenSpeicher
public int tempID;
// ZwischenSpeicher
CharInventory [] dieWaffe = new CharInventory[100]; // Array für das waffen Inventar
public void waffenErstellen(int waffenID, String waffenName, boolean waffenDa, boolean waffenAusgeruestet){
dieWaffe [0] = new CharInventory(9999, "Default", false, false); // setzt das erste array auf 9999, damit die WaffenID mit der Array[Nummer] übereinstimmt
if (waffenZurueksetzen == false) {
for (int i = 1; i < dieWaffe.length; i++) {
dieWaffe = new CharInventory(0, "Default", false, false); // setzt das ganze Array (Inventar) auf Default
}
}
this.waffenZurueksetzen = true; // stetzt das zurücksetzen des Arrays außerkraft!!!!!
for (int i = 1; i <= dieWaffe.length; i++) {
if (dieWaffe.waffenID == 0) {
tempID = i; break;
} else if (dieWaffe.waffenID == (dieWaffe.length -1)){ // schaut nach welcher Platz im Array noch keine Waffe gespeichert hat
System.out.println("Es ist kein Platz mehr im Waffen Inventar"); break; // und gibt die Platznummer weiter -TempID-
}
}
dieWaffe [tempID] = new CharInventory(waffenID, waffenName, waffenDa, waffenAusgeruestet); // hier wird auf dem Leeren Platz eine neue Waffe erstellt
}
public void setWaffenAusgeruestet(boolean waffenAusgeruestet){
if (waffenAusgeruestet == true){
for (int i = 1; i < dieWaffe.length; i++) {
if (dieWaffe.waffenAusgeruestet == true && (dieWaffe.waffenID != 1 || dieWaffe.waffenID != 2) && dieWaffe.waffenID != waffenID) { // (1) Fäuste sind immer ausgerüstet
dieWaffe.waffenAusgeruestet = false; // (2) Fackel kann auch mit einer Waffe Ausgrüstet werden
System.out.println(" Du hast von der Waffe -" + dieWaffe.waffenName + "- auf die Waffe -" + waffenName + "- gewechselt."); break;
} // end of if-else
}
}
// // das ist eine Schleife um zu schauen ob was ausgerüstet ist oder nicht
// // damit nicht zwei Sachen gleichzeitig ausgerüstet werden
// // wenn man eine Waffe neu ausrüstet wird die alte Waffe abgelegt
if (waffenDa == true) {
this.waffenAusgeruestet=waffenAusgeruestet;
} else {
System.out.println("Du hast diese Waffe nicht im Inventar. Du kannst sie nicht ausrüsten");
}
}
////////////////////////// Getter und Setter ///////////////////////////////////////////
public void setWaffenDa(boolean waffenDa){
this.waffenDa=waffenDa;
}
} // end of class CharInventory
[/CODE]
In der Main habe ein Objekt "waffenInvetar" erstellt um auf die Klasse zugreifen zu können.
Und das ist der Code der in der Main aufgerufen wird:
[CODE lang="java" title="Main" highlight="4"]CharInventory waffenInventar = new CharInventory(9999, "Default", false, false);
waffenInventar.waffenErstellen(2, "normale Fackel", true, false);
waffenInventar.dieWaffe[2].setWaffenAusgeruestet(true); // Fackel wird ausgerühstet
[/CODE]
und diesen Fehler bekomme ich:
Exception in thread "main" java.lang.NullPointerException
at CharInventory.setWaffenAusgeruestet(CharInventory.java:120)
at TA_Main.main(TA_Main.java:170)
Zeile 120 ist Zeile 64 hier im Beispiel
Zeile 170 ist Zeile 4 hier im Beispiel
wie gesagt es ist mein erstes Programm das ich schreibe, also seit nicht zu hart zu mir xD.
mit freundlichen Grüßen und danke im Vorraus
HighHorizon