在JAVA中,数组的值在没有操作的情况下发生了更改
请看代码, 我在屏幕上得到的信息是:1:[2,1] 2:[1,1] 为什么会发生这种情况?这两个System.out.println()之间没有对nums[1]执行任何操作,但nums[1]的值已更改在JAVA中,数组的值在没有操作的情况下发生了更改,java,arrays,Java,Arrays,请看代码, 我在屏幕上得到的信息是:1:[2,1] 2:[1,1] 为什么会发生这种情况?这两个System.out.println()之间没有对nums[1]执行任何操作,但nums[1]的值已更改 public class SortingAlgorithm { public static void main(String[] args) { int[] nums= {2,1}; int l=0, h=nums.length-1; int[] final_resul
public class SortingAlgorithm {
public static void main(String[] args) {
int[] nums= {2,1};
int l=0, h=nums.length-1;
int[] final_result=mergeSort(nums,l,h);
}
public static int[] mergeSort(int[] nums,int l, int h) {
if(l<h) {
int m=(l+h)/2;
nums=merge(nums,l,h,m);
}
return nums;
}
public static int[] merge(int[] nums,int l, int h, int m) {
int[] result=nums;
int k=m+1, idx=0;
while(l<=m && k<=h) {
if(nums[l]<nums[k]) {
result[idx]=nums[l];
l++;
}
else{
System.out.println("1:"+Arrays.toString(nums));
result[idx]=nums[k];
System.out.println("2:"+Arrays.toString(nums));
k++;
}
idx++;
}
while(l<=m) {
result[idx]=nums[l];
l++;
idx++;
}
while(k<=h) {
result[idx]=nums[k];
k++;
idx++;
}
return result;
}
公共类排序算法{
公共静态void main(字符串[]args){
int[]nums={2,1};
int l=0,h=nums.length-1;
int[]最终结果=合并排序(nums,l,h);
}
公共静态int[]合并排序(int[]nums,int l,int h){
如果(l
不复制数组“nums”;它只表示“result”和“nums”是同一个数组
因此,对“result”的操作就是对“nums”的操作,这可能是问题的根源
一个解决办法是
int[] result = Arrays.copyOf(nums, nums.length);
(您需要“导入java.util.array”)
或者,手动复制它:
int[] result = new int[nums.length];
for (int k=0; k<nums.length; k++)
result[k] = nums[k];
int[]结果=新的int[nums.length];
对于(int k=0;k可能重复的,也许您应该学习使用调试器逐步进入您的代码…非常感谢。“a=b”实际分配数组的引用(通过引用传递?)。我相信instantiable类和接口与array相同,因为它们都是存储地址的引用变量。此外,我相信System.arraycopy()也可以工作。是的-数组变量是对底层数组的引用,因此赋值会复制引用。
int[] result = new int[nums.length];
for (int k=0; k<nums.length; k++)
result[k] = nums[k];