我正在交换数组中的元素,而此代码已成功发生。
但是,我遇到了一个问题。我浏览了网络,并阅读了很多应该从右到左阅读=
的地方(即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]);
}
}
}
答案 0 :(得分:2)
说arr[i]
为x
,arr[j]
为y
,而temp
保持原样。顺序如下:
x
的值分配给temp
y
的值分配给x
在此阶段,x
的值为y
,其原始值被覆盖。
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。