在两个数组中交换值时出现无法解释的问题

丹尼尔

您好,我已经尝试找出程序中的这个错误已有好几个小时了,并且已经可以将其固定下来。我不会坐在这里解释我的程序应该做些什么,因为我已经用尽可能少的代码来重新制作它来复制错误,该代码只是交换了两个数组的值,为简单起见,我将其替换为数组仅包含一个值,array1的值为1,array2的值为2。

每当激活“ BUGGED”注释行而不是上面的注释行时,输出将如下所示:

交换之前:第一个值:[1]第二个值:[2]交换之前:第一个值:[2]第二个值:[2]

如果使用第一行,则输出正确(交换后:2 1)。

我应该补充一点,如果我创建多个数组(实际上是任意数量),则该错误仅在第一个和最后一个值出现。

例如,如果我制作4个数组,其值分别为1、2、3和4,并尝试交换

temp < 1 < 2 < 3 < 4 < temp 

我最终将遇到这种情况:2、3、4、2。

这是主类的代码。

class Testing {

int[] one = {1};
int[] two = {2};

TestingArray array1 = new TestingArray(one);
TestingArray array2 = new TestingArray(two);

public static void main(String[] args) {

    Testing test = new Testing();

    System.out.println("Before swap:");
    System.out.println("First value: "+Arrays.toString(test.getArray1()));
    System.out.println("Second value: "+Arrays.toString(test.getArray2()));

    test.swap();

    System.out.println("After swap:");
    System.out.println("First value: "+Arrays.toString(test.getArray1()));
    System.out.println("Second value: "+Arrays.toString(test.getArray2()));

}

int[] getArray1() {
    return array1.getArray();
}

int[] getArray2() {
    return array2.getArray();
}
void swap() {

    int[] temp = array1.getArray();
    array1.setArray(array2.getArray());
    array2.setArray(temp);
}

}

这是第二堂课。

public class TestingArray {

private int[] array = new int[1];

TestingArray (int[] value) {

    this.array = value;
}

int[] getArray() {
    return array;
}

void setArray(int[] array) {
    this.array = array;
//      this.array[0] = array[0]; // BUGGED 
}
}

真的很期待您的回答,我真的迷失了。

马尔贾姆

问题出在方法中swap(),其中您的temp变量是对副本的引用,array1而不是副本,如果要更改为数组中的值,应该这样做:

void swap() {//e.g. arr1 → {1}, arr2 → {2}
    int[] temp = array1.getArray(); //arr1 → {1} ← temp, arr2 → {2}
    array1.setArray(array2.getArray()); //arr1 → {2} ← temp, arr2 → {2}
    array2.setArray(temp); //arr1 → {2} ← temp, arr2 → {2} / no change
}

如您所见,调用时,array1.setArray(array2.getArray())您还更改的值temp,因为它们引用相同的数组。

您应该做的是:

void swap() {
    int[] temp = Arrays.copyOf(array1.getArray(), array1.getArray().length); //arr1 → {1}, temp → {1}, arr2 → {2}
    array1.setArray(array2.getArray()); //arr1 → {2}, temp → {1}, arr2 → {2}
    array2.setArray(temp); //arr1 → {2}, temp → {1}, arr2 → {1}
}

您可以阅读有关Java中参考变量与原始变量的更多信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在两个数组元素之间交换值(简单)

来自分类Dev

bootstrap.css中两个div之间的无法解释的空间

来自分类Dev

无法解释两个查询之间的差异

来自分类Dev

如何在Java中交换两个数组对象

来自分类Dev

交换函数中两个数组的指针

来自分类Dev

交换函数中两个数组的指针

来自分类Dev

从两个数组交换ViewController中的图像

来自分类Dev

本机库加载时出现无法解释的UnsatisfiedLinkError

来自分类Dev

本机库加载时出现无法解释的UnsatisfiedLinkError

来自分类Dev

运行存储过程时出现无法解释的超时

来自分类Dev

使用PySimpleGui时出现无法解释的持续错误

来自分类Dev

调用构造函数时出现无法解释的“ CallFailed”异常

来自分类Dev

无法解释的数组中的最后一项

来自分类Dev

从两个数组中创建新数组,我将计算 php 中某些值的出现次数

来自分类Dev

在循环两个数组时查找公共值

来自分类Dev

zend framework和php,仅当两个数组中的值集相等时才递增

来自分类Dev

C#比较两个数组中的循环问题

来自分类Dev

比较两个 IloNum 值时出现问题

来自分类Dev

按元素索引时交换两个数组元素的怪异行为

来自分类Dev

ViewPager呈现大和无法解释的问题

来自分类Dev

无法在Octave中绘制两个数组的图形

来自分类Dev

使用LINQ在两个数组中获取公共值

来自分类Dev

在键=>值中合并两个数组

来自分类Dev

从两个数组中减去所有值对

来自分类Dev

PHP搜索数组中两个数字之间的值

来自分类Dev

根据PHP中的值获取两个数组的差

来自分类Dev

在PHP中连接两个数组的值

来自分类Dev

Javascript中两个数组之间的值选择

来自分类Dev

比较两个数组中的冲突值-Visual Basic

Related 相关文章

热门标签

归档