所以考试题目是:
使用下面的方法标题编写方法。
public void Reverse( double [] values, int start, int finish){
此方法将在较低的数组之间反转数组中的元素 指数位置和上指数位置。
所以给出了以下数组声明
double [] data = {8.5, 12.0, 23.2, 18.0, 15.5, 5.0, 10.5};
调用方法
Reverse(data, 2, 5);
之后的内容 数据将是{8.5, 12.0, 5.0, 15.5, 18.0, 23.2, 10.5}
假设您已经编写了一个名为swap的交换方法 数组中的两个元素;两个指数所确定的要素 值作为参数传递:
Swap(array, oneIndex, otherIndex)
我这样回答:
public void Reverse( double [] values, int start, int finish){
do {
Swap(values, int start, int finish);
}
start++;
finish--;
}
while (start < finish)
我认为我的答案不正确,但我想不出别的。 Swap()
方法已经完成了所有工作。有人可以纠正我吗?感谢
答案 0 :(得分:2)
交换接受oneIndex和otherIndex,而不是开始和结束。
你错过的是开始和结束之间的循环,你必须用每个迭代的数字调用swap方法:
int iterationsNum = (finish - start) / 2 ;
for(int i=0;i<=iterationsNum;i++)
{
if(start+i != finish-i)
{
swap(values, start+ i, finish-i);
}
}
可能有一种方法可以删除不必要的迭代,我检查索引是否相同,但这是基本概念。
答案 1 :(得分:0)
如果您在函数中稍稍处理paranthesis并从函数调用中删除int,它将起作用。
public static void Swap(double[] values, int firstIndex, int secondIndex)
{
double temp = values[start];
values[start] = values[finish];
values[finish] = temp;
}
public static void Reverse( double [] values, int start, int finish)
{
do
{
Swap(values, start, finish);
start++;
finish--;
}
while (start < finish);
}
static void Main(string[] args)
{
double[] data = { 8.5, 12.0, 23.2, 18.0, 15.5, 5.0, 10.5 };
Reverse(data, 2, 5);
foreach (double number in data)
Console.Write(number.ToString() + ", ");
Console.ReadKey();
}
给出:
8.5, 12, 5, 15.5, 18, 23.2, 10.5,
答案 2 :(得分:0)
还有两个可能的答案:
static void Reverse(int[] values, int start, int finish)
{
int end = finish;
for (int i = start; i < end ; i++)
{
Swap(values, i, end);
end--;
}
}
static void Reverse2(int[] values, int start, int finish)
{
int upper = finish;
int lower = start;
while (upper > lower)
{
Swap(values, lower, upper);
lower++;
upper--;
}
}