2016-06-13 62 views
-1

例如,如果我写这样的代码:为什么我不能在开关中使用相同的变量?

double result = 0; 
    switch (operation) { 
     case "divide": 
      double result = (double) first/second; 
      string = Double.toString(result); 
      break; 
     case "multiply": 
      double result = (double) first * second; 
      string = Double.toString(result); 
      break; 
     case "substract": 
      double result = (double) first - second; 
      string = Double.toString(result); 
      break; 
     case "add": 
      double result = (double) first + second; 
      string = Double.toString(result); 
      break; 
    } 

它返回错误:可变“结果”在范围已定义。

我知道如何解决这个问题。我可以在每种情况下创建一个不同的变量,但是这样会通过必须为每个变量编写代码来延长代码长度。

如何使这项工作在给定的代码中书写?

+0

你可以像'案“鸿沟”括号包装每个案例:{...}'等等给每个情况下,它自己的范围 – daco

+0

我只是想这样做,但它不能解决问题。它仍然报告相同的错误。 – Leonz

+0

http://ideone.com/L2wu9I – Selvin

回答

4

这是由result已被定义在switch语句顶部的事实引起的,并且您正在声明中再次声明它。

尝试这样:

switch (operation) { 
    case "divide": 
     double result = (double) first/second; 
     string = Double.toString(result); 
     break; 
    case "multiply": 
     double result = (double) first * second; 
     string = Double.toString(result); 
     break; 
    case "substract": 
     double result = (double) first - second; 
     string = Double.toString(result); 
     break; 
    case "add": 
     double result = (double) first + second; 
     string = Double.toString(result); 
     break; 
} 

换句话说,你有过什么,只是从你最初的声明。


或者,你可以声明double,并用它在你的每一个案件:

double result = 0; 
switch (operation) { 
    case "divide": 
     result = (double) first/second; 
     string = Double.toString(result); 
     break; 

    ... 

由于亚辛Hajaj在评论中指出,这将是,如果要好得多您在switch语句的末尾使用了string = Double.toString(result);一次,而不是多次重复。

这将是这个样子:

double result = 0; 
switch (operation) { 
    case "divide": 
     result = (double) first/second; 
     break; 
    case "multiply": 
     result = (double) first * second; 
     break; 
    ... 
} 
string = Double.toString(result); 
+0

哦。我在案件陈述中再次初始化结果。按照您的说法完成,现在可以使用,非常感谢。 – Leonz

+0

@Leonz很高兴我能帮到你! :) –

+0

@Leonz请优化代码。你可以在交换机外写'string = Double.toString(result)'而不是写4次。 –

0

实际上,你可以通过使用括号。

switch (operation) { 
     case "divide": { 
      double result = (double) first/second; 
      string = Double.toString(result1); 
      break; 
     } 
     case "multiply": { 
      double result = (double) first * second; 
      string = Double.toString(result2); 
      break; 
     } 
     default: 
      break; 
    } 
0

在java中,{}内定义的任何局部变量都可用,直到最后一行,因此您可以在块内定义之后重用任何地方。所以在你的情况下没有用来重新定义结果变量。只需在第一行中定义并随处使用即可。

double result = 0; 
    switch (operation) { 
     case "divide": 
      result = (double) first/second; 
      string = Double.toString(result1); 
      break; 
     case "multiply": 
      result = (double) first * second; 
      string = Double.toString(result2); 
      break; 
     case "substract": 
      result = (double) first - second; 
      string = Double.toString(result3); 
      break; 
     case "add": 
      result = (double) first + second; 
      string = Double.toString(result4); 
      break; 
    } 
+0

...你可以进一步...并移动'string = Double.toString(result);'在开关外部... – Selvin

0

becaue您已经定义双重结果变量,以便做到像下面希望它会工作

double result = 0; <----- already define here 
switch (operation) { 
    case "divide": 
     result = (double) first/second; <------ there is no need to 
                define it again 
     string = Double.toString(result1); 
     break; 
    case "multiply": 
     result = (double) first * second; 
     string = Double.toString(result2); 
     break; 
    case "substract": 
     result = (double) first - second; 
     string = Double.toString(result3); 
     break; 
    case "add": 
     result = (double) first + second; 
     string = Double.toString(result4); 
     break; 
} 
0

如果要使用公共变量,那么你可以这样做。

double result = 0; 
    switch (operation) { 
     case "divide": 
      result = (double) first/second; 
      string = Double.toString(result); 
      break; 
     case "multiply": 
      result = (double) first * second; 
      string = Double.toString(result); 
      break; 
     case "substract": 
      result = (double) first - second; 
      string = Double.toString(result); 
      break; 
     case "add": 
      result = (double) first + second; 
      string = Double.toString(result); 
      break; 
    } 
2

你不能在你的代码的一个范围内声明相同的变量名,使用全局变量的结果,你也万一范围内使用同一个变量。

double result = 0; 
    switch (operation) { 
     case "divide": 
      result = (double) first/second; 
      string = Double.toString(result); 
      break; 
     case "multiply": 
      result = (double) first * second; 
      string = Double.toString(result); 
      break; 
     case "substract": 
      result = (double) first - second; 
      string = Double.toString(result); 
      break; 
     case "add": 
      result = (double) first + second; 
      string = Double.toString(result); 
      break; 
    } 
相关问题