我在if
语句中分配我的变量,并试图在它之外使用它们,但我无法弄清楚如何。错误发生在最后一个if
语句中,声明“本地变量可能尚未初始化”。
int i,z;
if (st1.nextToken() == "Ace")
{
String Ace = "14";
i = Integer.parseInt(Ace);
}
else if (st2.nextToken() == "Ace")
{
String Ace = "14";
z = Integer.parseInt(Ace);
}
else if (st1.nextToken() == "King")
{
String King = "13";
i = Integer.parseInt(King);
}
else if (st2.nextToken() == "King")
{
String King = "13";
z = Integer.parseInt(King);
}
else if (st1.nextToken() == "Queen")
{
String Queen= "12";
i = Integer.parseInt(Queen);
}
else if (st2.nextToken() == "Queen")
{
String Queen= "12";
z = Integer.parseInt(Queen);
}
else if (st1.nextToken() == "Jack")
{
String Jack = "11";
i = Integer.parseInt(Jack);
}
else if (st2.nextToken() == "Jack")
{
String Jack = "11";
z = Integer.parseInt(Jack);
break;
}
else
{
i = Integer.parseInt(st1.nextToken());
z = Integer.parseInt(st2.nextToken());
}
if (i > z)
答案 0 :(得分:2)
替换:
int i,z;
使用:
int i=0, z=0; //or whatever value you want
或者将i
和z
初始化为所有if-else
块中的某个值。
除非两者都已初始化,否则您无法执行if(i>z)
,因为您需要初始化局部变量。
答案 1 :(得分:1)
编译器必须满足i
和z
已初始化,才能进行比较i > z
。您的代码不保证这一点,因为只有通过if..else
逻辑的某些路径才会初始化这两个变量。
您有几个选择:
i
和z
,例如。到0或其他一些合适的默认值i
块中设置z
和if
其他一些风格问题:
equals()
来比较字符串,而不是==
,例如。 st1.nextToken().equals("Ace")
因此:
String Jack = "11";
i = Integer.parseInt(Jack);
可以成为:
i = 11;
或:
i = JACK; // where JACK is a constant set to 11
您可能还有关于正在阅读的令牌的错误。每个if
表达式调用nextToken(),这将导致使用流中的 next 标记。我想你想要比较每个表达式中的当前标记。如果是这种情况,则分配给两个临时变量,以便在st1
逻辑之前保存st2
和if..else
的下一个标记,并将它们与Ace,King等进行比较。
答案 2 :(得分:0)
在这种情况下,String的一个更优雅的解决方案是使用switch / case语句
答案 3 :(得分:0)
我建议使用Integer类。如果上一个if语句之前没有条件满足,请检查是否使用null
检查初始化了那些 Integers 。