如果我的数组大小在Java中已满,如何动态创建数组的新实例

时间:2018-07-24 14:10:13

标签: java arrays

我正在研究Java程序。我取了一个输入字符串,然后将字符串中的每个字符放入4 * 4矩阵中。如果输入字符串的长度小于16即4 * 4矩阵,那么我要添加填充'#'char。

但是现在,假设输入字符串的长度大于16,那么我想创建一个新数组并将剩余的字符放入其中。我不能使用向量,集合,地图。那么,我现在该如何编码?

这是一些代码。键= 4。

 char[][] giveMeNewArray() {
    char[][] matrix = new char[key][key];
    return matrix;
 }

 void putCharIntoMatrix() {
    int counter = 0;
    char[][] myArray = giveMeNewArray();
    System.out.println("myArray: " + myArray);

    for (int i = 0; i < key; i++) {
        for (int j = 0; j < key; j++) {
            if (counter >= inputString.length()) {
                myArray[i][j] = '#';
            } else {
                myArray[i][j] = inputString.charAt(key * i + j);
            }
            counter++;
        }
    }

    for (int i = 0; i < key; i++) {
        for (int j = 0; j < key; j++) {
            System.out.print(myArray[i][j] + "  ");
        }
        System.out.println();
    }
}

2 个答案:

答案 0 :(得分:0)

因此,如果我正确理解了这个问题,您想创建一个矩阵来容纳输入字符串的字符,最小尺寸为4 * 4吗?

您最好创建一个合适的矩阵,而不是扩展它:

您要矩阵始终为正方形吗?

  1. 使用Math.sqrt

    获得下一个(自包含的)完美正方形
    int lowRoot = (int)Math.sqrt(inString.length());
    int root;
    if(lowRoot * lowRoot < inString.length())
        root = lowRoot+1;
    else
        root = lowRoot;
    
  2. 为输入创建比例最小的矩阵,至少四个

    int size = (root < 4) ? 4 : root;
    char[][] matrix = new char[size][size];
    

但是如果您真的想扩展它,则可以创建一个更大的新矩阵:

char[][] newMatrix = new char[oldMatrix.length+1][oldMatrix[0].length+1];

并将旧矩阵复制到新矩阵中

for(int i = 0; i < oldMatrix.length; ++i){
    for(int j = 0; j < oldMatrix[i].length; ++j){
        newMatrix[i][j] = oldMatrix[i][j];
    }
}

如果每次扩展一次,则将进行大量扩展,如果扩展更多,则可能会扩展得太远。

与刚开始做一些数学运算相比,这确实是低效率的。从一开始就创建适当大小的矩阵将为您节省一堆数据循环,并定期在内存中存储两个矩阵。

答案 1 :(得分:0)

如果您理解正确,那么如果字符串长度大于16,则只需创建一个新数组,然后在一个数组中初始化一个数组列表,如果字符数超过16个,只需将一个数组添加到数组中即可。使用返回数组的方法列出。