线程“main”java.lang.NullPointerException中的异常

时间:2014-01-07 20:16:02

标签: java

执行代码并引入第一个cota l[i].cota = sc.nextLine()后,我的控制台中出现以下问题;

  

线程“main”中的异常java.lang.NullPointerException
  at exercicio6.introlivros(exercicio6.java:18)
  at exercicio6.main(exercicio6.java:9)

谁能告诉我这是什么问题?

这是我的代码

public class exercicio6 {
    public static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
        livro l[] = new livro[200];
        l = introlivros();
        apagarbase(l);

    }

    public static livro[] introlivros() {
        int i = 0;
        livro l[] = new livro[200];
        do {
            System.out.print("Introduza a cota:");
            l[i].cota = sc.nextLine();
            if (l[i].cota.length() == 0)
                break;
            do {
                System.out.print("Introduza o autor:");
                l[i].autor = sc.nextLine();
            } while (l[i].autor.length() < 40);
            System.out.print("Introduza o titulo:");
            l[i].titulo = sc.nextLine();
            System.out.println("Introduza a data:");
            System.out.println("Dia:");
            l[i].data[0] = sc.nextInt();
            System.out.println("Mes:");
            l[i].data[1] = sc.nextInt();
            System.out.println("Ano:");
            l[i].data[2] = sc.nextInt();
            i++;
        } while (i < 200);
        return l;
    }

    public static void remover(livro l[]) {
        String cota1 = new String();
        boolean verificar = false;

        do {
            cota1 = sc.nextLine();
            if (cota1.length() != 0) {
                for (int i = 0; i < 200; i++) {
                    if (cota1 == l[i].cota) {
                        l[i].cota = "";
                        break;
                    }
                    if (cota1 != l[i].cota) {
                        verificar = true;
                    }
                }
            }
            if (cota1.length() == 0) {
                System.out.println("Introduza a cota de novo!");
            }
            if (verificar == true) {
                System.out.println("Esse livro não eciste!");
            }

        } while (cota1.length() == 0);

    }

    public static void apagarbase(livro l[]) {
        livro p[] = new livro[200];
        for (int i = 0; i < 200; i++) {
            l[i].cota = null;
            l[i].autor = null;
            l[i].titulo = null;
            l[i].data[0] = 0;
            /*
             * l[i].data[1]=null; l[i].data[2]=null; l[i].estado[0]=null;
             */
        }
    }

}

class livro {
    String cota = new String();
    String autor = new String();
    String titulo = new String();
    int data[] = new int[3];
    char estado[] = new char[1]; // Requisitado R, Livre L, Condicionado C;
}

2 个答案:

答案 0 :(得分:0)

在这里,您要实例化您的数组:

livro l[] = new livro[200];

但是,您在此处尝试访问包含尚不存在的对象的元素:

l[i].cota = sc.nextLine();

您需要在EVERY元素处循环并实例化一个新对象。使用for循环或Array.fill。

答案 1 :(得分:0)

如上所述 - 对象初始化为null

填充数组的快速方法是 -

livro l[] = new livro[200];
Arrays.fill(l, new livro());