3

ユーザーが名前を入力してからスコアを入力し、完了するまでそのプロセスを繰り返し、Q を押すと、配列に名前とスコアが表示され、それらすべての平均が表示されるという課題があります。スコア。私が今持っているのはこれです。

    static void inputPartInformation(string[] pl, double[] sc)
    {

        int i = 0;

        do
        {
            Console.Write("Enter The Player's Name: ");

            pl[i] = Console.ReadLine();


            Console.Write("Enter Their Score: ");

            sc[i] = double.Parse(Console.ReadLine());

        }
        while (pl[i++].CompareTo("Q") != 0);

    }


    static void displayParts(string[] pl, double[] sc)
    {
        int i = 0;
        while (pl[i].CompareTo("Q") != 0)
        {
            Console.WriteLine("{0,15}{1,6}", pl[i], sc[i]);
            ++i;
        }

    }

    static void Main(string[] args)
    {

        String[] players = new String[100];

        double[] scores = new double[100];

        inputPartInformation(players, scores);



        displayParts(players, scores);


        double average = scores.Average();
        Console.WriteLine("The Average is: {0}", average);



        Console.ReadLine();

    }

スコアを平均化しようとすると、うまくいきません。

4

3 に答える 3

5

問題は の呼び出しにあります:対応する位置Averageまでのすべてではなく、すべてを平均化しています。これらのすべてのゼロを、書き込んでいないスコア部分に追加してから、配列全体の長さである 100 で割ります。"Q"names

この問題に対処する最も簡単な方法は、メソッド"Q"からエントリの位置を返すことです。inputPartInformation

var count = inputPartInformation(players, scores);

これで、LINQ のTake関数を使用して正しい平均を取得できます。

double average = scores.Take(count).Average();
于 2012-08-16T01:01:52.960 に答える
1

配列を使用する必要がありますか? スコアを追加し続ける限り、リストに追加するだけなので、リストを使用することをお勧めします。そうすれば、彼らがやめて平均を取りに行くときに、スコアが入力されていない0が含まれることはありません.

于 2012-08-16T01:51:59.690 に答える
1

( variable にN) 入力されたスコアの数をカウントし、関数を使用してスコア.Take(N)の配列のみを返すことをお勧めしますN

例:

double[] list = new double[100];
// assumed first N values are filled only.
// N = ...
list = list.Take(N).ToArray();

double average = list.Average();
于 2012-08-16T01:06:51.357 に答える