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