我试图使用方法将数组的元素移位n(某个随机数)。困难在于使用末尾的元素交换数组开头的元素。到目前为止,这是我的代码。
提出的其他阵列问题与此不同。
public class Shifty {
private int[] datas = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
public Shifty() {
datas = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
}
public int shift(int position) {
int tmp = 0;
int[] tmp1 = new int[12];
for (int i = 0; i <= 12; i++) {
if (i < position) {
tmp1[12-position] = this.datas[i];
} else {
this.datas[i] = this.datas[i+1];
}
for (int j = 12-position; j <= 12; j++){
this.datas[j] = tmp1[j];
}
}
return position;
}
public void display() {
System.out.println(Arrays.toString(this.datas));
System.out.println();
}
}
答案 0 :(得分:2)
你可以很好地利用模数运算。
public void shift(int n) {
int[] temp = new int[datas.length];
for (int i = 0; i < temp.length; i++) {
temp[i] = datas[(i + n) % temp.length];
}
datas = temp;
}
答案 1 :(得分:0)
由于您显然不需要进行转换并且可以使用临时数组,因此解决方案非常简单:
public class Shifty {
private int[] datas = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
public Shifty() {
datas = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
}
public int shift(int position) {
final int len = datas.length;
int[] tmp = Arrays.copyOf(datas, position);
System.arraycopy(datas, position, datas, 0, len - position);
System.arraycopy(tmp, 0, datas, len - position, position);
return position;
}
public void display() {
System.out.println(Arrays.toString(this.datas));
System.out.println();
}
}
这仅适用于使用datas
的合法下标的参数值进行切换的调用。如果您要处理负值或大于datas.length
的值,则需要将position
缩减到适当的范围。请注意,由于这是循环移位,因此您可以在此使用模运算,因为shift(position)
和shift(position * n*datas.length)
应该为任何整数值n
产生相同的结果。