在if语句中初始化变量(Java)

时间:2016-01-27 03:04:14

标签: java variables if-statement

我在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)

4 个答案:

答案 0 :(得分:2)

替换:

int i,z;

使用:

int i=0, z=0;  //or whatever value you want

或者将iz初始化为所有if-else块中的某个值。

除非两者都已初始化,否则您无法执行if(i>z),因为您需要初始化局部变量。

答案 1 :(得分:1)

编译器必须满足iz已初始化,才能进行比较i > z。您的代码不保证这一点,因为只有通过if..else逻辑的某些路径才会初始化这两个变量。

您有几个选择:

  • 最初的初始化iz,例如。到0或其他一些合适的默认值
  • 确保在每个i块中设置zif

其他一些风格问题:

  • 使用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逻辑之前保存st2if..else的下一个标记,并将它们与Ace,King等进行比较。

答案 2 :(得分:0)

在这种情况下,String的一个更优雅的解决方案是使用switch / case语句

答案 3 :(得分:0)

我建议使用Integer类。如果上一个if语句之前没有条件满足,请检查是否使用null检查初始化了那些 Integers