[英]scope error in if statement in java program
至少在if语句中,我遇到了范围问题,我很确定那是我的错误所在,而且我不确定如何解决该问题(我在编程方面很陌生)。
基本上,似乎如果我在if语句中声明某些内容,则该变量(在这种情况下为结构数组)在if语句之外不存在。 但是,由于数组的大小取决于N,所以我真的需要数组声明在if / else内,那么如何解决此错误呢?
该程序使用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
块内执行的操作是将数组实例化为正确的大小,如下所示:
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#中的“结构”之类的名称。以防万一您期望某些东西其他...)
将array
声明放在if
语句的范围之外。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.