Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找相邻矩阵:Java.lang.ArrayIndexOutOfBoundsException_Java_Arrays_Recursion_Matrix_Indexoutofboundsexception - Fatal编程技术网

查找相邻矩阵:Java.lang.ArrayIndexOutOfBoundsException

查找相邻矩阵:Java.lang.ArrayIndexOutOfBoundsException,java,arrays,recursion,matrix,indexoutofboundsexception,Java,Arrays,Recursion,Matrix,Indexoutofboundsexception,我试图找到矩阵中所有相邻的元素。相邻是指水平、垂直和对角元素彼此相邻的元素。但是它给了我java.lang.ArrayIndexOutOfBoundsException:索引5超出长度5的界限。我不知道为什么,任何帮助都将不胜感激!此外,该程序需要是递归的 class matrixAdjacent { public static void main(String[] args) { char grid[][] = {{'0','0','0','1','1','0','1

我试图找到矩阵中所有相邻的元素。相邻是指水平、垂直和对角元素彼此相邻的元素。但是它给了我
java.lang.ArrayIndexOutOfBoundsException:索引5超出长度5的界限。我不知道为什么,任何帮助都将不胜感激!此外,该程序需要是递归的

class matrixAdjacent
{
   public static void main(String[] args) 
   {
      char grid[][] = {{'0','0','0','1','1','0','1','1','0','0','0','1','1','1','0','1','1','1','0','1'},
                      {'1','0','0','0','0','1','0','0','0','1','0','0','0','0','0','1','1','1','1','1'},
                      {'0','1','0','0','1','0','0','0','1','0','1','0','0','0','0','0','0','1','1','1'},
                      {'1','1','1','0','0','1','0','1','0','0','0','0','1','0','1','1','0','1','1','0'},
                      {'0','1','1','1','0','1','1','1','0','1','0','0','1','0','1','0','1','1','0','1'}};
      
      ExploreAndLabelColony(grid, 0, 0);
   }


private static void ExploreAndLabelColony(char[][] grid, int i, int j) 
{
    // TODO Auto-generated method stub
    if(grid==null)
    {
        return;
    }
    if(i==grid.length || j==grid[0].length) 
    {
        return;
    }  
    
    if (grid[i][j] == '1') //checks if theres a 1 which refers to a colony      
    {
      if (i>0 && i + 1 < grid.length && j>0 && j + 1 < grid[0].length) 
      {
         if (grid[i+1]==grid[j] || grid[i] == grid[j+1] || grid[i-1]==grid[j] || grid[i]==grid[j-1]) //checks if adjacent
         {
           grid[i][j] = 'A'; //creates a colony
         }
      }
    }
    else if(grid[i][j] == '0') //replaces 0 with '-'
    {
      grid[i][j] = '-';  
    }
    
    System.out.print(grid[i][j]); //print grid
    if(j==grid[0].length-1)
    {
      System.out.println();      //prints next row
      ExploreAndLabelColony(grid,i+1,0); //recurse to increment row 
    }     
    ExploreAndLabelColony(grid,i,j+1); //recurse to increment column
      
    }
}
类矩阵邻接
{
公共静态void main(字符串[]args)
{
字符网格[][]={{'0','0','0','1','1','0','1','1','0','0','0','0','1','1','1','0','1','1','1','1','1','0','1'},
{'1','0','0','0','0','1','0','0','0','1','0','0','0','0','0','1','1','1','1','1'},
{'0','1','0','0','1','0','0','0','1','0','1','0','0','0','0','0','0','1','1','1'},
{'1','1','1','0','0','1','0','1','0','0','0','0','1','0','1','1','0','1','1','0'},
{'0','1','1','1','0','1','1','1','0','1','0','0','1','0','1','0','1','1','0','1'}};
ExploreAndLabelColony(网格,0,0);
}
私有静态void exploredLabelClony(char[][]网格,int i,int j)
{
//TODO自动生成的方法存根
if(grid==null)
{
返回;
}
如果(i==grid.length | | j==grid[0].length)
{
返回;
}  
if(grid[i][j]='1')//检查是否有一个1表示一个殖民地
{
如果(i>0&&i+10&&j+1
问题
if(i>0&&i+10&&j+1
在上述代码部分中,
j>0&&j+1
不能保证访问
grid[j]

对内部数组索引的检查无法正确验证对外部数组索引的访问

检查相邻元件 要检查相邻元素,必须检查所有4个有效的相邻索引

  • grid[i][j-1]
  • grid[i][j+1]
  • grid[i-1][j]
  • grid[i+1][j]

  • 在上述4项检查中,请在进行任何
    i-1
    i+1
    j-1
    j+1
    访问之前验证索引。

    对于坐标为
    i
    j
    的给定单元格,相邻元素位于正方形中:

    [i - 1][j - 1], [i - 1][j], [i - 1][j + 1]
    [i    ][j - 1],  CURR_CELL, [i    ][j + 1]
    [i + 1][j - 1], [i + 1][j], [i + 1][j + 1]
    
    可使用
    Math.min
    Math.max
    函数应用附加限制,并可按如下方式检测相邻单元格:

    ---AA-A1---AA1-AAA-A
    A----A---A-----AAAAA
    -A--A---A-1------AAA
    AAA--A-A----A-AA-AA-
    -AA1-AA1-1--1-1-A1-1
    
    if(grid[i][j]='1'){//检查是否有一个1引用一个殖民地
    要打破的标签
    对于(intii=Math.max(i-1,0),in=Math.min(grid.length,i+2);ii
    通过此更改,给定输入的输出:

    publicstaticvoidmain(字符串[]args){
    字符网格[][]={
    {'0','0','0','1','1','0','1','1','0','0','0','1','1','1','0','1','1','1','0','1'},
    {'1','0','0','0','0','1','0','0','0','1','0','0','0','0','0','1','1','1','1','1'},
    {'0','1','0','0','1','0','0','0','1','0','1','0','0','0','0','0','0','1','1','1'},
    {'1','1','1','0','0','1','0','1','0','0','0','0','1','0','1','1','0','1','1','0'},
    {'0','1','1','1','0','1','1','1','0','1','0','0','1','0','1','0','1','1','0','1'}
    };
    ExploreAndLabelColony(网格,0,0);
    }
    
    详情如下:

    ---AA-A1---AA1-AAA-A
    A----A---A-----AAAAA
    -A--A---A-1------AAA
    AAA--A-A----A-AA-AA-
    -AA1-AA1-1--1-1-A1-1
    

    可能的情况是,应该修复条件以检查相邻单元格是否已包含
    A
    ,或者是否有太多的相邻单元格,但设置/应用这些或任何其他规则取决于作者。

    如何修复?我试图在同一条线上创造条件,但它仍然给了我机会errors@some_cs_student,用可能的索引更新了答案。可以使用代码调试器进行调试。如果您不使用任何调试器,可以尝试intellij community edition。@某些学生,您可能需要阅读以下页面:)