0

我的数组大小为 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;
 }

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

4

7 回答 7

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;

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

于 2012-04-06T17:56:36.740 回答
0

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

于 2012-04-06T17:57:38.160 回答
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;
于 2012-04-06T17:57:40.500 回答
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。您将需要修复循环。

于 2012-04-06T18:01:01.443 回答
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 因为你不需要它

于 2012-04-06T18:03:59.573 回答
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;
}
于 2012-04-06T18:05:21.120 回答
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);
}
于 2012-04-06T18:26:16.523 回答