我正在制作一个带有菜单的“怪物创造者”(开关) 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
答案 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);