0

これを始めるには宿題があります。私は少し問題があり、いくつかの提案が欲しいです。ここまでで、ユーザーから 10 個の入力値を取得して配列に格納するアプリケーションを作成しました。配列を SmallAndLarge メソッドに渡し、Sort() を使用して 10 個の値の最小値と最大値を表示しますが、ユーザーが入力した 10 個の値の最小値と最大値を表示する必要があり、問題が発生しています。どんな助けでも素晴らしいでしょう!!

また、もう 1 つの問題として、1 から 10 までの値を入力すると、配列がソートされて表示されるときに、10 が 2 の前になり、1 の後になることに気付きました。どうしてこれなの?

namespace SmallAndLarge
{
    class Program
    {
        static void Main()
        {
            int found = 0;
            string[] numbers = new string[10];
            for (int i = 0; i < numbers.Length; i++)
            {
                Console.Write("Enter ten numbers --> ");
                numbers[i] = Console.ReadLine();
            }
            SmallestAndLargest(numbers);



        }
        public static int SmallestAndLargest(string[] numbers1)
        {

            int x;
            Array.Sort(numbers1);
            for (x = 0; x < numbers1.Length; ++x)
                Console.Write("{0} ", numbers1[x]);
            return x;
        }

    }
}
4

4 に答える 4

2

Linq最大/最小をキャストして返すために使用できますusing Min/Max

string[] numbers = new string[] {"1","2","3","15","30","7" };

var converted = numbers.Select(int.Parse);
int largest = converted.Max();
int smallest = converted.Min();
于 2013-03-15T21:24:55.737 に答える
1

数字を文字列として持っています。これはなぜ"10"が前に来るのかを説明しています。これは、アルファベット順で前に来る"2"のと同じ理由です。の最初の文字はの前に来ます。"am""i""10"'1''2'

したがって、配列をソートする前、または最大値と最小値を検索する前に、文字列を何らかの数値型に変換する必要があります。intたとえば、タイプである可能性があります。int[]ではなく、タイプの配列でそれらを保持しますstring[]

指定されstringた byから に変換するには、たとえば、またはメソッドのオーバーロードを使用します。Console.ReadLineintint.Parseint.TryParse

ユーザーが のような非整数を入力できるようにする必要がある場合は、代わりに を3.14使用できます。decimalint

于 2013-03-15T21:13:02.137 に答える
1

配列を繰り返し処理しているようです。私は次のことをします:

  1. 2 つの int 変数 (それぞれ small と large) を作成します。
  2. 両方を配列の最初の要素に等しく設定します
  3. 要素をループします。
  4. 各要素[i]について、(int.Parse()または同等のものを使用して要素をintに変換します)。
    要素 [i] > 大、大 = 要素 [i] の場合。要素[i] <小、小=要素[i]の場合

min と max のみが必要な場合は、並べ替えの必要はありません。そして、文字列配列ではなく int 配列に int を格納し、ユーザーが値を入力したときに変換を行います。そうすれば、無効な値が入力されると、プログラムはすぐに失敗します。

于 2013-03-15T21:13:18.163 に答える
0

これは非常に単純ですが、長々とした答えです。値をリストに追加し、Min/Max リターンを使用します。すでに for ループを使用してリストを反復処理していますが、2 回実行する理由はありません。

    static void Main(string[] args)
    {
        string[] StringValues = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10","Not Number" };
        List<int> ConvertedStrings = new List<int>();

        foreach (string S in StringValues)
        {
            ConvertedStrings = ParseStringToInt(S, ConvertedStrings);
        }
        Console.WriteLine();
        Console.WriteLine("Max Value: " + ConvertedStrings.Max().ToString());
        Console.WriteLine("Min Value: " + ConvertedStrings.Min().ToString());
        Console.ReadLine();
    }

    static private List<int> ParseStringToInt(string Input, List<int> ConvertedStrings)
    {
        int ConvertedValue = 0;

        if (int.TryParse(Input, out ConvertedValue))
        {
            Console.WriteLine(Input + " sucessfully parsed and added...");
            ConvertedStrings.Add(ConvertedValue);
            return ConvertedStrings;
        }
        else
        {
        Console.WriteLine(Input + " failed to parse...");
        }

        return ConvertedStrings;
    }

しかし、sa_ddam213 は素晴らしい答えを持っています :P

于 2013-03-15T21:32:33.237 に答える