0

De esto trata el problema: En una biblioteca se desean agregar libros para cada una de sus categorías las cuales son: Cuerpo humano, Tecnología, Informática y Programación para ello deben introducir la siguiente información: Nombre del libro, Autor, Editorial y Fecha.

Cuando quiero pasar a cualquier caso diferente del 1, 6 y default me marca la excepción :c

import java.util.*;
//Estructura de los libros
class Libros
{
    String titulo;
    String autor;
    String editorial;
    String fecha;
}

public class Biblioteca
{
    public static void main(String[] args) throws Exception
    {
        Scanner leer=new Scanner(System.in);
        Libros areas[][]=new Libros[2][2];
        byte opcion=0,posicion=0;
        String libro="",tituloB="";
        areas[0][0]=new Libros();
        areas[0][1]=new Libros();
        areas[1][0]=new Libros();
        areas[1][1]=new Libros();

        System.out.println("*** Categor\u00edas Disponibles ***");
        System.out.println("*** 1.-Cuerpo Humano ***\n*** 2.-Tecnolog\u00eda ***\n*** 3.-Inform\u00e1tica ***\n*** 4.-Programaci\u00f3n ***");
        System.out.println("***********************************");

        do
        {
            leer.nextLine();
            System.out.println("\n*** Men\u00fa Principal *****");
            System.out.println("*** 1.-Agregar libro ***\n*** 2.-Modificar datos de un libro ***\n*** 3.-Eliminar un libro ***\n"+"*** 4.-Buscar un libro ***\n*** 5.-Mostrar libros disponibles ***\n*** 6.-Salir ***");
            System.out.println("*************************************");
            System.out.print("Qué desea realizar? ");
            opcion=leer.nextByte();
            switch (opcion) 
            { 
                case 1:
                    System.out.println("En qué categor\u00eda desea agregarlo? ");
                    posicion=leer.nextByte();
                    switch (posicion) 
                    {
                        case 1:
                            leer.nextLine();
                            System.out.print("Ingrese el t\u00edtulo del libro: ");
                            areas[0][0].titulo=leer.nextLine();
                            System.out.print("Ingrese el nombre del autor: ");
                            areas[0][0].autor=leer.nextLine();
                            System.out.print("Ingrese la editorial: ");
                            areas[0][0].editorial=leer.nextLine();
                            System.out.print("Ingrese la fecha con formato aaaa/mm/dd: ");
                            areas[0][0].fecha=leer.nextLine();
                            System.out.println("");
                            break;
                        case 2:
                            leer.nextLine();
                            System.out.print("Ingrese el t\u00edtulo del libro: ");
                            areas[0][1].titulo=leer.nextLine();
                            System.out.print("Ingrese el nombre del autor: ");
                            areas[0][1].autor=leer.nextLine();
                            System.out.print("Ingrese la editorial: ");
                            areas[0][1].editorial=leer.nextLine();
                            System.out.print("Ingrese la fecha con formato aaaa/mm/dd: ");
                            areas[0][1].fecha=leer.nextLine();
                            System.out.println("");
                            break;
                        case 3:
                            leer.nextLine();
                            System.out.print("Ingrese el t\u00edtulo del libro: ");
                            areas[1][0].titulo=leer.nextLine();
                            System.out.print("Ingrese el nombre del autor: ");
                            areas[1][0].autor=leer.nextLine();
                            System.out.print("Ingrese la editorial: ");
                            areas[1][0].editorial=leer.nextLine();
                            System.out.print("Ingrese la fecha con formato aaaa/mm/dd: ");
                            areas[1][0].fecha=leer.nextLine();
                            System.out.println("");
                            break;
                        case 4:
                            leer.nextLine();
                            System.out.print("Ingrese el t\u00edtulo del libro: ");
                            areas[1][1].titulo=leer.nextLine();
                            System.out.print("Ingrese el nombre del autor: ");
                            areas[1][1].autor=leer.nextLine();
                            System.out.print("Ingrese la editorial: ");
                            areas[1][1].editorial=leer.nextLine();
                            System.out.print("Ingrese la fecha con formato aaaa/mm/dd: ");
                            areas[1][1].fecha=leer.nextLine();
                            System.out.println("");
                            break;
                        default:
                            System.out.println("Ingrese una categoria v\u00e1lida...");
                    }
                    break;

                case 2:
                    leer.nextLine();
                    System.out.println("Qué libro desea editar?");
                    libro=leer.nextLine();
                    for (int filas=0; filas<areas.length; filas++) 
                        for (int columnas=0; columnas<areas.length; columnas++) 
                        {
                            if(areas[filas][columnas].titulo.equalsIgnoreCase(libro))
                            {
                                System.out.print("\nTitulo: "+areas[filas][columnas].titulo+"\nAutor: "+areas[filas][columnas].autor+"\nEditorial: "
                                    +areas[filas][columnas].editorial+"\nFecha de registro: "+areas[filas][columnas].fecha+"\n");

                                System.out.print("Ingrese el t\u00edtulo del libro: ");
                                areas[filas][columnas].titulo=leer.nextLine();
                                System.out.print("Ingrese el nombre del autor: ");
                                areas[filas][columnas].autor=leer.nextLine();
                                System.out.print("Ingrese la editorial: ");
                                areas[filas][columnas].editorial=leer.nextLine();
                                System.out.print("Ingrese la fecha con formato aaaa/mm/dd: ");
                                areas[filas][columnas].fecha=leer.nextLine();
                                System.out.println("");
                                break;
                            }
                        }
                    System.out.println("Datos actulizados con \u00e9xito!");
                    break;

                case 3:
                    leer.nextLine();
                    System.out.println("Qué libro desea eliminar?");
                    libro=leer.nextLine();
                    for (int filas=0; filas<areas.length; filas++) 
                        for (int columnas=0; columnas<areas.length; columnas++) 
                        {
                            if(areas[filas][columnas].titulo.equalsIgnoreCase(libro))
                            {
                                areas[filas][columnas].titulo="";
                                areas[filas][columnas].autor="";
                                areas[filas][columnas].editorial="";
                                areas[filas][columnas].fecha="";
                                break;
                            }
                        }
                    System.out.println("Libro eliminado conéxito!");
                    break;

                case 4:
                    leer.nextLine(); //Limpia el objeto de lectura
                    System.out.println("Qué libro desea buscar?");
                    libro=leer.nextLine();
                    for (int filas=0; filas<areas.length; filas++) 
                        for (int columnas=0; columnas<areas.length; columnas++) 
                        {
                            if(areas[filas][columnas].titulo.equalsIgnoreCase(libro))
                            {
                                System.out.print("Titulo: "+areas[filas][columnas].titulo+"\nAutor: "+areas[filas][columnas].autor+"\nEditorial: "
                                    +areas[filas][columnas].editorial+"\nFecha de registro: "+areas[filas][columnas].fecha+"\n");
                                break;
                            }
                        }
                    break;

                case 5:
                    for (int filas=0; filas<areas.length; filas++) 
                    {
                        for (int columnas=0; columnas<areas.length; columnas++) 
                        {
                            System.out.print("\nTitulo: "+areas[filas][columnas].titulo+"\nAutor: "+areas[filas][columnas].autor+"\nEditorial: "
                                +areas[filas][columnas].editorial+"\nFecha de registro: "+areas[filas][columnas].fecha+"\n");
                        }
                        System.out.println("");
                    }
                    break;
                case 6:
                    System.out.print("Hasta luego...");
                    break;
                default:
                    System.out.println("Ingresa una opci\u00f3n v\u00e1lida...");
            }

        }while(opcion != 6);
    }
}
Geovanni
  • 1
  • 1
  • Como te comenta otro usuario, este error se ha planteado con anterioridad y tiene solución en el sitio. Deberías editar la pregunta para indicar en qué línea te da el error y, si has probado las soluciones a la pregunta enlazada y no te funcionan, poner lo que hayas intentado y el resultado que obtuviste. – Alvaro Montoro Nov 12 '18 at 11:56

1 Answers1

0

Lo primero que tienes que hacer es poner try { ... }catch(Exception e){ e.printStackTrace(); } En tu código para controlar las excepciones y manejarlas a tu gusto o necesidad.

Para poder ayuudarte estaría bien que nos pongas el mensaje de error completo para ver en que línea te da el error.

El problema suele surgir por que estas intentado utilizar un objeto que no ha sido inicializado o no existe, por ejemplo el array de areas si intentas acceder al elemento [3][5].

Otro ejemplo podría ser en la siguiente línea:

    if(areas[filas][columnas].titulo.equalsIgnoreCase(libro))
    -----------------------------^

Si título no ha sido inicializado te saltaría la excepción de NullPointerException

Seni
  • 58
  • 4