繁体   English   中英

如何在Java中初始化static数组变量数组

[英]How to initialize static array variable array in Java

对于动态编程问题,我的代码中有类似的东西。

class Solution 
{
    
    static int dp[][] = new int[1000][1000];
    static int someMethod(int a, int b) {
        // use dp[][] somewhere here
        // some recursion statements
        someMethod(a-x,b-y);
    }
}

我想用-1而不是0初始化dp中的所有值。 方法内部的标准初始化不是一个选项,因为它使用递归来进行多次调用。

解决方案进入在线判断工具,因此也无法真正配置任何东西。 任何纯代码解决方案将不胜感激。

你说:

我想用 -1 而不是 0 初始化 dp 中的所有值。

调用创建、填充和返回所需数组的static方法。

class Solution 
{
    static int[][] dp = Solution.makeArray() ;
    static int[][] makeArray() {
        int limit = 1_000 ;
        int[][] a = new int[ limit ][ limit ] ;
        for ( row = 0; row < limit ; row ++) {
            for ( column = 0; column < limit ; column ++) {
                a[ row ][ column ] = -1 ;
            }
        }
        return a ;
    }
}
class Solution 
{
    
    static int dp[][];
    static {
       dp = new int[1000][1000];
       for (int[] row: dp) {
          Arrays.fill(row, -1);
       }
    }

    static int someMethod(int a, int b) {
        // use dp[][] somewhere here
        // some recursion statements
        someMethod(a-x,b-y);
    }
}

如果您需要使用递归来执行此操作,您可以执行以下操作:出于演示目的,我减小了数组的大小。 但是对于 1000 x 1000 阵列,除非您修改 JVM 参数,否则您可能会得到StackOverflow 使用 Eclipse,我必须通过
java -Xss28m命令。

import java.util.Arrays;

class Solution {
    
    static int dp[][] = new int[10][10];

    public static void main(String[] arg) {
        someMethod(0, 0);
        for (int[] row : dp) {
            System.out.println(Arrays.toString(row));
        }
    }

印刷

[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]

方法

    static void someMethod(int a, int b) {
        if (b < dp[0].length - 1) {
            someMethod(a, b + 1);
        } else if (a < dp.length - 1) {
            someMethod(a + 1, 0);
        }
        dp[a][b] = -1;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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