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语言的范围规则。
你可以在 if
或else
块中做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
语句的范围之外。