java-Declaring基于If语句的数组

时间:2017-04-10 14:37:01

标签: java arrays if-statement

我想知道是否有任何方法可以声明不同大​​小的数组,具体取决于是否满足if语句条件。但是,在将此代码输入NetBeans之后:

if(winner == true)
    double data[][] = new double[16][5];
else
    double data[][] = new double[14][5];

我收到一条错误消息,指出:此处不允许变量声明。

为什么不允许这样做?有没有办法完成我想做的事情? TIA。

注意

正如在提供的答案中明确指出的那样,我在写这篇文章时没有考虑范围。我道歉。感谢所有提供有用解决方案和见解的人。

9 个答案:

答案 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您的代码变得更容易阅读。
  • 使用ternary operator,可以让您的代码更短,更清晰。

答案 8 :(得分:-2)

这是一个古老的角落案例,你应该像往常一样添加花括号:

        if(winner == true) {
            double data[][] = new double[16][5];
        }
        else {
            double data[][] = new double[14][5];
        }

这是因为你的语句是局部变量声明语句。 Java Puzzlers中描述了这种行为,JLS第14.4节对此进行了介绍。