我在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
答案 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
声明的范围之外。