我刚刚学习了 Try-Catch 的基本结构,并编写了一些代码来测试它,但是它给了我一个未初始化的变量错误。有人可以教育我吗?我留下代码:
public static void main(String[] args) {
//Variables
String nomApel1, nomApel2;
int edad1, edad2;
boolean repeat = true;
while (repeat) {
//Pidiendo valores de variables al usuario.
try {
nomApel1 = JOptionPane.showInputDialog("Nombre y apellido de persona 1: ");
edad1 = Integer.parseInt(JOptionPane.showInputDialog("Edad de la persona 1: "));
nomApel2 = JOptionPane.showInputDialog("Nombre y apellido de persona 2: ");
edad2 = Integer.parseInt(JOptionPane.showInputDialog("Edad de la persona 2: "));
repeat = false;
} catch (NumberFormatException ex) {
System.out.println("Dato inválido, intentalo de nuevo.\n");
} finally {
//En todas las variables aquí me dice error de inicialización.
if (edad1 > edad2) {
JOptionPane.showMessageDialog(null, "Datos de la persona mayor: \nNombre completo: " + nomApel1 + ".\nEdad: " + edad1 + ".");
} else {
JOptionPane.showMessageDialog(null, "Datos de la persona mayor: \nNombre completo: " + nomApel2 + ".\nEdad: " + edad2 + ".");
}
}
}
}
它给您的错误是因为您必须为变量 appName1、appName2、age1 和 age2 赋值。
解释很简单,try catch finally是一个结构体,用来控制可以“跳”你的异常。
在您的代码中,假设它在此语句中获取 nameName1 的值时引发异常:
抛出异常时,它将进入捕获区域(那里一切都很好),但随后它将执行最终区域,这就是它会给您带来问题的地方,因为无法收集 age1 数据,age2.. .您将无法比较它们或显示它们的价值。
为避免这种情况,正如同事@Dev.Joel 在他的回答中告诉你的那样,你应该为age1 和age2 以及appName1 和appName2 赋予一些初始值,可以是这样的:
现在的问题是,如果您有异常,它将为您提供 int 的值 0 和 String 的“”,但您将能够毫无问题地执行程序
这个错误很常见。在Java中,当声明局部变量时,即在一个方法内,例如(在你的情况下,main),在它的初始化中没有添加默认值,就像声明一个变量时一样在类层面,为此,你必须用一些值来初始化这些变量,你必须清楚三点。
因此,在您的示例中,您可以初始化 a
0
, losint
和 null losString
例如,就像您使用布尔变量和问题解决一样。