试图直观地查看数组中元素的交换,但无法

时间:2019-02-06 22:23:41

标签: java algorithm debugging

我正在交换数组中的元素,而此代码已成功发生。

但是,我遇到了一个问题。我浏览了网络,并阅读了很多应该从右到左阅读=的地方(即arr[i] = arr[j];arr[j] = temp;

我正在尝试以这种方式进行跟踪,但由于某种原因对我来说似乎没有意义。我也尝试过从左到右阅读=标志,但对我来说仍然没有意义。

有人可以直观地告诉我循环交换的内容吗?

这是我的代码:

public class HelloWorld {

public static void main(String []args){
    int[] arr = {1,2,3,4,5}; 
    swap(arr);
}

public static void swap(int[] arr) {
    for(int i = 0; i < arr.length; i++) {
        for(int j = i + 1; j < arr.length; j++) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }

    for(int i = 0; i < arr.length; i++) {
        System.out.print(arr[i]);
    }
   }
}

3 个答案:

答案 0 :(得分:2)

arr[i]xarr[j]y,而temp保持原样。顺序如下:

  1. x的值分配给temp
  2. y的值分配给x

在此阶段,x的值为y,其原始值被覆盖。

  1. 将保存在x中的temp的原始值分配给y

答案 1 :(得分:0)

好吧,发生了以下情况:将数组i的第arr个元素交换为第i + 1个(= {j- th)元素。为此,您可以将arr[i]的值分配给一个临时变量temp,然后再将此值分配给arr[j]。您确实必须执行此额外步骤,因为如果您只需执行以下操作:

arr[i] = arr[j];
arr[j] = arr[i];

您应该将arr[j]的值分配给arr[i],然后将arr[i](其值是arr[j])分配给arr[j],所以它会一直保持不变。

因此,您需要将赋值运算符=读为“右侧的值是左侧的新值”或“右侧的值已分配给左侧的变量”,如果可以的话。

答案 2 :(得分:0)

首先了解“数字”与数组中的每个元素相关联。 元素是数据存储的位置,在这种情况下为整数。
您的数组{1,2,3,4,5}
元素0 ^ ^ ^
元素1 ^ ^
元素2 ^
依此类推。

int temp = arr[i],所以我们知道i = 0且数组中的0元素为1,因此temp等于1

arr[i] = arr[j]我们知道i = 0(数组中的第零个元素)和j = 1(数组中的第一个元素),因此我们将数组中的第零个元素设置为第一个元素。因此,在这种情况下2位于第一个元素中,因此您的数组将变为。 {2,2,3,4,5}

由于temp仍然保留最初在数组中的“ 1”,因此我们将数组中的第一个元素设置为“ 1”。简而言之,2变为0。

每次循环运行时,i和j都比相同的过程增加1。