所以我在使用2个类和一个测试程序类的数组上进行项目,但我不断收到一个nullPointerException错误。我知道这个错误本质上意味着什么,我相信问题在于我在下面提供的Tank类和它的构造函数更具体。 Tank类使用我的类Fish,并且应该创建一个鱼类数组,测试人员然后创建一个新的Tank对象。nullPointerException错误让我疯狂
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();
}
}
这里是坦克类:
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;
}
}
,你可以看到,我想建立创建鱼对象数组的罐类中的重载的构造函数,但我有一些麻烦得到它的工作。我相信,这是我的错误是在我的测试类来:
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();
}
}
任何帮助,将不胜感激
异常消息告诉你在哪一行抛出异常。这将有助于查明哪些变量或对象为空。它也将帮助我们帮助你。 – DCON
NullPointerException将打印行号。这是调试的关键信息! – tanyehzheng
该死的我知道我忘了一些东西。下面是错误代码:显示java.lang.NullPointerException \t在Tank.addFish(Tank.java:23) \t在TankTest.main(TankTest.java:5) \t在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) \t at sun.reflect.NativeMethodAccessorImpl。调用(未知来源) \t在sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) \t在java.lang.reflect.Method.invoke(未知来源) \t在edu.rice.cs.drjava.model.compiler。 JavacCompiler.runCommand(JavacCompiler.java:267) – cavermendes