用随机数移动数组中的元素?

时间:2014-05-06 00:37:42

标签: java arrays

对于我的第二学期Java课程,我们目前正在开发一个项目,该项目通过随机生成的数字来移动字符数组。因此,如果计算机生成数字2并且字符是“缺口”,则将其返回为“ckni”。我可以找出向前移动的元素,但我似乎无法从元素的末尾获取元素并将它们移到前面。谁能帮我这个?

2 个答案:

答案 0 :(得分:1)

如前所述,您将所有内容都转移,但要跟踪索引计数器。如果建议您转移到> =长度的索引,则从索引中减去长度

int shift = Random.nextInt(length);
char first = myarray[0];

int newindex = 0;
for(int i=0; i<myarray.length - 1; i++){
    int oldindex = newindex;
    newindex = newindex + shift;
    if(newindex >= myarray.length){
        newindex = newindex - myarray.length;
    }
    myarray[oldindex] = myarray[newindex];
}
myarray[newindex] = first;

答案 1 :(得分:1)

根据您开始使用的数据类型,可以采用以下几种方式进行转换。

String

int shift = 2;
String str = "nick";
int pos = str.length() - shift;

// outputs 'ckni'
System.out.println(str.substring(pos, str.length()) + str.substring(0, pos));

List<Character>

List<Character> list = Arrays.asList('n', 'i', 'c', 'k');

Collections.rotate(list, shift);
// outputs [c, k, n, i]
System.out.println(list);

Character[]

Character[] array = {'n', 'i', 'c', 'k'};

Collections.rotate(Arrays.asList(array), shift);
// outputs 'ckni'
System.out.println(Arrays.asList(array));     

char[]

char[] carray = {'n', 'i', 'c', 'k'};
char[] rotated = new char[carray.length];
int pos = carray.length - shift;

System.arraycopy(carray, 0, rotated, shift, pos);
System.arraycopy(carray, pos, rotated, 0, shift);
// outputs 'ckni'
System.out.println(rotated);

反向移位

如果将shift包裹在模运算符中,它将确保正确的边界,并允许您使用负值反转:

// shifts left by two
int shift = -2;
shift = (shift%str.length() + str.length())%str.length();