【问题标题】:What is wrong with this 2D Array?这个二维数组有什么问题?
【发布时间】:2011-11-15 19:13:26
【问题描述】:

我在 Java 中使用 2D 数组,这是第一次这样做。我想知道数组有什么问题,因为我遇到了很多错误......? (可能是一个非常愚蠢的错误)

代码

    int board[21][21] = {{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, 
  {1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1},
  {1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1},
  {1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1},
  {1,0,1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,1,0,1},
  {1,0,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1},
  {1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1},
  {1,1,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,1,1,1,1},
  {0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0},
  {1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1},
  {0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0},
  {1,1,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,1,1,1,1},
  {1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1},
  {1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1},
  {1,0,1,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,0,1},
  {1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1},
  {1,0,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,0,1},
  {1,0,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1},
  {1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1},
  {1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}};

错误列表 Here is a link instead of posting it here since it's a lot of errors

【问题讨论】:

  • 谢谢大家解决了!

标签: java arrays syntax formatting 2d


【解决方案1】:

您不能在声明中指定数组的大小。如果您删除大小整数,它将编译。但是,在声明变量时,应始终将括号放在变量的类型上,而不是放在变量本身上:

int[][] board;

而不是:

int board[][];

如果要创建具有特定大小的空白数组,则可以使用 new 运算符:

int[][] board = new int[21][21];

但是,如果通过数组初始化来定义数组,则永远不会指定大小,即

int[][] board = {{...}, ...};

【讨论】:

  • 为什么将括号放在类型上比放在变量上更好?
  • 变量的维度是什么就比较清楚了。它还可以防止您创建格式不正确的代码,如下所示:int x, arr[], doubleArr[][], y; 它也与数组的构造一致,即int[] arr = new int[5],其中括号都在类型而不是变量上。这也是 Checkstyle 违规。
  • 因为变量的名称是board,而不是board[][],变量的类型是int[][],而不是int,在其他情况下,变量使用@987654332声明@.
【解决方案2】:

删除21。你应该说

int board[][] = ....

您必须在创建数组时定义数组的维度。例如,您可以说 new int[5] 并创建 5 个元素的 long int 数组。但是,当您将此数组分配给变量时,您会说:int[] arr = new int[5]。这里int[] 是一个类型(int 数组)。它类似于 C 中的int *。在定义数组类型时,您不必说数组有多大。您只需说出它的元素类型是什么以及它将有多少个维度。

【讨论】:

    【解决方案3】:

    首先,在声明中告知二维数组的大小时会出现编译错误

    int board[21][21]
    

    通常你想这样做:

    int board[][] = {{1,2}{1,3}}
    

    这是一个 2 列 2 行的二维数组

     1 2
     1 3
    

    所以如果你想要一个 21 行 21 列的二维数组,你应该这样做:

    int board[][] = {{},{},{},{},{},{},{},{},{},{},{},{},{}, {}、{}、{]、{}、{}、{}、{}、{}}

    在内括号之间填写您需要的任何内容。

    【讨论】:

      【解决方案4】:

      将第一行更改为board[][] ={{ all your numbers}},一切都会好的。

      【讨论】:

        【解决方案5】:

        你的声明是错误的。

         int board[][] = new int[][] {{...
        

        【讨论】:

          【解决方案6】:

          从声明中删除尺寸:

          int board[][]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多