0

Que tengo mal? alguien me puede explicar por favor.

    public class Library  {
    book[] books=new book [20]

    public Library (){

    }
        public Library(int BookID,Student Name) {



      for (int i = 0; i < books.length; i++) {
        books[i].BookName= "unknow";
        books [i].BookCategory= "unknown";
        books [i].BookID= i;
}
Borrow(BookID,Name); 

        }

    public void Borrow (int BookID, Student st){


        if (search (BookID) != null) {
            System.out.println("The book is: "+search (BookID).BookName);
            System.out.println("The book has a category: "+ search (BookID).BookCategory);
            System.out.println("Borrowed to: "+ st.Name);
        } 
        else {
            System.out.println("This book does not exist");
                }
    }

    public book search (int BookNumber)
    {
        for (book book : books) {
            if (book.BookID == BookNumber) {
                return book;
            }
        }
    return null;
    }
    public void addBook (book nbook){
        for (int i = 0; i < books.length; i++) {
            if (books [i].BookName == null) {
                books [i]= nbook;
                break;
            }
        }

    }

        /**
         * @param args the command line arguments
         */

    }

El error que me sale

Exception in thread "main" java.lang.NullPointerException at library.Library.(Library.java:23)

Ahmed
  • 35
  • 7
  • 1
    Cual es la linea 23? – alanfcm Apr 26 '18 at 16:15
  • Perdon habia una linea que faltaba que era la 23 – Ahmed Apr 26 '18 at 16:19
  • La 23 es for (int i = 0; i < books.length; i++) { books[i].BookName= "unknow"; books [i].BookCategory= "unknown"; books [i].BookID= i; – Ahmed Apr 26 '18 at 16:20
  • No me sirvio o no se que editar el problema esta en el for que os acabo de enviar – Ahmed Apr 26 '18 at 16:21
  • Pero yo hice este for para que no se quede en null, y aun asi me salta null? no lo entiendo – Ahmed Apr 26 '18 at 16:22
  • @Pablo Lozano tiene razón, **tu pregunta SÍ que está en esa respuesta.** El último punto lo dice: `No implica que el vector se llenara mágicamente de objetos de tipo1. Debes hacer un New tipo1 para cada posición del vector` – C. Rodriguez Apr 26 '18 at 16:23
  • @C.Rodriguez podrias explicarme que es lo que tendo que cambiar? – Ahmed Apr 26 '18 at 16:24
  • Es decir, creaste tu vector de `book`, pero no has iniciado internamente dicho vector, debes crear un nuevo `book` antes de utilizar `book[i]`, si no te saltará `NullPointerException` – C. Rodriguez Apr 26 '18 at 16:24
  • book[] books=new book [20] Si que lo inicio – Ahmed Apr 26 '18 at 16:25
  • 1
    Iniciaste el vector, mas no has iniciado los valores internos, por defecto, **TODOS** son `null`. Lo que debes hacer (y espero que marquen esta respuesta como duplicada) es agregar esta linea debajo del `for`: `books[i] = new book();` – C. Rodriguez Apr 26 '18 at 16:26
  • Perdon por duplicar, pero es que no lo entendi, y añadi lo que me diste debajo del for pero sige lanzandome errores de null exceptions – Ahmed Apr 26 '18 at 16:28
  • Revisa de nuevo el código, olvidé una `s` – C. Rodriguez Apr 26 '18 at 16:29
  • quieres decir books? no la clase se llama book, de verdad es que no entiendo cual es el problema, se supone que reservo para mi array de books de tipo book 20 espacios que son nulls, y lo que quiero hacer con el for es dar algo que no se null, no entiendo que es lo que pasa, espero no ser molestia pero alguien me lo podria explicar, y vuelvo a pedir perdon si es duplicada – Ahmed Apr 26 '18 at 16:33
  • Sé que la clase se llama `book`, pero tu vector (array) se llama `books`. Antes de utilizar `books[i]` necesitas crear un objeto `book` en ese espacio (que por defecto es `null`). Por lo tanto `books[i] = new book();`, creará un nuevo `book` para que le asignes sus variables... – C. Rodriguez Apr 26 '18 at 16:37
  • Ok entendi, muchas gracias :) – Ahmed Apr 26 '18 at 16:39

0 Answers0