1

List 内の最大および最小の分数を見つけるプログラムを作成するにはどうすればよいですか?

Console.WriteLine("How many fractions to comapre?");
        string nic = Console.ReadLine();
        int amount = int.Parse(nic);
        double min = 0; double max = 0;
        for (int i = 0; i < amount; i++)
        {
            Console.WriteLine("Enter fraction to compare. WRITE AS IMPROPER FRCATION");
            string str = Console.ReadLine();
            string[] each = str.Split('/');
            List<double> eachDoub = new List<double> { };
            foreach (string hit in each)
            {
                eachDoub.Add(double.Parse(hit));
            }
            List<double> finals = new List<double> { };
            foreach (double hit in eachDoub)
            {
                finals.Add(eachDoub[0] / eachDoub[1]);
            }
            max = finals.Max();
            min = finals.Min();
        }
        Console.WriteLine("The maximum is {0} and the minimum is {1}.", max, min);
        Console.ReadLine();

入力: 比較する分数はいくつ? 3
分数
4/1 を入力 分数
3/1を入力

このプログラムを実行すると、正しく動作しません。最小値と最大値の両方に最後に入力された値のみが出力されます。どうすればこれを修正できますか?

4

3 に答える 3

4

この行を移動するだけです

 List<double> finals = new List<double> { };

ループの外。

なんで?ループ内にある場合、すべての値を追跡するわけではないため、相互関係ごとに「リセット」されます

于 2013-10-12T22:57:59.220 に答える
2

finals リストを の外側で宣言し、外側で計算を行うだけで済みます。1 つだけ必要な場合にandメソッドを 3 回for呼び出さないようにするためです。この場合、反復は 3 回しかなく、違いはそれほど大きくありませんが、適切なコーディング プラクティスとして、ループの外でこれらの値を計算する必要があります。Max()Min()

    Console.WriteLine("How many fractions to comapre?");
    string nic = Console.ReadLine();
    int amount = int.Parse(nic);
    double min = 0; double max = 0;
    List<double> finals = new List<double> { };

    for (int i = 0; i < amount; i++)
    {
        Console.WriteLine("Enter fraction to compare. WRITE AS IMPROPER FRCATION");
        string str = Console.ReadLine();
        string[] each = str.Split('/');
        List<double> eachDoub = new List<double> { };
        foreach (string hit in each)
        {
            eachDoub.Add(double.Parse(hit));
        }

        foreach (double hit in eachDoub)
        {
            finals.Add(eachDoub[0] / eachDoub[1]);
        }
    }
    max = finals.Max();
    min = finals.Min();

    Console.WriteLine("The maximum is {0} and the minimum is {1}.", max, min);
    Console.ReadLine();
于 2013-10-12T22:58:18.850 に答える