繁体   English   中英

交换双二维数组Java的行

[英]Swapping rows of double 2d array java

我试图用Java编写一个方法,使我可以交换double类型的2d数组的行。 当我在2d的int数组上使用我的代码时,它可以完美地工作,但是当应用于double时,它不能工作。 我是否缺少有关双数据类型的基本知识? 非常感谢任何见解。

// swapRows
// double[][] Integer -> double[][]

public static double[][] swapRows(double[][] a, int i)
{
   double[] temp = a[i];

   for(; i < a.length - 1; i++)
      a[i] = a[i+1];

   a[a.length - 1] = temp;

   return a;

}

//版本2,带有新的2d数组

 public static double[][] swapRows(double[][] a, int i)
 {
   double[][] b = new double[a.length][a[0].length];

   double[] temp = a[i];

   for(int k = 0; k < i;k++)
      b[k] = a[k];

   for(; i < a.length - 1; i++)
      b[i] = a[i+1];

   b[b.length - 1] = temp;

   return b;

  }

//请注意,这些行不仅交换,还将指定的行i发送到数组的底部,并且每隔一行将//移至2d数组:

{ {3, 5, 6},
{2, 1, 1},
{9, 0, 4} }

//我希望当i = 0时,该方法返回2d数组:

{ {2, 1, 1},
{9, 0, 4},
{3, 5, 6} }

//但是我得到:

{ {0.0, -29.999996, -38.571428},
{18.999997, 0.0, 0.999999},
{18.0, 29.999996, 36.0} }

//当我使用int而不是double时,得到了期望的数组

因为代码是正确的恕我直言,所以2D数组必须损坏( 不太可能 ,两行中都存在相同的double[]行对象),或者更可能是您更改了传递的数组并返回了它,这可能表示一些错误。处理结果。

double[][] a = ...
double[][] b = swapRows(a, i);
// a == b

一个创建副本的版本已更改:

public static double[][] swapRows(double[][] a, int i) {
    double[][] result = new double[a.length][];
    for (int j = 0; j < a.lnength; ++j) {
        result[j] = Arrays.copyOf(a[j], a[j].length);
    }

    double[] temp = result[i];
    for(; i < result.length - 1; i++) {
        result[i] = result[i+1];
    }
    result[result.length - 1] = temp;
    return result;
}

double[][] a = { { 1.0, 2.0 }, { 3.0, 4.0 } };
double[][] b = swapRows(a, 0);
assert b[0][0] == 3.0 && b[0][1] == 4.0 && b[1][0] == 1.0 && b[1][1] == 2.0;
System.out.println("result = " + Arrays.deepToString(result));

我发现了问题。 在主函数中,我还有其他测试行正在修改数组的值,然后再将其传递给swapRows方法。 感谢您的协助。

暂无
暂无

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

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