如何在不搜索越界的情况下读取2D数组?

时间:2017-10-19 12:42:26

标签: java arrays

我有一个2D数组作为网格。

HikariPool-1 - Failed to validate connection org.mariadb.jdbc.MariaDbConnection@31124a47 (Connection.setNetworkTimeout cannot be called on a closed connection)
    at com.zaxxer.hikari.pool.PoolBase.isConnectionAlive(PoolBase.java:184)
    at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:172)
    at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:146)
    at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:85)
    at play.api.db.DefaultDatabase.getConnection(Databases.scala:142)
    at play.api.db.DefaultDatabase.withConnection(Databases.scala:152)
    at play.api.db.DefaultDatabase.withConnection(Databases.scala:148)

如何按顺序搜索网格,如(0,0),(1,0),(2,0),(3,0),(4,0)然后(0,1),( 1,1),(2,1)...没有得到任何数组超出范围的例外。

我是编程新手,我无法理解如何做到这一点。

5 个答案:

答案 0 :(得分:2)

你知道自己的长度,现在使用for循环圈出数组。

for (int i = 0;i<5;i++){
    for (int j = 0;i<5;i++){
        int myInt = grid[i][j];
        //do something with my int
    }
}

要在运行时获取长度,您可以

int lengthX = grid.length; //length of first array
int lengthY = 0;
if ( lengthX>0){ //this avoids an IndexOutOFBoundsException if you don't know if the array is already initialized yet.
     lengthY = grid[0].length; //length of "nested" array
}

然后使用forlengthX进行lengthY循环。

答案 1 :(得分:0)

您需要两个嵌套循环才能访问数组的两个维度:

int grid[][] = new int[5][5];
for(int i = 0; i < 5; i++  ) {
    for(int j = 0; j < 5; j++  ) {
        int value = grid[i][j];
    }
}

答案 2 :(得分:0)

使用2个forloops,如下例所示:

for(int i = 0; i < 5; i++){
    for(int j = 0; j < 5; j++){
         System.out.println(grid[i][j]);
    }
}

另外我建议在初始化数组时将其写成:

 int[][] grid = new int[5][5]; // note the double brackets are after int and not grid

答案 3 :(得分:0)

试试这个:

for(int i=0;i<5;i++)
{
  for(int j=0;j<5;j++)
  {
    System.out.println(grid[j][i]);
  }
}

答案 4 :(得分:0)

此代码(与其他答案一样)使用两个for循环。 但它确实添加了一些边缘情况的处理

B2