0

我的班级不断收到空指针异常。

客户端类:

public static void main(String[] args) {
    Scanner kb = new Scanner(System.in);
    int count = 0;

    for (int i = 0; i < 100; i++){

        count ++;
        System.out.println(i);
        Clip[] newClip = new Clip[100];
        newClip[i] = new Clip();
        menu();
        int option = kb.nextInt();

        switch(option){
            case 1: System.exit(0);
                    break;

            case 2: newClip[i].Input();
                    newClip[i].Output();
                    break;

            case 3: int indexclip = 0;
                    int testclip = 0;
                    Scanner key = new Scanner(System.in);
                    System.out.println("Enter the index number of the clip: ");
                    testclip = key.nextInt();

                    for (int j = 0; j < 100; j++){

                        indexclip = newClip[j].getIndex(); // happens here
                        System.out.println(indexclip);
                        if(testclip == indexclip){
                            j = 120;
                            newClip[j].Output(); // and i would assume here too
                        }
                    }
                    break;
        }
    }
}

剪辑类:

import java.util.*;

public class Clip {

private int index;
private String surname;        
private float length;
private float speed;
private String time = "testing";

public Clip(){
    index = 0;
    surname = "N/A";
    length = (float) 0.00;
    speed = (float) 0.00;
    time = "0:00AM";        
}

public void Output(){
    System.out.println("Index: "+ index);
    System.out.println("Surname: " + surname);
    System.out.println("Length: " + length);
    System.out.println("Speed: "+ speed + "m/s");
    System.out.println("Time: "+ time);


}
public void Input(){
    int testint;
    float testfloat;
    int spacePos;
    String testString;

    Scanner kb = new Scanner(System.in);
    Scanner key = new Scanner(System.in);

    System.out.println("Input an index number between 1 - 10000: ");
    testint = kb.nextInt();
    for (int i = 0; i < 100; i++){
        if (testint < 1 || testint > 10000){

            System.out.println("Input an index number between 1 - 10000: ");
            testint = kb.nextInt();

           }

        else {
            i = 120;
        }
    }
    index = testint;

    System.out.println("What is the competitor's Surname and their Given name: ");
    surname = key.nextLine();

    System.out.println("Length of the Tape in seconds: ");
    testfloat = kb.nextFloat();
    for (int i = 0; i < 100; i++){
        if (testfloat < 1 || testfloat > 60){

            System.out.println("Length of the Tape in seconds: ");
            testfloat = kb.nextFloat();

           }
        else {
            i = 120;
        }
    }
    length = testfloat;

    System.out.println("Estimated Speed of competitor in metres per second: ");
    testfloat = kb.nextFloat();
    for (int i = 0; i < 100; i++){
        if (testfloat < 7 && testfloat > 13){

            System.out.println("Estimated Speed of competitor in metres per second: ");
            testfloat = kb.nextInt();

           }
        else {
            i = 120;
        }
    }
    speed = testfloat;

    System.out.println("Time of recording between 0900 - 1700: ");
    testString = key.nextLine();

    for (int i = 0; i < 100; i++){
        if (testString.length() != 4){
            System.out.println("Time of recording between 09:00 - 17:00: ");
            testString = key.nextLine();
        }
        else {
            i = 120;
        }
    }
    time = testString;
}

public int getIndex(){
    return index;
}

public String getSurname(){
    return surname;
}

public float getLength(){
    return length;
}

public float getSpeed(){
    return speed;
}

public String getTime(){
    return time;
}

我知道必须初始化 Clip 类,并且我已经这样做了,并且我首先运行选项 2,以便不使用其他类的构造函数。我只想让它读入索引号并扫描剪辑数组以查找匹配的索引号

任何帮助都会有很大帮助

干杯

4

3 回答 3

4

您需要将数组的声明移到第一个 for 循环之外。

Clip[] newClip = new Clip[100];
for (int i = 0; i < 100; i++){
 /**/
}

因为当您处于switch语句的第 3 种情况时,您会循环遍历数组的所有元素Clip(但由于您只设置了数组的一个元素,因此数组的 99 个元素实际上设置为null)。

于 2013-10-24T14:31:14.143 回答
1

问题是您在循环中的每次迭代都创建数组,因此只有当前条目 (i) 不是null.

要修复它,请移动该行:

Clip[] newClip = new Clip[100];

需要在循环之外(在for语句之前)。

此外,在循环中int j,这只会在i == 100. 不确定这是否得到保证。否则,在我之后的 newClip 中的条目也将是null

于 2013-10-24T14:32:13.200 回答
0

NPE在这里:

Clip[] newClip = new Clip[100];

你需要把这条线从你的循环中取出。

于 2013-10-24T14:32:36.697 回答