首页 > 解决方案 > 如何解决有关此代码的 java.lang.OutOfMemoryError

问题描述

这是一个简单的任务,将“之字形”矩阵中的元素相加水平移动。变量“sumPath”需要很长,它会抛出“java.lang.OutOfMemoryError”。

我有两个“for”周期,需要缩短它们。

我怎么能做到?

这是代码:

public static void main(String[] args) {

    Scanner scanner = new Scanner(System.in);
    int n = Integer.parseInt(scanner.next());
    int m = Integer.parseInt(scanner.next());
    int[][] matrix = new int[n][m];
    long sumPath = 1;

    matrix[0][0] = 1;
    for (int row = 0; row < n; row++) {
        if (row > 0) {
            matrix[row][0] = matrix[row - 1][0] + 3;
        }
        for (int col = 1; col < m; col++) {
            matrix[row][col] = matrix[row][col - 1] + 3;
        }
    }
    int row = 0;
    while (row < n-1) {
        for (int col = 1; col < m; col++) {
            if (col % 2 == 0) {

                sumPath = sumPath + matrix[row][col];
            } else {

                sumPath = sumPath + matrix[row+1][col];
            }
        }
        row = row + 2;
        if (row >= n) {
            break;
        }
        for (int col = m - 2; col >= 0; col--) {
            if (col % 2 == 0) {

                sumPath = sumPath + matrix[row][col];

            } else {

                sumPath = sumPath + matrix[row-1][col];

            }
        }
    }
    System.out.println(sumPath);
 }
}

标签: java

解决方案


只有一行代码可能会发生 OutOfMemoryException:

 int[][] matrix = new int[n][m];

矩阵必须完全适合内存。当数字 n 和 m 太大时,矩阵将变得对于可用内存来说太大。


推荐阅读