将数组中的一个元素移动一个随机数



对于我第二学期的Java课程,我们目前正在进行一个项目,该项目通过随机生成的数字移动字符数组。因此,如果计算机生成数字2,而字符是"nick",它将返回为"ckni"。我可以把元素移到前面,但是我不知道怎么把元素从末尾移到前面。有人能帮我一下吗?

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

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();

像前面提到的那样将所有内容向前移动,但要跟踪索引计数器。如果建议您转移到>= length的索引,则从索引

中减去长度。
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;

相关内容

最新更新