Switch语句:为什么我在不同的情况下不能拥有相同的变量名? Java的

时间:2014-02-22 11:18:30

标签: 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 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是这样还是有办法解决它?

由于

2 个答案:

答案 0 :(得分:15)

那是因为case没有创建范围。因此,两种情况下的两个变量都在同一范围内。如果你想这样做,你可以为每个案例添加大括号,这将为每个案例创建一个新的范围。

    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语句中直接声明的变量:

switch (someVar) {
    double mol = 0.0;

    case 0: mol = n / Na;
            break;

    case 1: mol = m / M;
            break;
}

P.S。:我可以建议您将变量命名为英文字母 - nMN吗?

答案 1 :(得分:4)

因为single block中存在这些变量,您可能会在某些switch中编写此method语句。 在单一方法中,您不能拥有重复变量。