0

現在、配列を作成して逆順または降順で表示しようとしています。現在、番号のリストが表示されていますが、正しい降順に従わない場合があります。問題は、2つのforループの間にあるifステートメントにあると思います。毎回、1から101までの乱数を配列の最初の数値と比較しています。そのようにする代わりに、配列内の数値を互いに比較するにはどうすればよいですか?または、逆順配列ジェネレーターを証明するための提案はありますか?

コード

namespace reverseArray
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        long operations = 0;
        int size;
        int max;
        int[] createArray;
        int[] sortArray;
        int[] copyArray;

public void ReverseOrder()
        {
            size = Convert.ToInt32(textBoxSize.Text);
            max = Convert.ToInt32(textBoxMax.Text);
            createArray = new int[size];
            copyArray = new int[size];
            sortArray = new int[size];

            createArray[size - 1] = 1;

            for (int i = size - 1; i > 0; i--)
            {
                createArray[i - 1] = createArray[i] + r.Next(1, max);
            }

            for (int i = size - 1; i > 0; i--)
            {
                if (r.Next(1, 101) < createArray[0])
                {
                    for (int x = size - 1; x > 0; x--)
                    {
                        createArray[x] = r.Next(1, createArray[0]);
                    }
                }
            }

        }


private void buttonCreateArray_Click(object sender, EventArgs e)
        {

ReverseOrder();

}

}

}
4

4 に答える 4

1

配列を並べ替えたり逆にしたりするために独自のアルゴリズムを実装する必要はありません。

Array.Sortおよび/またはArray.Reverseを使用します。

降順で並べ替えるには、最初に並べ替えてから配列を逆にします。

于 2012-11-24T05:26:37.337 に答える
1

使用するLINQ

using System.Linq;

namespace reverseArray
{
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            long operations = 0;
            int size;
            int max;
            int[] createArray;
            int[] orderedArray;
            int[] orderedByDescendingArray;    

            public int[] CreateArray(int size, int max)
            {
                var result = new int[size];
                Random r = new Random();
                for(int i; i<size; i++)
                {
                   result[i] = r.Next(max);
                }
                return result;
            }


            private void buttonCreateArray_Click(object sender, EventArgs e)
            {
                size = Convert.ToInt32(textBoxSize.Text);
                max = Convert.ToInt32(textBoxMax.Text);

                createArray = CreateArray(size, max);
                orderedArray = array.OrderBy(a => a);
                orderedByDescendingArray = array.OrderByDescending(a => a);        
           }
      }
}

//PSコードにエラーが含まれている可能性がありますここに直接入力しました。

于 2012-11-24T05:31:32.627 に答える
0

逆順の配列を作成するためにロジックを使用する必要はありません。C#ではそれを逆にするデフォルトの方法があります。そのように使用すると、出力を取得できます..

        string fullOrder= Console.ReadLine();
        char[] charArray= fullOrder.ToCharArray();
        Array.Reverse(charArray);
        Console.WriteLine(charArray);
        Console.ReadLine();
于 2012-11-24T05:49:17.810 に答える
0

Array.SortEnumerable.OrderByのようなソート用のビルドメソッドを使用することを検討してください。それらには、ソートをカスタマイズするためにcomaprerを使用するバリアントがあります。

于 2012-11-24T05:28:06.760 に答える