[英]How to shift elements in an array 1 over?
我想將這個數組中的所有元素移動 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;
}
}
根據 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
: 要復制的元素數。你的問題是當你從數組的開頭循環時,它會覆蓋所有其余的值,我建議在覆蓋數組值時從數組的末尾到數組的開頭。 嘗試這個:
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;
}
}
您的代碼中的問題是在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;
}
}
其他解決方案。 使用鏈表。 :-)
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);
}
}
}
[輸出]
[1] Check Numbers
>> 25
>> 1
>> 4
>> 9
>> 16
[2] Check Numbers
>> 16
>> 25
>> 1
>> 4
>> 9
[3] Check Numbers
>> 9
>> 16
>> 25
>> 1
>> 4
嘗試這個
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]+ " ");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.