我想将此数组中的所有元素移位1:[1 4 9 16 25],其中最后一个元素(25)成为第一个元素。我的问题是我一直把阵列打印出来[25 1 1 1 1],我该如何解决这个问题?
import java.util.Arrays;
public class question4 {
public static void main(String[] args){
int[] array = new int[5];
array[0] = 1;
array[1] = 4;
array[2] = 9;
array[3] = 16;
array[4] = 25;
ShiftNumbers(array);
System.out.print(Arrays.toString(array));
}
public static void ShiftNumbers(int[] array){
int temp = array[array.length-1];
for(int i=0; i<=array.length-2; i++){
array[i+1]=array[i];
}
array[0] = temp;
}
}
答案 0 :(得分:1)
根据Sotirios Delimanolis的评论更新了答案以提供完整的解决方案,而不仅仅是指导。
使用System.arrayCopy
,您可以通过3个步骤轻松完成。
public static int[] revisedShiftNumbers(int[] array) {
int[] newArr = new int[array.length];
System.arraycopy(array, 0, newArr, 1, array.length - 1);
newArr[0]=array[array.length-1];
return newArr;
}
然后将此方法称为int[] shiftedArray = revisedShiftNumbers(array);
该方法有五个参数:
src
:源数组。srcPosition
:您希望从哪里开始的位置
复制。des
:目标数组。desPosition
:目标数组中复制位置的位置
应该开始。length
:要复制的元素数。答案 1 :(得分:0)
你的问题是当你从数组的开头循环时它将覆盖所有其余值,我建议在覆盖数组值时从数组的末尾到数组的开头。 试试这个:
import java.util.Arrays;
public class question4 {
public static void main(String[] args){
int[] array = new int[5];
array[0] = 1;
array[1] = 4;
array[2] = 9;
array[3] = 16;
array[4] = 25;
ShiftNumbers(array);
System.out.print(Arrays.toString(array));
}
public static void ShiftNumbers(int[] array){
int temp = array[array.length-1];
for(int i=array.length-2; i>=0; i--){
array[i+1]=array[i];
}
array[0] = temp;
}
}
答案 2 :(得分:0)
您的代码中的问题是在for loop
内部,您使用当前值覆盖下一个值,该值为25 1 1 1 1
。由于所有其他值都丢失(覆盖)。
现在我的方法是使用模运算来解决这个特殊问题。
import java.util.Arrays;
public class question4 {
public static void main(String[] args){
int[] array = {1, 4, 9, 16, 25};
ShiftNumbers(array);
System.out.print(Arrays.toString(array));
}
public static void ShiftNumbers(int[] array){
int last = array[0];
int temp;
int length = array.length;
for(int i = 0; i < array.length; i++){
temp = array[(i+1)%length];
array[(i+1)%length] = last;
last = temp;
}
array[0] = temp;
}
}
答案 3 :(得分:0)
其他解决方案。使用linkedList。 : - )
public class ShiftSimple {
private static int mTestCnt = 0;
public static void main(String[] args) {
int[] array = new int[5];
array[0] = 1;
array[1] = 4;
array[2] = 9;
array[3] = 16;
array[4] = 25;
shiftNumbers(array);
printNumbers(array);
shiftNumbers(array);
printNumbers(array);
shiftNumbers(array);
printNumbers(array);
}
public static void shiftNumbers(int[] array) {
LinkedList<Integer> linkedList = new LinkedList<Integer>();
for(int item : array) {
linkedList.add(item);
}
linkedList.push(linkedList.pollLast()); // shift last to first
int i = 0;
for(int item : linkedList) {
array[i++] = item;
}
}
public static void printNumbers(int[] array) {
System.out.println("["+ ++mTestCnt +"] Check Numbers");
for(int i : array) {
System.out.println(">> " + i);
}
}
}
<强> [OUTPUT] 强>
[1] Check Numbers
>> 25
>> 1
>> 4
>> 9
>> 16
[2] Check Numbers
>> 16
>> 25
>> 1
>> 4
>> 9
[3] Check Numbers
>> 9
>> 16
>> 25
>> 1
>> 4
答案 4 :(得分:0)
试一下
public static void main(String[] args) {
int[] array = new int[5];
array[0] = 1;
array[1] = 4;
array[2] = 9;
array[3] = 16;
array[4] = 25;
ReverseArray(array);
System.out.print(Arrays.toString(array));
}
public static void ReverseArray(int[] a) {
int size, i, j, temp;
size = a.length;
for( i=0; i<size; i++)
{
a[i] = a[i];
}
j = i - 1; // now j will point to the last element
i = 0; // and i will point to the first element
while(i<j)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
System.out.print("\n Now the Reverse of Array is : \n");
for(i=0; i<size; i++)
{
System.out.print(a[i]+ " ");
}
}