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

我在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 

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

你可以 ifelse块中做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[] array = new MyStruct[N <= 26 ? 260 : N*10]; for (int i = 0; i < array.length; i++) { array[i] = new MyStruct(); } 

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

 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”那样的东西。以防万一你想要的东西其他...)

array声明放在if语句的范围之外。