我的数组大小为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;
}
我遇到的问题是数组的最后一个索引,我得到的值不正确。谢谢。
答案 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);
}