有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在递归中使用相同的变量

我试图在一个特定的问题上应用洪水填充。我很难理解如何使用帮助函数创建变量,所以我在所有递归过程中都会保留它
虽然我不知道如何将其应用于我自己的使用,但我已经看到了一条关于它的线索

这是我到目前为止写的代码:

如何创建k变量以保持不变

public static int[][] fill(int[][] map, int i, int j, int color) {
    int[][] ans = null;

    if ((i<map.length)&&(i>0)&&(j<map.length)&&(j>0))
    {
        if ((k!=map[i][j]))
        {
            map[i][j]=color;    
        }
    }
    fill(map,i-1,j,color);
    fill(map,i+1,j,color);
    fill(map,i,j-1,color);
    fill(map,i,j+1,color);
    return ans;
}

public static void fill(int[][] map, int i, int j, int color,int k)

k=map[i][j] 

假设这是我的阵列:

4,1,2,2
4,4,3,1
1,4,4,4

1,4,0,2

我希望用洪水填充所有值为4的索引。 我希望k得到4的值,这样我就可以用k来比较每个索引


共 (2) 个答案

  1. # 1 楼答案

    除了你的问题,我注意到你的函数不起作用,因为你要检查边界,你要检查行或列是否等于电路板长度,这没关系,但你需要将它改为<;,而不是<;=。无论如何,您可以这样使用代码:

    public static int[][] fill(int[][] map, int i, int j, int color) {
    
        int origColor = map[i][j];
        fill(map, i, j, color, origColor);
    
    
        return map;
    
        }
    
    private static void fill(int[][] map, int i, int j,int color, int   origColor) {
    
    
    
        //checks if index is inside matrix and if the index is equal to original   number.
    
        if ((i<map.length)&&(i>=0)&&(j<map.length)&&(j>=0)&&(origColor==map[i][j]))
    
        {
    
        map[i][j]=color;
    
    
    
        //recursive call for north east west south.
    
        fill(map,i-1,j,color,origColor);
    
        fill(map,i+1,j,color,origColor);
    
        fill(map,i,j-1,color,origColor);
    
        fill(map,i,j+1,color,origColor);
        }
    
    
        }
     public static void printBoard(int[][] board) {
    if (board == null)
        System.out.println("null");
    else for (int i=0; i<board.length; i++) {
        if (board[i] == null)
            System.out.println("null");
        else
            for (int j=0; j<board[i].length; j++) 
                System.out.print(board[i][j]);
        System.out.println();
    }
    }
    

    检查:

    fill(map,1,1,9);
        printBoard(map);
    

    祝你好运

  2. # 2 楼答案

    你可以使用一个新函数来获取k的值(我在示例中称之为origColor),然后将它传递给需要它的函数。使用k的函数不需要从外部可见,除非您也希望,所以我在下面将其设置为私有

    public static void fill(int[][] map, int i, int j, int color) {
      int origColor = map[i][j];
      fill(map, i, j, color, origColor);
    }
    
    private static void fill(int[][] map, int i, int j, int color, int origColor) {
      // actual fill method with recursive calls.
    }