Noob Null指针异常错误

时间:2015-05-14 01:05:51

标签: java

我收到NullPointerException错误,无法找出原因。我已经包含了我正在处理的所有三个类并且// //注意eclipse在哪里说错误来自主方法(显然是两个位置)。

我是编码的新手,根据我的理解,当你试图传递一些被认为是null的东西时会发生这种情况,但我相信我正试图从代码中的早期传递新创建的鱼。我确信这个错误很容易被有经验的人抓住。

谢谢!

import java.util.Scanner;

public class FishTankManager {

private static Scanner stdin = new Scanner(System.in);
private static int userInput, userInput2;
private static FishTank[] tanks = new FishTank[10];

public static void main (String[] args) {
    while (true){
    System.out.println("Welcome to your new fish tank manager!\n"+
                       "What would you like to do?\n"+
                       "(1)Add a Fish\n(2)Remove a Fish\n"+
                       "(3)Check a tank");          
    userInput = stdin.nextInt();

        if (userInput == 1){
            Fish fish = new Fish(); 
            changeTank(fish); //// Says its at here
            continue;
        }
        else if(userInput ==2){
            removeFish();
        }
        else{
            checkTank();
        }
    }
}

private static void changeTank(Fish fish){
    System.out.println("Which tank would you like to put this fish in? (1-10)");
    userInput = stdin.nextInt();
    tanks[userInput-1].addFish(fish); ////and says its at here also
}

private static void removeFish(){
    System.out.println("Which tank would you like to remove the fish from? (1-10)");
    userInput = stdin.nextInt();
    System.out.println("Which fish would you like to flush down the toilet?");
    tanks[userInput-1].fishInTank();
    userInput2 = stdin.nextInt();
    tanks[userInput-1].flushFish(userInput2-1);
}

private static void checkTank(){
    System.out.println("Which tank would you like to check?");
    userInput = stdin.nextInt();
    tanks[userInput-1].fishInTank();
}
}
public class FishTank {

private Fish[] tank;
private int fishCount = 0;

public FishTank(){
    this.tank = new Fish[5];
    this.fishCount = 0;
}

public void addFish(Fish fish){
    if (this.fishCount >=5 ){
        System.out.println("This tank is full! Try another");
            return;
    }
    else {
        this.tank[fishCount] = fish;
        this.fishCount++;
    }
}

public void fishInTank(){
    for(int i=0; i<5; i++)
        if (this.tank[i] == null){
            continue;
        }
        else{
        System.out.println("("+(i+1)+")"+this.tank[1].getName());
        }
}

public void flushFish(int f){
    this.tank[f] = null;
}
}
import java.util.Scanner;

public class Fish {

private static Scanner stdin = new Scanner(System.in);
private String userInput;
private int userInput2;
private boolean mean;
private String name;

public Fish(){      
    System.out.println("What is your fishes name?");
    userInput = stdin.next();
    this.name = userInput;

    System.out.println("Is this fish aggressive?\n"+
                       "(1)Yes\n(2)No");        
    userInput2 = stdin.nextInt();
    if (userInput2 == 1)
        this.mean = true;
    else
        this.mean = false;
}

public String getName(){
    return this.name;
}

public boolean getMean(){
    return this.mean;
}
}

1 个答案:

答案 0 :(得分:1)

tanks仅作为数组创建,但不创建任何FishTank。因此,tanks中的所有元素都是null。所以:tanks[userInput-1].addFish(fish);无法工作,因为tanks[userInput - 1]null。对于位置:stacktrace告诉您所有方法,直到导致异常的方法。所以&#34;它发生在这里&#34;和#34;也在这里&#34;实际上是#34;这个方法调用这个方法,在这里抛出异常&#34;和#34;在这种方法中抛出异常&#34;