【发布时间】:2016-09-01 02:50:59
【问题描述】:
我正在研究这个方法,它应该返回一个新的 Vector,其中的元素向右移动了给定数量的位置。例如:
[1 2 3 4] 0 => [1 2 3 4]
[1 2 3 4] 1 => [4 1 2 3]
[1 2 3 4] 2 => [3 4 1 2]
[1 2 3 4] 3 => [2 3 4 1]
[1 2 3 4] 4 => [1 2 3 4]
[1 2 3 4] 5 => [4 1 2 3]
我的代码正在处理一些输入,仅适用于 0、2 和 4,而 1 和 3 不起作用。
这是我的代码:
public Vector shifted(int amount) {
Vector v = new Vector(length);
for (int i = 0; i < length; i++) {
if (i + amount > length-1) {
v.elements[i] = this.elements[(i+amount) % length];
}
else {
v.elements[i] = this.elements[(i+ amount)];
}
}
return v;
}
【问题讨论】:
-
你为什么使用
Vector? Javadoc 说:建议使用ArrayList代替Vector。 为什么它是原始的?泛型是很久以前发明的。 -
在我看来,您实际上是在向左移动而不是向右移动。这些是您在 1 和 3 中看到的结果吗?如果是这种情况,那么 0、2 和 4 将“发生”工作,因为 0 和 4 不进行任何移位,而 2 将移位数组的一半,因此无论您是否向左移位,它看起来都一样或对。我认为你应该用铅笔和纸试一试,看看
v.elements中的哪些索引是你分配给this.elements中的哪些索引的。如果你这样做,你应该能够看到如何修复它。你很亲密。 -
还是不行,你能帮帮我吗?请 ??我花了很多时间在上面
-
您遇到的问题是您正在覆盖以后需要复制的值。
标签: java class arraylist vector