我试图在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
。
为什么我的代码不起作用?正确的方法是什么?
答案 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]);
}