【问题标题】:How to make a new array from an old array? [duplicate]如何从旧数组制作新数组? [复制]
【发布时间】:2013-05-06 13:24:30
【问题描述】:
float[][] pesIAlcada = {
        { 2.4f, 3.1f, 3.07f, 3.7f, 2.7f, 2.9f, 3.2f, 3f, 3.6f, 3.1f },
        { 19f, 18.7f, 22f, 24f, 17f, 18.5f, 21f, 20f, 18.7f, 22f, 18f },
        { 47f, 48f, 49f, 50f, 51f, 52f, 51.5f, 50.5f, 49.5f, 49.1f, 50f },
        { 101f, 104f, 106f, 107f, 107.5f, 108f, 109f, 110f, 112f, 103f } };
/* 
 * I already created an array. And I want to make a new one but some
 * infomation from the old array. How can I do, plz?
 */
float[][] pesNeixement = new float[ROWS][COLS];
for (int i = 0; i < 2; i++) {
    for (int j = 0; j < pesIAlcada[i].length; j++) {
        System.out.print(pesIAlcada[i][j]);
    }
}

【问题讨论】:

  • 我建议你避免使用float,它不仅会使这样的示例更复杂,而且精度要低得多(精度要低十亿倍)

标签: java


【解决方案1】:

如果您想从 pesIAlcada 复制一些行到一个新数组 (pesNeixement) 中,您可以使用如下内容:

int fromRow = 0;     // Start copying at row0 (1st row)
int toRow = 2;       // Copy until row2 (3rd row) <- not included
                     // This will copy rows 0 and 1 (first two rows)
float[][] pesNeixement = new float[toRow - fromRow][];

for (int i = fromRow; i < toRow; i++) {
    pesNeixement[i] = new float[pesIAlcada[i].length];
    System.arraycopy(pesIAlcada[i], 0, pesNeixement[i], 0, pesIAlcada[i].length);               
}

另请参阅short demo

【讨论】:

    【解决方案2】:

    System.arrayCopy() 是从现有数组创建新数组的有效方法。您可以使用自己的编码完成的操作也可以使用它来完成。只是探索

    【讨论】:

      【解决方案3】:

      使用此函数深度复制二维数组。

      public static float[][] deepCopy(float[][] original, Integer offset, Integer numberOfRows) {
          if (original == null) {
              return null;
          }
          if (offset == null) {
              offset = 0;
          };
      
          if (numberOfRows == null) {
              numberOfRows = original.length;
          };
      
          final float[][] result = new float[numberOfRows - offset][];
          for (int i = offset; i < numberOfRows; i++) {
               result[i] = Arrays.copyOf(original[i], original[i].length);
          }
          return result;
      }
      

      在你的代码中:

      float[][] pesNeixement = deepCopy(pesIAlcada, 0, 2);
      

      【讨论】:

      • 我想创建一个名为 pesNeixement 的新数组,并将这两行作为新数组(pesNeixement) .. { {2.4f, 3.1f, 3.07f, 3.7f, 2.7f, 2.9 f, 3.2f, 3f, 3.6f, 3.1f}, {19f, 18.7f, 22f, 24f,17f, 18.5f, 21f, 20f, 18.7f, 22f, 18f},
      • 您可能需要添加一个额外的offset 参数,以防有人想要从第 y 行开始复制 x 行。
      • @alex23 代码与此相同:stackoverflow.com/a/1564856/951448 这个答案比您所指的问题早 3 年...
      • @alex23 对不起,我是新来的,怎么办?
      【解决方案4】:

      这取决于您对“某些信息”的定义。如果要将数组的一部分复制到新的部分,则可以使用System.arraycopy

      示例

      int[] numbers = {4,5,6,7,8};
      int[] newNumbers = new int[10];
      
      System.arraycopy(numbers,0,newNumbers,0,3);
      

      【讨论】:

      • 我想创建一个名为 pesNeixement 的新数组,并将这两行作为新数组(pesNeixement) .. { {2.4f, 3.1f, 3.07f, 3.7f, 2.7f, 2.9 f, 3.2f, 3f, 3.6f, 3.1f}, {19f, 18.7f, 22f, 24f,17f, 18.5f, 21f, 20f, 18.7f, 22f, 18f},
      • 所以运用一些推理,看看你已经给出的答案,并找出你可能得到前两行的方法。
      • 是的,我在这里做了 float[][] pesNeixement = new float[ROWS][COLS]; for (int i = 0; i
      猜你喜欢
      • 2021-10-27
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 2021-02-26
      相关资源
      最近更新 更多