[英]java-Declaring Array Based on If Statement
我想知道是否有任何方法可以根据if语句条件是否满足来声明不同大小的数组。 但是,在NetBeans中输入以下代码后:
if(winner == true)
double data[][] = new double[16][5];
else
double data[][] = new double[14][5];
我收到一条错误消息,指出:此处不允许变量声明。
为什么不允许这样做? 有什么办法可以完成我想做的事情? 蒂娅
注意
正如提供的答案所明确指出的那样,撰写本文时,我没有考虑范围。 我道歉。 感谢所有提供有用的解决方案和见解的人。
一种替代解决方案是:
double data[][] = new double[winner ? 16 : 14][5];
x ? a : b
x ? a : b
被称为“三元运算符”。 如果x
为true,则求值为a
,否则为b
。
你应该做 :
double data[][];
if(winner == true) // or just --> if (winner)
data = new double[16][5];
else
data = new double[14][5];
本质上,当您在if中声明它时,只能在if中使用它。 它的范围仅限于该范围。
您声明的数组位于if函数中,在这些函数中它们不再使用,我不确定是否是您错误的原因,但可能在IF语句之外声明了var
double data[][];
if(winner == true){
data = new double[16][5];
}else{
data = new double[14][5];
}
您必须在if..else
块外声明数组,并在if..else
块内初始化数组:
double data[][];
if(winner == true)
data = new double[16][5];
else
data = new double[14][5];
您不想在if
块中声明变量,因为一旦退出该块,该变量将超出范围。 在if
之前声明变量,然后在内部对其进行初始化。
double data[][];
if(winner == true)
data = new double[16][5];
else
data = new double[14][5];
尝试这个:
double data[][];
if(winner)
data = new double[16][5];
else
data = new double[14][5];
在if语句内部,仅允许使用语句,但声明不是语句,因此该位置不允许使用。
好的,就这样尝试;
double data[][];
if(winner)
data=new double[16][5];
else
data=new double[14][5];
这是使用三元运算符的绝好机会。
double data[][] = (isWinner)?new double[16][5] : new double[14][5];
意见建议
isWinner
而不是winner
,你可以执行像上面的例子检查。 通过删除条件winner == true
您的代码将更易于阅读。 这是一个古老的极端案例,请像往常一样添加大括号:
if(winner == true) {
double data[][] = new double[16][5];
}
else {
double data[][] = new double[14][5];
}
这是由于you语句是局部变量声明语句。 此行为在Java Puzzlers中进行了描述,并且在JLS第14.4节中进行了介绍。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.