Also mache ich ein Projekt auf Arrays mit 2 Klassen und eine Tester-Klasse, aber ich bekomme immer eine NullPointerException Fehler. Ich weiß, was der Fehler im Wesentlichen bedeutet, und ich glaube, das Problem liegt in meiner Tank-Klasse, die unten angegeben ist, und in ihrem Konstruktor, um genauer zu sein. Die Tank-Klasse verwendet meine Klasse Fisch und soll ein Array von Fischen erstellen, und der Tester erstellt dann ein neues Tank-Objekt.nullPointerException Fehler treibt mich verrückt
public class Fish{
private int weight;
private String name;
public Fish(int w, String n){
weight = w;
name = n;
}
public void feed(){
weight = weight + 5;
}
public int getWeight(){
return weight;
}
public void setWeight(int w){
weight = w;
}
public void setName(String n){
name = n;
}
public String getName(){
return name;
}
public void starve(){
weight = weight -5;
}
public String toString(){
return name +"'s weight is: " + getWeight();
}
}
Hier ist die Tank-Klasse:
import java.util.ArrayList;
public class Tank{
private boolean isFish = true;
private int size;
private int index = 0;
private Fish[] fishArray;
private ArrayList<Fish> fishTank = new ArrayList<Fish>();
public Tank(int i){
fishArray = new Fish[i];
}
public Tank(){
fishArray = new Fish[10];
}
public void feedFish(int i){
fishArray[i].feed();
}
public void addFish(Fish f){
fishArray[index] = f;
size++;
}
public void starveFish(int i){
fishArray[i].starve();
}
public String getNameFor(int i){
return (fishArray[i].getName());
}
public int getWeightFor(int i){
return (fishArray[i].getWeight());
}
public int getTotalWeight(){
int w = 0;
for(int i =0; i< fishArray.length; i++){
w = fishArray[i].getWeight() + w;
}
return w;
}
public Fish getLargest(){
int heaviest = Integer.MIN_VALUE;
for(int i = 0; i < fishArray.length; i++){
if (fishArray[i].getWeight() > heaviest)
heaviest = fishArray[i].getWeight();
index = i;
}
return fishArray[index];
}
public Fish getSmallest(){
int small = Integer.MAX_VALUE;
for(int i = 0; i < fishArray.length; i++){
if (fishArray[i].getWeight() < small)
small = fishArray[i].getWeight();
index=i;
}
return fishArray[index];
}
public boolean doesExist(Fish f){
for(int i = 0; i < fishArray.length; i++){
if(fishArray[i].getWeight() == f.getWeight() && fishArray[i].getName().equalsIgnoreCase(f.getName()))
isFish = true;
else isFish = false;
}
return isFish;
}
public ArrayList<Fish> transfer(){
for(int i = 0; i < fishArray.length; i ++){
fishTank.add(fishArray[i]);}
return fishTank;
}
}
wie Sie sehen können, ich versuche, einen überladenen Konstruktor im Tank-Klasse zu bauen, die ein Array von Fisch-Objekte erstellt, aber ich bin etwas mit Schwierigkeiten, es zur Arbeit zu bringen. Ich glaube, das ist, wo mein Fehler von meinem Tester Klasse kommt:
public class TankTest{
public static void main(String[] args) {
Tank tank = new Tank();
tank.addFish(new Fish(10, "Doris"));
tank.addFish(new Fish(12, "Marlin"));
tank.addFish(new Fish(7, "nemo"));
tank.addFish(new Fish(15, "bubbles"));
tank.addFish(new Fish(18, "gill"));
tank.addFish(new Fish(5, "peach"));
tank.feedFish(3);
tank.starveFish(2);
tank.starveFish(4);
tank.feedFish(5);
tank.starveFish(1);
tank.feedFish(0);
tank.feedFish(2);
tank.starveFish(5);
tank.starveFish(1);
tank.feedFish(3);
tank.feedFish(1);
tank.feedFish(5);
tank.starveFish(0);
System.out.println("The total weight is : " + tank.getTotalWeight());
System.out.println("The largest Fish is : " + tank.getLargest().getName());
System.out.println("The smallest Fish is : " + tank.getSmallest().getName());
tank.transfer();
}
}
Jede mögliche Hilfe
Die Ausnahmebedingungsnachricht teilt Ihnen mit, in welcher Zeile die Ausnahme ausgelöst wird. Das wird helfen, genau zu bestimmen, welche Variable oder welches Objekt Null ist. Es hilft uns auch, Ihnen zu helfen. – DCON
Die NullPointerException hätte die Zeilennummer gedruckt. Das sind wichtige Informationen zum Debuggen! – tanyehzheng
Verdammt, ich wusste, dass ich etwas vergessen habe. Hier ist der Fehlercode: java.lang.NullPointerException \t bei Tank.addFish (Tank.java:23) \t bei TankTest.main (TankTest.java:5) \t bei sun.reflect.NativeMethodAccessorImpl.invoke0 (native Methode) \t bei sun.reflect.NativeMethodAccessorImpl.aufrufen (Unknown Source) \t bei sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) \t bei java.lang.reflect.Method.invoke (Unknown Source) \t bei edu.rice.cs.drjava.model.compiler. JavacCompiler.runCommand (JavacCompiler.java:267) – cavermendes