这是C#中用于反转数组元素的简单方法。例如,如果我输入{1,2,3,4},结果应为{4,3,2,1}。
public int[] reverse(int[] array)
{
int[] new_array = new int[array.Length];
for (int i = 0; i < array.Length-1; i++)
{
new_array[i] = array[array.Length-1 - i];
}
return new_array;
}
但是,当我运行它并输入{1,2,3,4}
时,会产生{4,3,2,0}
,为什么最后一个元素变为0
而不是1
?
答案 0 :(得分:2)
此处存在问题(int i = 0; i&lt; array.Length-1 ; i ++)。
如果您要将<=
与Length-1
进行比较,则必须使用<
,或使用Length
public int[] reverse(int[] array)
{
int[] new_array = new int[array.Length];
for (int i = 0; i < array.Length; i++)
{
new_array[i] = array[array.Length-1 - i];
}
return new_array;
}
符号
试试这段代码。
@POST
@Path("/save")
@Consumes(MediaType.APPLICATION_JSON)
public boolean putLocation(Location loc) {
boolean succes = false;
try {
System.out.println(loc.toString());
succes = LocationController.getController().locationSetter().saveLocation(loc);
} catch (SQLException ex) {
System.out.println(ex.getMessage());
Logger.getLogger(LocationResource.class.getName()).log(Level.SEVERE, null, ex);
}
return succes;
}
答案 1 :(得分:1)
您遇到的问题是您正在检查数组长度并减去一个。
for(int i = 0; i&lt; array.Length - 1; i ++)
这表示如果我小于数组的长度减去1。因为你永远不会检查数组中的最后一个元素。
这可能稍微容易理解。我基本上向后运行我的for循环并为新数组和原始数组保持计数器。
var array = new int[] { 1, 2, 3, 4 };
int[] new_array = new int[array.Length];
for (int i = array.Length -1, n=0 ; i >= 0 ; i--,n++)
{
new_array[n] = array[i];
}
答案 2 :(得分:1)
您可以使用Linq而不是编写太多代码行
using System.Linq;
var reverse = array.Reverse();
int[] reverse = array.Reverse().ToArray();
答案 3 :(得分:0)
您不需要array.Length-1
,因为这将beyond the index of array
array.Length
只有int[] array = new int[4] { 4, 3, 2, 1 };
int[] new_array = new int[array.Length];
for (int i = 0; i< array.Length; i++)
{
new_array[i] = array[(array.Length - 1) - i];
}
就足够了。
{{1}}
答案 4 :(得分:0)
试试这个:
for (int i = array.Length - 1,j=0; i >= 0; i--,j++)
{
new_array[j] = array[i];
}