java程序中if语句中的作用域错误

java程序中if语句中的作用域错误,java,if-statement,scope,Java,If Statement,Scope,我在if语句中遇到了一个范围问题,至少,我很确定这就是我的错误所在,并且我不确定如何解决这个问题(我对编程非常陌生) 基本上,如果我在if语句中声明了一些东西,那么变量(在本例中是一个结构数组)就不存在于if语句之外。但是,我确实需要将数组的声明放在if/else中,因为数组的大小取决于N,所以如何修复此错误 这个程序是用Java编写的,我正在使用Eclipse。非常感谢您的任何见解 //declare an int (used in determining array length) int

我在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
//声明一个int(用于确定数组长度)
int N=4;
//声明MyClass的实例
MyClass MyClass=新的MyClass();
//声明和数组,然后初始化该数组中的每个结构

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

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();
    }
}
MyStruct[]数组;

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

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();
    }
}
MyStruct[]数组;

如果(N将
数组
声明置于
if
语句的范围之外。

数组
声明置于
if
语句的范围之外。

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

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);
int length=Math.min(N,26);
MyStruct数组[]=新的MyStruct[length];
for(int i=0;i

(请注意,名称
MyStruct
的含义在Java中可能不太合适。我意识到它只是一个伪名称,但Java没有类似于C或C的“struct”的内容。以防万一,您还需要其他东西……)

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

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);
int length=Math.min(N,26);
MyStruct数组[]=新的MyStruct[length];
for(int i=0;i

(请注意,名称
MyStruct
的含义在Java中可能不太合适。我意识到它只是一个伪名称,但Java没有类似于C或C的“struct”的内容。以防万一,您还需要其他东西……)

Ah-我想到了这一点,但是,唉,我希望数组大小取决于变量N。如果N@Tabitha我刚刚编辑了我的答案,其中包含了更多的细节和你的问题的解决方案——我想到了这一点,但是,唉,我希望数组大小取决于变量N。如果N@Tabitha我只是用更多的细节和解决方案编辑了我的答案解决你的问题