转移第一个索引

时间:2012-04-06 17:52:50

标签: java arrays sorting

我的数组大小为3,我试图将第一个索引移到最后一个位置,而将其他索引移到左边。例如:

{1,2,3}到{2,3,1}

这是我的代码

 int[] nums = {1,2,3}; 
 int[] numsShifted = new int[3];

 for(int i = 0; i < nums.length - 1; i++)
 {
  int tempNum = nums[i];
  numsRotated[i] = nums[i + 1];
  numsRotated[i+1] = tempNum;
 }

我遇到的问题是数组的最后一个索引,我得到的值不正确。谢谢。

7 个答案:

答案 0 :(得分:2)

只需做一个简单的移动,然后复制最后一个位置的第一个数字:

 int[] nums = {1,2,3}; 
 int[] numsShifted = new int[3];

 int temp = nums[0];
 for(int i = 1; i < nums.length; i++)
 {
    numsShifted[i - 1] = nums[i];
 }
 numsShifted[nums.length - 1] = temp;

编辑:您实际上并不需要保护第一项,因为您没有覆盖原始数组。

答案 1 :(得分:0)

嗯,你需要将第一个元素存储在循环之外,然后开始移动。循环结束后,只需将第一个元素存储为数组的最后一个元素。

答案 2 :(得分:0)

你必须保存nums [0]值;

int saved = nums[0];

for(int i = 0; i < nums.length - 1; i++) {
  numsShifted[i] = nums[i+1];
}
numsShifted[numsShifted.length - 1] = saved;

答案 3 :(得分:0)

int[] nums = {1,2,3}; 
int[] numsShifted = new int[3];

    for(int i = 0; i < nums.length - 1; i++)
    {
        int tempNum = nums[i]; //tempNum=1, tempNum=2
        numsRotated[i] = nums[i + 1]; //numsRotated[0]=2, numsRotated[1]=3
        numsRotated[i+1] = tempNum; //numsRotated[1]=1, numsRotated[2]=2  <- this is incorrect and the loop ends
    }

最后,你有2,3,2。你需要修复你的循环。

答案 4 :(得分:0)

如果你想使用你写的代码,就像我一样修复它。 否则,其他答案都相当不错!

    int[] nums = {1, 2, 3};
    int[] numsShifted = new int[3];

    for (int i = 0; i < nums.length; i++) { //Do one more iteration
        if (i + 1 > 2) { //If this is the last element, we take the first one of nums
            numsShifted[i] = nums[0];
        } else { //Otherwise we do as you did in your code
            numsShifted[i] = nums[i + 1];
            numsShifted[i + 1] = nums[i];
        }            
    }
    System.out.println(Arrays.toString(numsShifted));

编辑: 删除tempNum,因为你不需要它

答案 5 :(得分:0)

int[] a = {1,2,3};
int[] b = new int[3];

for(int j = 0 , i = 2 ; j < a.length ; j++)
{
     b[i++] = a[j];
     if(i >= 3)
     i = 0;
}

答案 6 :(得分:0)

以下是一些其他选项,没有循环:

public static int[] queueFirst(int[] in) {
   int len = in.length;   
   if (len <= 1) return in;
   int[] ret  = Arrays.copyOf(Arrays.copyOfRange(in, 1, len), len);
   ret[len - 1] = in[0];
   return ret;
}

或参考:

public static <T> T[] queueFirst(T[] in) {
   if (in.length <= 1) return in;
   ArrayList<T> n = new ArrayList<T>(Arrays.asList(in));
   n.add(n.remove(0));
   return n.toArray(in);
}