向后移动数组中的每个int

时间:2019-03-04 18:47:03

标签: c#

我试图在for循环中向后移动数组中的每个int(位置)(并将第一个int移到最后一个位置)。 (示例:如果我有5,6,9数组,结果将是6,9,5 )。

这是我的代码:

int[] arr = { 1, 2, 3, 4, 5, 6 };

int temp=arr[0];
for (int i=1; i < arr.Length-1; i++)
{
    arr[i - 1] = arr[i];
}
arr[arr.Length - 1] = temp;
for (int i = 0; i < arr.Length - 1; i++)
{
    Console.WriteLine(arr[i]);
}

而不是得到

  

2,3,4,5,6,1

我要

  

2,3,4,5,5

为什么我的代码不起作用?正确的方法是什么?

3 个答案:

答案 0 :(得分:2)

此代码可以满足您的需求。对数组进行排序。

//Input: { 1, 2, 3, 4, 5, 6 };
//Result: 2,3,4,5,6,1

//Input: { 5, 6, 9 };
//Result: 6,9,5

//Input: { "A", "B", "C" }; 
//Result: B,C,A

输入数据和结果:

function rank(arry) {
    let sorted = arry.slice().sort(function (a, b) {
        return b - a
    });


    let currentRank = sorted.length;
    let rankValue = null;
    let ranks = [];

    sorted.forEach(value => {
        if(value !== rankValue && rankValue !==null) {
            currentRank--;
        }

        ranks.push({value,currentRank});
        rankValue = value;
    });

    let mapRanksToArrayValues = arry.map(function (x) {
        let _rank = null;
        ranks.forEach( rank => {
            if(rank.value === x ) {
                _rank =  rank.currentRank;
                return;
            }
        });
        return _rank;
    });

    return mapRanksToArrayValues;
}

答案 1 :(得分:1)

删除-1

for (int i=1; i < arr.Length-1; i++)
在两个循环中

并让循环运行到最后。条件应该是i < arr.Length您永远都不会到达最后一个位置。

尽管您使用arr[arr.Length - 1]来索引最后一个元素,但它与循环有所不同。如果您仔细查看完成条件,它会显示:<表示i将永远不会获得Length - 1的值,循环将在此之前结束一次迭代。修复代码的另一种方法是更改​​条件,并运行i直到获得该值。您可以通过i <= arr.Length - 1来实现。微小的差异也可以解决问题。这次循环将在我达到最后一个元素的索引值

后恰好结束

答案 2 :(得分:0)

您需要做的就是从循环条件中删除- 1,因为它不会遍历数组中的所有元素。

如果遍历6个元素的数组,索引从0到>5。因此,对于您的示例,您希望循环从索引1变为5( 这样做是对索引1-4进行迭代(因为您要减去1)。

int[] arr = { 1, 2, 3, 4, 5, 6 };

int temp=arr[0];
for (int i=1; i < arr.Length; i++)
{
    arr[i - 1] = arr[i];
}

arr[arr.Length - 1] = temp;
for (int i = 0; i < arr.Length; i++)
{
    Console.WriteLine(arr[i]);
}