【发布时间】:2022-11-26 13:26:26
【问题描述】:
在下面的程序中,我正在定义数组列表大小为 7 [1,2,3,4,5,6,7] 并向右旋转 3 个位置但是当我打印 numbers1 列表时它给了我预期的答案数字:[5、6、7、1、2、3、4]但是当我返回这个 ArrayList 然后打印它时,它给了我这个答案数字:[2、3、4、5、6、7、1]为什么会这样,请解释。
package QAIntvSprint;
import java.util.ArrayList;
import java.util.Scanner;
public class RotateArray {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
ArrayList<Integer> numbers = new ArrayList<>();
for (int i = 0; i < n; i++) {
numbers.add(sc.nextInt());
}
rotateArray(numbers, k);
ArrayList<Integer> ans = rotateArray(numbers, k);
for (Integer x : ans) {
System.out.print(x + " ");
}
}
static ArrayList<Integer> rotateArray(ArrayList<Integer> numbers, int k) {
for (int i = 0; i < k; i++) {
numbers.add(0, numbers.get(numbers.size() - 1));
numbers.remove(numbers.size() - 1);
}
ArrayList<Integer> numbers1 = numbers;
System.out.println("numbers: " + numbers1.toString());
return numbers1;
}
}
输出
【问题讨论】:
-
你没有“归还”它……你旋转了 (
numbers) 两次! (rotate方法中numbers1的“目的”是什么?;) -
ans(壮观)..在主要方法中是什么? (您也可以将其重构为void方法并在numbers上运行;) -
你认为你的方法在你的“原始”arraylist
[1,2,3,4,5,6,7]上工作,但是每次调用 rotateArray() 时你的 arraylist 都会被修改。 -
这与 Java 按值传递有关,如果我的理解是正确的,您的方法会获取对象引用的副本,跟随它到实际对象,并修改那里的值。它不获取传入的数组列表的副本。
标签: java arraylist collections