0

首先这是一项家庭作业,我遇到了一些麻烦,希望得到一些建议。到目前为止,我已经创建了这个应用程序来从用户那里获取 10 个输入值并将它们存储到一个数组中。我将数组传递给 SmallAndLarge 方法,它使用 Sort() 显示 10 个值中的最小值和最大值,但现在我必须显示用户输入的 10 个值中的最小值和最大值,但遇到了麻烦。任何帮助都会很棒!

我还注意到另一个问题,如果输入值 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

看起来您正在遍历数组。我会做以下事情:

  1. 创建两个 int 变量(分别为小和大)
  2. 将它们都设置为数组的第一个元素
  3. 循环遍历元素;
  4. 对于每个元素[i],(使用int.Parse()或等效将元素转换为 int)。
    如果元素 [i] > 大,大 = 元素 [i];如果元素 [i] < 小,小 = 元素 [i]

如果只需要最小值和最大值,则不需要排序。我会将整数存储到 int 数组而不是字符串数组中,当用户输入值时进行转换。这样,当输入无效值时,您的程序就会立即失败。

于 2013-03-15T21:13:18.163 回答
1

您将数字作为字符串。这就解释了为什么"10"出现在前面,这与按字母顺序出现在前面"2"的原因相同。is的第一个字符在之前。"am""i""10"'1''2'

因此,在对数组进行排序或搜索 max og min 值之前,您需要将字符串转换为某种数字类型。例如,它可能是int类型。您会将它们保存在 type 的数组中int[],而不是string[].

例如,要string将给定的 byConsole.ReadLine转换为int,请使用int.Parseorint.TryParse方法的重载。

如果应该允许用户键入非整数,例如3.14,您可以使用decimal代替int

于 2013-03-15T21:13:02.137 回答
0

这是一个非常简单但冗长的答案。将值添加到列表并使用最小/最大返回。您已经使用 for 循环遍历列表,没有理由重复两次。

    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 回答