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}

配列内の2つの要素をスワップするswapというメソッドをすでに作成していると仮定します。パラメータとして渡された2つのインデックス値によって識別される要素:

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

スワップは、開始と終了ではなく、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

関数内の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,
于 2012-06-02T15:31:09.160 に答える
0

ここにさらに2つの可能な答えがあります:

    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 に答える