2012-12-15 45 views
0

我目前正在用Java创建一个类似于下面的程序:它要求变量AC被初始化。变量必须是原始的

double AC; 
System.out.println("Please choose A or B") 

If(Condition to see if it A) 
{ 
AC = 1 
} 
else if(Condition to see if it B) 
{ 
AC = 2 
} 
else 
{ 
System.out.println("Please Enter a valid choice!") 
} 

double ab = AC * 2 

这将给出一个错误“变速交流必须初始化”,它造成这种情况的原因是,如果用户不选择A或B,就没有交流是在使用双AB。我该如何解决这个问题?谢谢

+1

请不要给我们伪代码,很难知道哪个错误对您很重要。 –

回答

1

这就是它说的:你必须确保AC在你使用它之前被初始化。

你的问题是AC没有价值,如果你在最后else

你可以给它一个默认值:

double AC = 33.2; // or Double.NaN if you prefer 
System.out.println("Please choose A or B") 
... 
-1

你只需要初始化交流,因为它是可能的“如果”既不会选择。只是做

double AC = -1; 

或一些虚拟值。

+2

通过混淆OP的变量'AC'和'ab',您正在混淆潜在的问题读者和答案。 –

+0

谢谢你的两个答案。有没有办法停止代码后,它打印“请输入一个有效的选择”,而不是继续双ab?谢谢 – Rennade

0

局部变量和原语使用前应进行初始化,因为你会知道从值

因此,你必须初始化这种变量的值会发生什么AC = <<any value>>;

请考虑以下例如

int a; // Valid 
int b; 
println("a=" + b); // Not valid since b's value has never been assigned 
+0

谢谢你的答案。有没有办法停止代码后运行“请输入一个有效的选择”谢谢 – Rennade

+1

@ user1906857更好地给你比任何伪代码有用的东西。 – Smit

+0

如果你正在使用循环,那么你可以打破循环,或者如果你正在使用方法,那么你可以从方法返回或抛出'IllegalArgumentException'。 –

0

在Java 7中你可以使用开关用绳子

switch (choose) { 
    case "A": 
     AC = 1; 
     break; 

    case "B": 
     AC = 2; 
     break; 

    default: 
     AC = -1; 
     break; 
    } 
0

这里包括两个:

  • 它仅要求使用一个有效的数字执行的else条款。即使这样做会编译,由于值永远不会被重建为有效值,程序中的流程将不正确;也就是说,你不会循环再次检查答案。

  • else子句未尝试将值赋给AC,该值是编译器在分配AC时看到的一个位置;不能保证其他两个代码路径中的任何一个都会被遵循,但else总是跟着。它不能在那里看到,所以你得到“变量可能未被初始化”的错误。