0

所以考试题是这样的:

使用下面的方法头编写一个方法。

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()方法已经完成了一切。任何人都可以纠正我吗?谢谢

4

3 回答 3

2

Swap 接受 oneIndex 和 otherIndex,而不是开始和结束。
你错过的是开始和结束之间的循环,你必须用每个迭代的数字调用交换方法:

int iterationsNum = (finish - start) / 2 ;
for(int i=0;i<=iterationsNum;i++)
{
    if(start+i != finish-i)
    {
      swap(values, start+ i, finish-i);
    }
}

可能有一种方法可以删除我检查索引是否相同的不需要的迭代,但这是基本概念。

于 2012-06-02T14:33:43.817 回答
0

如果您将在函数内的括号上工作一点并从函数调用中删除整数,它将起作用。

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,
于 2012-06-02T15:31:09.160 回答
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--;
        }
    }
于 2015-06-16T05:13:30.187 回答