Java 程序内存不足

标签 java memory random infinite-loop infinite

我编写了一个小程序,它基本上初始化了 RandomPermutation1 类型的对象的矩阵单元,因此它看起来像这样:

[1][2][3]

[4][5][6]

[7][8][0]

然后,方法 shuffle() 会生成单元格 0 的大量随机移动(应该是 1000 次,但在我的例子中,即使 5 次也不起作用)。

该程序不会产生任何错误,但也不工作(无限运行)。

如果有人能指出错误,我将不胜感激。

下面您可以找到代码的 MCTaRE(最小完整测试和可读示例)。

import java.util.*;

    public class RandomPermutation1{

      private int [][] randPerm;
      private int row, col;

      public RandomPermutation1(int row, int column){
        this.row = row;
        col = column;
        randPerm = new int[row][col];
        int number = 1;
        for (int i = 0; i < row; i++){
          for (int j = 0; j < col; j++){
            if (i == row - 1 && j == col - 1){
              randPerm[i][j] = 0;
            }
            else{
              randPerm[i][j] = number++;
            }
          }
        }
      }  

      public void shuffle(){

        int r = row-1;
        int c = col-1;
        int i = 0;

        while (i < 5){

          StringBuffer strB = new StringBuffer("");

          if (r > 0){strB.append("n");}
          if (r < row-1){strB.append("s");}
          if (c > 0){strB.append("w");}
          if (c < col-1){strB.append("e");}
          String s = getRandom(strB);
          switch(s){
            case "n":
              randPerm[r][c] = randPerm[r-1][c];
              randPerm[r-1][c] = 0;
              r = r-1;
              break;
            case "s":
              randPerm[r][c] = randPerm[r+1][c];
              randPerm[r+1][c] = 0;
              r = r+1;
              break;
            case "w":
              randPerm[r][c] = randPerm[r][c-1];
              randPerm[r][c-1] = 0;
              c = c-1;
              break;
            case "e":
              randPerm[r][c] = randPerm[r][c+1];
              randPerm[r][c+1] = 0;
              c = c+1;
              break;

          }
        }
        i++;
      }  

      private static String getRandom(StringBuffer strB) {    
        String str = strB.toString();
        int rnd = new Random().nextInt(str.length());
        return str.substring(rnd, rnd+1);
      }   


      public static void main (String[]args){
        RandomPermutation1 p = new RandomPermutation1 (3, 3);
        p.shuffle();    
      }  
    }

最佳答案

您需要将 i++ 放入 while 循环中

甚至更好

while (i++ < 5)

关于Java 程序内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21822622/

相关文章:

Java 日期格式转 JavaScript 日期格式

Haskell HDBC-ODBC 内存泄漏?

c - 为什么 rand() 比 arc4random() 快得多?

python - 使用 Python、ArcGIS 10.1 生成随机数

c++ - 为什么样本不是随机填充我的 vector ?

java - Java 泛型的 C++ 等价物

Java - 大字符串需要用不同的字段长度分割

java - java中如何通过递归返回值列表?

java - Java 中是否有任何开源内存磁盘缓冲区实现?

c++ - 智能指针无法释放内存