繁体   English   中英

基于If语句的Java声明数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM