我想知道是否有任何方法可以声明不同大小的数组,具体取决于是否满足if语句条件。但是,在将此代码输入NetBeans之后:
if(winner == true)
double data[][] = new double[16][5];
else
double data[][] = new double[14][5];
我收到一条错误消息,指出:此处不允许变量声明。
为什么不允许这样做?有没有办法完成我想做的事情? TIA。
注意
正如在提供的答案中明确指出的那样,我在写这篇文章时没有考虑范围。我道歉。感谢所有提供有用解决方案和见解的人。
答案 0 :(得分:11)
另一种解决方案是:
double data[][] = new double[winner ? 16 : 14][5];
x ? a : b
事物称为"三元运算符"。如果a
为真,则评估为x
,否则为b
。
答案 1 :(得分:5)
你应该这样做:
double data[][];
if(winner == true) // or just --> if (winner)
data = new double[16][5];
else
data = new double[14][5];
基本上,当你在if中声明它时,你只能在if中使用它。它的范围仅限于此。
答案 2 :(得分:2)
你声明的数组是在if函数中,它们不会被再次使用,我不确定这是否是你的错误的原因但是可能在IF语句之外声明var
double data[][];
if(winner == true){
data = new double[16][5];
}else{
data = new double[14][5];
}
答案 3 :(得分:1)
您必须在if..else
块之外声明您的数组并在if..else
块内初始化它:
double data[][];
if(winner == true)
data = new double[16][5];
else
data = new double[14][5];
答案 4 :(得分:1)
您不希望在if
块中声明变量,因为一旦退出该块,它就会超出范围。在if
之前声明变量,然后在里面初始化它。
double data[][];
if(winner == true)
data = new double[16][5];
else
data = new double[14][5];
答案 5 :(得分:1)
试试这个:
double data[][];
if(winner)
data = new double[16][5];
else
data = new double[14][5];
答案 6 :(得分:1)
内部if语句只允许声明,但声明不是声明,因此不允许在该地点使用。
好的,试试这个;
17/04/10 16:35:41 WARN BlockReaderFactory: I/O error constructing remote block reader.
org.apache.hadoop.net.ConnectTimeoutException: 60000 millis timeout while waiting for channel to be ready for connect. ch : java.nio.channels.SocketChannel[connection-pending remote=/datanode_ip:50010]
答案 7 :(得分:0)
这是使用三元运算符的绝佳机会。
double data[][] = (isWinner)?new double[16][5] : new double[14][5];
<强>建议强>
isWinner
而不是winner
,您可以
像上面的例子一样执行检查。通过删除条件
winner == true
您的代码变得更容易阅读。 答案 8 :(得分:-2)
这是一个古老的角落案例,你应该像往常一样添加花括号:
if(winner == true) {
double data[][] = new double[16][5];
}
else {
double data[][] = new double[14][5];
}
这是因为你的语句是局部变量声明语句。 Java Puzzlers中描述了这种行为,JLS第14.4节对此进行了介绍。