gpt4 book ai didi

java - 第一次迭代后的 while 循环不更新数组值

转载 作者:行者123 更新时间:2023-12-01 23:11:04 26 4
gpt4 key购买 nike

我正在尝试编写循环排序代码,以下是我的代码。

public static void main(String[] args) {
int temp = 0;
int[] nums = new int[]{4,2,1,3};
for(int i=0; i<nums.length; i++){
while(nums[i]!=nums[nums[i]-1]){
// line#8
System.out.println(nums[i] + " " + nums[nums[i]-1]);
temp = nums[i];
nums[i] = nums[nums[i]-1];
nums[nums[i]-1] = temp;
}
}

for(int i:nums){
System.out.println(i);
}
}

在 while 循环中第一次迭代后:i=0,nums[] = {3,2,1,4}。但是在 while 循环中的第一次迭代之后,如果 nums[0]=3,则 nums[nums[0]-1] = 1,但事实并非如此,即 nums[nums[0]-1] = 4。另外,代码将陷入无限循环,并且元素 3 和 4 将不断交换。

有人可以解释一下为什么 while 循环不将 nums[nums[0]-1] 解释为 1 吗?

TIA

最佳答案

我修改了你的代码,它可以工作。在更改 nums[i] 之前,您应该存储 nums[i] - 1 值。

    int temp = 0;
int[] nums = new int[]{4, 2, 1, 3, 6, 8, 5, 7};
for (int i = 0; i < nums.length; i++) {
while (nums[i] != nums[nums[i] - 1]) {
temp = nums[i];
int index = nums[i] - 1;
nums[i] = nums[nums[i] - 1];
nums[index] = temp;
}
}

for (int i : nums) {
System.out.println(i);
}

关于java - 第一次迭代后的 while 循环不更新数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58376017/

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