0

Tengo un problema con la instanciación de un objeto, explico brevemente y pongo en situación: estoy creando un método que incluye en una lista de la compra un objeto aleatorio de un inventario en un archivo de txt. La idea es capturar en una ArrayList todos los elementos del inventario, crear un número aleatorio en el rango de elementos que quedan y añadir ese elemento. El inventario administra un elemento por linea y sus atributos están separados por "--" de la forma: Nombre1--atributo1--atributo2--atributo3 etc. Con esos elementos creo el elemetno a añadir con su correspondiente constructor con parámetros. Por las pruebas que he hecho, recupero correctamente el elemento, separo en un array sus partes mediante un split() correctamente, pero al crear el nuevo elemento, me da un error de puntero nulo, o sea que no existe ese elemento en memoria al añadirlo al pedido. ¿Por qué la última línea de código me da un elemento nulo? ¿Dónde está el error? No acbo de dar con ello y no entiendo el por qué.

Aquí el código que he implementado

try {
            //Opening the file and creating BufferedReader
            file = new File ("files\\inventory.txt");
            fReader = new FileReader (file);
            bfReader = new BufferedReader(fReader);

            // Reading the file
            String item = null;
            ArrayList<String> itemToAddList = new ArrayList<String>();
            Item itemAdded = null;

            while((item=bfReader.readLine())!=null) {
               if(item != null)
                   itemToAddList.add(item); //We add the inventory items to the list 
              }
           //We crate the random item with the limits 0 and the size of inventory
            int randomItem = (int)(Math.random()* itemToAddList.size()+1)+0;

            //We separate the components of the constructor in parts to create the desired item
            String addString = itemToAddList.get(randomItem);
            String[] partsConstructor = addString.split("--");


            //We create a new item of the type specified in the first item field in the inventory
            if(partsConstructor[0] =="Burger") {
                itemAdded = new Burger(partsConstructor[1], Boolean.parseBoolean(partsConstructor[2]), partsConstructor[3], Double.parseDouble(partsConstructor[4]), 
                        Double.parseDouble(partsConstructor[5]),Double.parseDouble(partsConstructor[6]), Integer.parseInt(partsConstructor[7])  );
            }else if(partsConstructor[0] == "Salad") {
                itemAdded = new Salad(partsConstructor[1], Boolean.parseBoolean(partsConstructor[2]), partsConstructor[3], Double.parseDouble(partsConstructor[4]), 
                        Double.parseDouble(partsConstructor[5]),Double.parseDouble(partsConstructor[6]), Integer.parseInt(partsConstructor[7]));
            }else if(partsConstructor[0] =="Beverage") {
                itemAdded = new Beverage(partsConstructor[1],Integer.parseInt(partsConstructor[2]),Double.parseDouble(partsConstructor[3]),
                        Boolean.parseBoolean(partsConstructor[4]),partsConstructor[5],Double.parseDouble(partsConstructor[6]),Double.parseDouble(partsConstructor[7]),
                        Double.parseDouble(partsConstructor[8]),Integer.parseInt(partsConstructor[9]));
            }else if(partsConstructor[0] =="Dessert") {
                itemAdded = new Dessert(partsConstructor[1],Boolean.parseBoolean(partsConstructor[2]),partsConstructor[3],
                        Double.parseDouble(partsConstructor[4]),Double.parseDouble(partsConstructor[5]),Double.parseDouble(partsConstructor[6]),Integer.parseInt(partsConstructor[7]));
            }else if(partsConstructor[0] =="Side") {
                itemAdded = new Side(partsConstructor[1],Integer.parseInt(partsConstructor[2]),partsConstructor[3],Double.parseDouble(partsConstructor[4]),
                        Double.parseDouble(partsConstructor[5]),Double.parseDouble(partsConstructor[6]),Integer.parseInt(partsConstructor[7]));
            }
           //We add the random item to the order

           guiApp.getKiosk().addItem2Order(itemAdded);
......//catch & exceptions

Gracias anticipadas

Rastajuan
  • 65
  • 7
  • 1
    Es posible que no te esté entrando en ninguna de las condiciones del if por que estas haciendo las comparaciones con == en lugar de con .Equals(). Mírate esta pregunta: https://es.stackoverflow.com/questions/225/c%C3%B3mo-comparar-correctamente-strings-y-objetos-en-java – kronosXXI Nov 26 '18 at 13:03
  • Solucionado!!! Ese era el problema. Solemne "tontería" que no olvidaré. Muchas gracias, problema resuelto, era utilizando equals() en lugar de == – Rastajuan Nov 26 '18 at 16:23

0 Answers0