java - 在JAVA中没有操作就改变了数组的值
问题描述
请看代码,我在屏幕上打印的信息是: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_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;
}
}
解决方案
这个
int[] result=nums;
不复制数组“nums”;它只是意味着'result'和'nums'是同一个数组。
因此,对“结果”的操作是对“数字”的操作,这可能是您的问题的根源。
一种解决方法是
int[] result = Arrays.copyOf(nums, nums.length);
(您需要“导入 java.util.Arrays”)
或者,手动复制它:
int[] result = new int[nums.length];
for (int k=0; k<nums.length; k++)
result[k] = nums[k];
推荐阅读
- javascript - 如何使用 JS 或 CSS 从页面中删除图像的 EXIF 元数据
- java - 如何通过java spring格式化excel?
- javascript - 在将我重定向到离线页面之前获取输入的 URL
- java - Android SQLite,如何获取最近两天的记录?
- jenkins - 如何通过 Configuration as code 创建 jenkins pipelineJob?
- google-maps - 地点选择器已弃用
- node.js - 运行超级账本结构项目时无法读取未定义的属性“曲线”
- python - 不使用数据库的 Django REST API
- c# - 提取时间字符串的分钟部分
- glove - ValueError:需要超过 0 个值才能解包 - 手套