【问题标题】:My Inventory does not save a new object, it just resets to the ones I initiated with我的库存不保存新对象,它只是重置为我启动的对象
【发布时间】:2018-04-23 00:44:07
【问题描述】:

所以我的任务是为一家汽车公司做一个小盘点,保存汽车的代码、品牌、型号、年份和奖品,但是当我尝试运行该程序时它运行良好,它询问它是什么需要询问一切,问题是它没有保存我使用 addCar 方法(nuevoVehiculo())输入的新车,我已经尝试了大约 3 个小时但没有成功,任何帮助都会不胜感激。

也很抱歉,代码中的一些内容是西班牙语,我来自拉丁美洲国家,所以我们使用西班牙语,如有任何问题,我可以在必要时翻译。

package javaapplication32;

import javax.swing.JOptionPane;

/**
 *
 * @author Luis
 */
public class Rutinas {

    static Vehiculo loteVehiculos[] = new Vehiculo[5]; //Crea arreglo con objeto.
    static Venta laVenta[] = new Venta[10];

    public static void Inicializa() {

        loteVehiculos[0] = new Vehiculo(1, "Toyota", "Yaris", 2018, 21000);//Se llena el primer vehiculo en el arreglo para empezar la lista.
        loteVehiculos[1] = new Vehiculo(2, "Honda", "Civic", 2017, 18000);

        for (int k = 2; k < loteVehiculos.length; k++) {

            loteVehiculos[k] = new Vehiculo();//Se crean los otros vehiculos sin informacion.
        }

    }//Fin Inicializa.



    public static int posicionVacia() {
        int indice = -1;
        for (int r = 0; r < loteVehiculos.length; r++) {
            if (loteVehiculos[r].codigo == 0) {
                indice = r;
                break;
            }
        }
        return indice;
    }//Fin Posicion Vacia.

    public static void nuevoVehiculo() { //Para llenar la informacion de los nuevos vehiculos.

        int posicion = posicionVacia();

        if (posicion > -1) {

            int codigo = Integer.parseInt(JOptionPane.showInputDialog("Digite el codigo del nuevo vehiculo."));
            String marca = JOptionPane.showInputDialog("Digite la marca del nuevo vehiculo");
            String modelo = JOptionPane.showInputDialog("Digite el modelo del nuevo vehiculo");
            int anio = Integer.parseInt(JOptionPane.showInputDialog("Digite el año del nuevo vehiculo"));
            float precio = Float.parseFloat(JOptionPane.showInputDialog("Digite el precio del nuevo vehiculo en dolares"));

            loteVehiculos[posicion] = new Vehiculo(codigo, marca, modelo, anio, precio);
        } else {
            JOptionPane.showMessageDialog(null, "No hay espacio para un nuevo vehiculo");
        }

    }//Fin Nuevo Vehiculo.

    public static int buscaVehiculo(int codigo) {

        int indice = -1;
        for (int k = 0; k < loteVehiculos.length; k++) {
            if (loteVehiculos[k].codigo == codigo) {
                indice = k;
                break;
            }

        }

        return indice;

    }//Fin Busca Vehiculo.

    public static void eliminarVehiculo() {

        int vehiculo = Integer.parseInt(JOptionPane.showInputDialog("Digite el codigo del vehiculo que desea borrar."));
        int posicion = buscaVehiculo(vehiculo);

        if (posicion >= 0) {
            loteVehiculos[posicion].codigo = 0;
        } else {
            JOptionPane.showMessageDialog(null, "No se encuentra el vehiculo. ");
        }

    }//Fin Eliminar Vehiculo.

    public static void listaVehiculos() {

        for (int i = 0; i < loteVehiculos.length; i++) {

            if (loteVehiculos[i].codigo > 0) {
                System.out.println(loteVehiculos[i]);
            }
        }
    }//Fin Lista de Vehiculos.

    public static void InicioVentas() {

        laVenta[0] = new Venta(1, 12345, 1, "20 de Abril 2018", 15000);
        laVenta[1] = new Venta(4, 67890, 2, "10 de Abril 2018", 24000);

        for (int g = 2; g < laVenta.length; g++) {

            laVenta[g] = new Venta(); //Se crean las otras ventas.

        }
    }

    public static void agregarVenta() {

    }

    public static void menuVehiculos() {

        Rutinas.Inicializa();

        int n = Integer.parseInt(JOptionPane.showInputDialog("Digite \n1.Ingresar nuevo vehiculo. \n2.Lista actual de vehiculos. \n3.Eliminar vehiculo. \n4.Salir "));

        switch (n) {
            case 1:
                Rutinas.nuevoVehiculo();
                Rutinas.menuVehiculos();
                break;

            case 2:
                Rutinas.listaVehiculos();
                Rutinas.menuVehiculos();
                break;

            case 3:
                Rutinas.eliminarVehiculo();
                Rutinas.menuVehiculos();
                break;

            case 4:
                JOptionPane.showMessageDialog(null, "Gracias.");
                break;

        }

    }//Fin Menu.
}

【问题讨论】:

    标签: java arrays inventory


    【解决方案1】:

    这是因为每次运行 menuVehiculos 方法时,它都会执行以下操作:Rutinas.Inicializa();

    要解决此问题,您可以从另一个类调用初始化。例如:

    public class Main {
    
        public static void main(String[] args) {
            Rutinas.Inicializa();
            Rutinas.menuVehiculos();
        }
    
    }
    

    那么你的方法menuVehiculos就不需要做任何初始化了。

    public static void menuVehiculos() {
    
            int n = Integer.parseInt(JOptionPane.showInputDialog("Digite \n1.Ingresar nuevo vehiculo. \n2.Lista actual de vehiculos. \n3.Eliminar vehiculo. \n4.Salir "));
    
            switch (n) {
                case 1:
                    Rutinas.nuevoVehiculo();
                    Rutinas.menuVehiculos();
                    break;
    
                case 2:
                    Rutinas.listaVehiculos();
                    Rutinas.menuVehiculos();
                    break;
    
                case 3:
                    Rutinas.eliminarVehiculo();
                    Rutinas.menuVehiculos();
                    break;
    
                case 4:
                    JOptionPane.showMessageDialog(null, "Gracias.");
                    break;
    
            }
    
        }//Fin Menu.
    

    【讨论】:

    • 我试图从菜单中删除Rutinas.Inicializa(),但在我输入新车的代码(codigo)后,它显示了一个错误,上面写着Exception in thread "main" java.lang.NullPointerException
    • 要么不使用静态变量和方法,要么使用静态块来初始化数组。另一种选择是让另一个类调用一个方法来添加初始车辆。
    • 很抱歉打扰了这么多,但是使用静态块来初始化数组意味着什么,我对编程很陌生,正如你可以从我的代码的简单性中看出的那样,尽管我尝试取消所有静态的代码,但它在菜单上显示一个错误,上面写着non-static method NameofMethod() cannot be referenced from a static content,甚至认为没有任何静态变量或方法。
    • 写完才发现这可能是你不熟悉的话题。我添加了一个我认为对您来说很简单并且可能更容易的修复程序。
    • 非常感谢,终于成功了,修复起来也很简单,非常感谢您的帮助。
    猜你喜欢
    • 2018-08-16
    • 1970-01-01
    • 2019-08-11
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 2020-01-12
    相关资源
    最近更新 更多