这是我到目前为止所做的,但是当我运行它时,我得到Java不匹配错误。 这是我的阵列:
char[] letters = {'A', 'B' , 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'};
/********************************************************************************
shiftRight() will move the contents of the array one slot to the right
********************************************************************************/
public static void shiftRight( char [] letters )
{
char last = letters[letters.length-1]; // save off first element
// shift right
for( int index =letters.length-1; index >= 0 ; index-- )
letters[index+1] = letters [index];
// wrap last element into first slot
letters[0] = last;
System.out.print("\nshifted Array: " );
}
答案 0 :(得分:7)
您可以执行以下操作:
public static void shiftRight( char [] letters )
{
char last = letters[letters.length-1]; // save off first element
// shift right
for( int index =letters.length-2; index >= 0 ; index-- )
letters[index+1] = letters [index];
// wrap last element into first slot
letters[0] = last;
System.out.print("\nshifted Array: " + Arrays.toString(letters) );
}
我只将letters.length-1
修改为letters.length-2
并打印了数组。
另一种更简单的方法是使用System.arraycopy
之类的:
last = letters[letters.length-1];
System.arraycopy(letters, 0, letters, 1, letters.length-1 );
letters[0] = last;
要打印阵列,您还可以使用:
System.out.print("{");
for (int i=0;i<letters.length-1;i++)
System.out.print("'"+letters[i]+",");
System.out.println("'"+letters[letters.length-1]+"'}");
答案 1 :(得分:1)
在for循环中第一次执行letters[index+1]
时(index = letters.length-1
),它指向letters[letters.length]
,它不是有效索引,因为索引来自{{ 1}}到0
。
更新您的for循环,以length-1
开始index
,并确保您的letters.length-2
。也就是说:
array.length>1
最后,您可以将数组打印为:
if(letters.length > 1){ //make sure array has minimum two elements
// shift right
for( int index = letters.length-2; index >= 0 ; index-- ){
letters[index+1] = letters [index];
}
}
编辑:示例工作代码。
如果您将数组设为 System.out.println("Shifted Array: " +letters);
数组,例如在Character
下方(仅在打印时需要帮助)
main
然后将其传递给 Character[] letters = {'A', 'B' , 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'};
方法,更新代码如下:
shiftRight
你应该全力以赴。
答案 2 :(得分:0)
添加
if(index<letters.length-1) condition
在之前的for循环中
letters[index+1] = letters [index]
如果你没有检查if(index<letters.length-1)
条件,你会在上一个inddex letters[index+1] = letters [index]
答案 3 :(得分:0)
实际上,只要您想要阅读(在循环内),您就会获得ArrayIndexOutOfBoundsException
:
letters[index+1]
原因是您的index
变量初始化:index = letters.length-1
所以letters[index+1] == letters[letters.length]
但逻辑上letters.length
会导致ArrayIndexOutOfBoundsException
。
在不改变逻辑的情况下纠正代码的简单方法:
for(int index = letters.length-1; index > 0 ; index--)
letters[index] = letters [index-1];
请注意操作员签署>
而不是>=
。否则,这也会导致相同的Exception
。
此外,要显示最终数组,请使用:Arrays.toString(letters)
我甚至写了我的解决方案来保持你的逻辑:
public static void main(String[] args) {
char[] letters = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'};
printShiftedLetters(shiftElementsToRight(letters));
}
public static char[] shiftElementsToRight(char[] array) {
if (array == null) {
throw new NullPointerException("array must not be null");
}
if(array.length <= 1){
return array;
}
char[] shiftedArray = new char[array.length];
char lastElement = array[array.length - 1];
for (int i = array.length - 1; i > 0; i--) {
shiftedArray[i] = array[i - 1];
}
shiftedArray[0] = lastElement;
return shiftedArray;
}
private static void printShiftedLetters(char[] shiftedLetters) {
System.out.println(Arrays.toString(shiftedLetters));
}
答案 4 :(得分:0)
您可以对整数值执行以下操作:
public static void main(String[] args) {
int arr[] = {1,2,3,4,5};
arrayReorder(arr,25);
}
private static void arrayReorder(int[] arr, int repeat) {
int count = 0;
int length = arr.length;
int end = 0;
int traversedArray[] = new int[length];
while (count < repeat) {
end = arr[length-1];
for (int i = 1; i < length; i++) {
traversedArray[i] = arr[i-1];
traversedArray[0] = end;
}
System.out.println();
for (int a : traversedArray) {
System.out.print(a + " -> ");
}
arr = traversedArray.clone();
count++;
}
}