java程序中if语句的范围错误

时间:2012-03-10 21:06:09

标签: java if-statement scope

我在if语句中遇到问题,至少,我很确定这是我的错误所在,而且我不确定如何解决这个问题(我很擅长编程)。

基本上,似乎如果我在if语句中声明了某些内容,那么变量(在本例中是一个结构数组)在if语句之外就不存在了。但是,我真的需要将数组的声明放在if / else中,因为数组的大小依赖于N,那么我该如何解决这个错误呢?

该程序是Java的,我正在使用Eclipse。非常感谢任何见解。

//declare an int (used in determining array length)
int N = 4;

//declare instance of MyClass
MyClass myClass = new MyClass();

//declare and array, then initialize each struct in that array
        if(N <= 26){
            MyStruct array[] = new MyStruct[260];
            for(int i = 0; i < array.length; i++){
                array[i] = new MyStruct();
            }
        }

        else{
            MyStruct array[] = new MyStruct[N*10];
            for(int i = 0; i < array.length; i++){
                array[i] = new MyStruct();
            }

//lots of other code goes here of stuff that needs to be done before myMethod can be called

//call a method in myClass that requires 'array' to be passed in
myClass.myMethod(array);     // ERROR - ARRAY CANNOT BE RESOLVED TO BE A VARIABLE

3 个答案:

答案 0 :(得分:2)

您需要将MyStruct array[];块的数组声明if 移到之外。你回答了自己的问题,事实上,当你在一个块中声明一个局部变量(一段由{}包围的代码)时,该变量只会在该块中可见,这符合Java的作用域规则语言。

你可以在<{1>}或if内部将数组实例化为正确的大小,如下所示:

else

更短的解决方案是:

MyStruct[] array;

if (N <= 26) {
    array = new MyStruct[260];
    for (int i = 0; i < array.length; i++) {
        array[i] = new MyStruct();
    }
}

else {
    array = new MyStruct[N*10];
    for (int i = 0; i < array.length; i++) {
        array[i] = new MyStruct();
    }
}

答案 1 :(得分:2)

其他人已经回答了为什么这是一个问题以及如何避免它,但我实际上还是改变了方法。目前你有两个重复代码的块 - 为什么不避免这个呢?

int length = Math.min(N, 26);
MyStruct array[] = new MyStruct[length];
for(int i = 0; i < array.length; i++) {
    array[i] = new MyStruct();
}

MyClass myClass = new MyClass();
myClass.myMethod(array);

(请注意,名称MyStruct具有在Java中可能不合适的内涵。我意识到它只是一个虚拟名称,但Java没有像C或C#中的“struct”那样的东西。如果你期待别的东西...)

答案 2 :(得分:1)

array声明置于if声明的范围之外。