Switch语句:为什么可以';我在不同的情况下有相同的变量名吗?JAVA
我仍在编写代码,在我这样的项目中没有太大的区别,但如果我要做更大的事情,那将是一件痛苦的事。这是:Switch语句:为什么可以';我在不同的情况下有相同的变量名吗?JAVA,java,duplicates,switch-statement,Java,Duplicates,Switch Statement,我仍在编写代码,在我这样的项目中没有太大的区别,但如果我要做更大的事情,那将是一件痛苦的事。这是: case 0: System.out.print("Insert the N: "); double N = in.nextDouble(); double mol = N / Na; System.out.print("There are " + mol + " mol in that
case 0:
System.out.print("Insert the N: ");
double N = in.nextDouble();
double mol = N / Na;
System.out.print("There are " + mol + " mol in that sample");
break;
case 1:
System.out.print("Insert the m: ");
double m = in.nextDouble();
System.out.print("Insert the M: ");
double M = in.nextDouble();
double mol = m / M;
System.out.print("There are " + mol + " mol in that sample");
break;
case 2:
System.out.print("Insert the V: ");
double V = in.nextDouble();
double mol = V / Vm;
System.out.print("There are " + mol + " mol in that sample");
break;
第一个“mol”没有问题,但在案例1和案例2中,它表示“复制局部变量mol”。如果我使用If语句,它就会工作。Java就是这样,还是有办法解决
谢谢,因为这些变量在
单个块中
可能是您本应该用一些方法
编写这个开关
语句的。
在单个方法中,不能使用dup变量。这是因为
案例不创建范围。因此,这两种情况下的变量都在同一范围内。如果要这样做,可以为每个案例添加大括号,这将为每个案例创建一个新范围
case 0: {
System.out.print("Insert the N: ");
double N = in.nextDouble();
double mol = N / Na;
System.out.print("There are " + mol + " mol in that sample");
break;
}
case 1: {
System.out.print("Insert the m: ");
double m = in.nextDouble();
System.out.print("Insert the M: ");
double M = in.nextDouble();
double mol = m / M;
System.out.print("There are " + mol + " mol in that sample");
break;
}
但是,理想情况下,不需要为每种情况声明单独的局部变量。如果您在所有情况下都使用一个变量,那么这清楚地表明该变量将直接在开关语句中声明:
switch (someVar) {
double mol = 0.0;
case 0: mol = n / Na;
break;
case 1: mol = m / M;
break;
}
附言:我可以建议你把变量命名为英语字母以外的东西吗?n
,M
,n
?我想我只是在每种情况下使用{和}来解决它。如果语句是不同的块。在您的示例中,只有一个块。您通常应该在switch
子句的范围之外声明局部变量。如果您发现自己确实想要这样做,它可能会建议您需要将方法分解为从案例中调用的各个方法。否则,请在方法的顶部声明变量。如果您想知道,这是因为在Java(如C/C++)中,开关大括号内的所有内容都是同一堆栈框架的一部分,大小写标签只是-label(如您在C/C++中使用的goto语句)。因此,所有变量名都必须是唯一的。但是,将大括号添加到每个case语句中会创建一个新的堆栈框架,从而可以自由选择变量命名。如果有足够的代码,我觉得我必须让变量接近它们的使用位置,那么案例应该是从案例中调用的它们自己的方法。2.如果不是,则在包含开关的方法顶部声明公共变量。3.(还有一个非常遥远的第三个)这个。@T.J.Crowder实际上,我自己都不记得上次在Java中使用这种变通方法是什么时候了。这真的应该避免:)@RohitJain:我想你只是在彻底检查而已。:-)可以确认,这个解决方案也可以在Javascript中工作:D