gpt4 book ai didi

java - 交换双二维数组java的行

转载 作者:行者123 更新时间:2023-12-02 11:15:11 25 4
gpt4 key购买 nike

我正在尝试用java编写一个方法,它允许我交换 double 类型的二维数组的行。当我在二维整数数组上使用我的代码时,它可以完美工作,但在应用于 double 时,它不起作用。我是否遗漏了有关 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

 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被发送到数组的底部,并且每隔一行向上移动//对于二维数组:

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

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

{ {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 时,我得到了预期的数组

最佳答案

由于代码是正确的,恕我直言,二维数组一定已损坏(不太可能,两行中有相同的 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));

关于java - 交换双二维数组java的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50332733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com