不同切换案例中的java对象setter和creator

时间:2015-01-18 10:42:38

标签: java netbeans

在潜伏了一段时间之后,看到我无法找到我正在寻找的案例,我正在做我的第一篇文章。我不仅是Java的新手,也是编程方面的新手,所以我所做的每件小事对我来说都是一个挑战。 情况是这样的:

我正在制作一个带有菜单的“怪物创造者”(开关) 1 - 创造空怪物 2 - 用参数创建怪物 3 - 更改/分配空怪物名称 4 - ...... N - ......

当选项1和2已经编码并且它们似乎有效时,getter和setter将在选项2中进行测试和工作。 现在,当我尝试使用setter为空怪物Netbeans给我一个警告,该变量未初始化,当我运行代码时,我得到一个错误。 我怎样才能解决这个问题? 我试着在这里添加代码,以便更直观。

提前感谢您的帮助。

Ps:代码中的西班牙语菜单

package Monstruo;

/**
 * @author JuanVictor
 */
public class ConfigMonstruo {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        int menu = 0, x, y;
        String monstruoVacio = "", monstruoConDatos = "", nombre, color;
        int opcion;
        int salida = 0;



        while (salida == 0) {

            ES.msg("Configuración de Monstruos.\n\n================================\n");
            ES.msgln("1.- Crear un nuevo monstruo sin datos.");
            ES.msgln("2.- Crear una nuevo monstruo con datos conocidos.");
            ES.msgln("3.- Asignar nombre a al monstruo sin datos.");
            ES.msgln("4.- Asignar posición X al monstruo sin datos.");
            ES.msgln("5.- Asignar posición Y al monstruo sin datos.");
            ES.msgln("6.- Asignar color al monstruo sin datos.");
            ES.msgln("7.- Mostrar por pantalla los datos de un monstruo.\n");
            ES.msgln("0.- Salir de la aplicación.\n================================");

            opcion = ES.leeEntero("Introduzca la opción elegida:  ", 0, 7);

            switch (opcion) {

                //opcion de salida del programa
                case 0:
                    System.out.println("Aplicacion Finalizada");
                    salida = 1;
                    break;

                case 1:
                    System.out.println("Creando un nuevo monstruo sin datos...\n");
                    //un wait de 1 segundo con fines estéticos .
                    try {
                        Thread.sleep(1000);                 //1 segundo.
                    } catch (InterruptedException ex) {
                        Thread.currentThread().interrupt();
                    }
                    //instanciación de el monstruo sin características
                    Monstruo mVacio = new Monstruo();

                    break;

                case 2:
                    System.out.println("Creando un nuevo monstruo con datos conocidos...");
                    nombre = ES.leeCadena("Introduzca el nombre del monstruo: ");
                    x = ES.leeEntero("Introduzca la posicion X del monstruo: ");
                    y = ES.leeEntero("Introduzca la posicion Y del monstruo: ");
                    color = ES.leeCadena("Introduzca el color del monstruo: \n" );
                    Monstruo mDatos = new Monstruo(nombre, x, y, color);
                    mDatos.setNombre(nombre);
                    mDatos.setPosicionX(x);
                    mDatos.setPosicionY(y);
                    mDatos.setColor(color);
                    System.out.println("\n" +mDatos.toString()+"\n");
                    break;

                case 3:
                    System.out.println("Asignar nombre a al monstruo sin datos.");
                    nombre=ES.leeCadena("Introdce el nombre del monstruo: ");

                    mVacio.setNombre(nombre); //here is the warning

                    break;

            }

        }
        //
    }
}

编辑:警告是:

  

线程“main”中的异常java.lang.RuntimeException:Uncompilable   源代码 - 变量mVacio可能尚未初始化   Monstruo.ConfigMonstruo.main(ConfigMonstruo.java:73)Java结果:1

1 个答案:

答案 0 :(得分:0)

仅在switch语句的mVacio初始化case 1时,仅在输入case 1时对其进行初始化,因此如果在案例1之前输入case 3,则尝试在初始化之前访问mVacio

因此,你应该将mVacio的声明移到switch语句之前,并给它一个初始值:

Monstruo mVacio = null;

然后在案例1中你改变了:

Monstruo mVacio = new Monstruo();

为:

mVacio = new Monstruo();

在案例3中:

if (mVacio != null)
    mVacio.setNombre(nombre);