import java.util.Scanner;
public class RPS
{
public void show()
{
int i;
System.out.println("1 - Rock 2 - Paper 3 - Scissor");
Scanner in = new Scanner(System.in);
i = in.nextInt();
double x = Math.random();
int y;
if(x<=0.33)
{
y=1;
}
else if(x>0.33 && x<0.67)
{
y=2;
}
else if(x>=0.67)
{
y=3;
}
for(;;)
{
if(i==y)
System.out.println("It's a draw!");
else if(i==1 && y==2)
System.out.println("Computer wins!");
else if(i==1 && y==3)
System.out.println("You win!");
else if(i==2 && y==1)
System.out.println("You win!");
else if(i==2 && y==3)
System.out.println("Computer wins!");
else if(i==3 && y==1)
System.out.println("Computer wins!");
else if(i==3 && y==2)
System.out.println("You win!");
else
System.out.println("Error!");
}
}
}
怎么了?它给出了一个错误,变量y可能没有在for循环的if中初始化。我已经在前面的if-else部分给y赋值了。那么为什么它没有被初始化呢?
1条答案
按热度按时间nkoocmlb1#
javac
不够聪明,无法意识到你的条件构造方式,其中一个总是为真。你可以重写if语句,让
javac
意识到一个分支总是会被触发:现在
javac
看到,如果前两个不触发,最后一个会触发,所以y
总是有一个值。你也可以添加一个带有错误的
else
分支,以防有人破坏条件:这也可以编译,如果有人后来决定扭曲数字,并将第一个条件转换为
x <= 0.2
,但忘记更新其他条件,您将在运行时获得异常。