在数组中查找最小值

时间:2013-09-02 12:15:19

标签: c#

我需要在存储在数组中的所有整数中找到大于0的最小值。我尝试了一些在stackoverflow上执行此操作的方法,但在所有情况下,我的最小值仍然等于0。 我应该在代码中更改哪些内容才能使其正常工作?

int[] userInput = new int[1000];
        int counter;

        Console.WriteLine ("Please input some numbers");

        for (counter = 0; counter < userInput.Length; counter++) {
            string line = Console.ReadLine ();

            if (line == "" || line == "stop") {
                break;
            } else {
                int.TryParse (line, out userInput [counter]);
            }
        }
        int min = 0;
        for(int i = 0; i < userInput.Length; i++)
        {
            if(userInput[i] > 0)
            {
                userInput[i] = min;
                break;
            }
        }
        for(int i = 0; i < userInput.Length; i++)
        {
            if(userInput[i] < min && userInput[i] > 0)
            {
                min = userInput [i];
            }
        }
        Console.WriteLine(min);
    }
}

}

我想在不使用LINQ的情况下这样做。

9 个答案:

答案 0 :(得分:2)

一个例子。你可以使用Praveen的答案,但这只是一个替代方案。

int[] numbers = { -1, 0, 1, 2, 3, 4, 5 };

public int getMinimum(int[] array)
{
    // Since you need larger than 0
    int minimum = 1;

    foreach (int elem in array)
    {
        minimum = Math.Min(minimum, elem);
    }

    return minimum;
}

因此,调用getMinimum(numbers)将返回1

希望它有所帮助。

答案 1 :(得分:1)

int[] userInput = new int[1000];
int counter;

Console.WriteLine("Please input some numbers");

for (counter = 0; counter < userInput.Length; counter++)
{
    string line = Console.ReadLine();

    if (line == "" || line == "stop")
    {
        break;
    }
    else
    {
        int.TryParse(line, out userInput[counter]);
    }
}
int min = 0;
for (int i = 0; i < userInput.Length; i++)
{
    if (userInput[i] < min && userInput[i] > 0)
    {
        min = userInput[i];
    }
}
Console.WriteLine(min);

这将找到数组中的最小数字。

答案 2 :(得分:0)

试试这个:

   int min;
    int found_positive = 0; // 1 if there's positive element
    for(int i = 0; i < userInput.Length; i++)
    {
      if(userInput[i]>0){
        if(found_positive==1){
          if(userInput[i]<min) min=userInput[i];
        }else{
          found_positive=1;
          min = userInput[i];
        }
      }
    }

答案 3 :(得分:0)

    int[] userInput = new int[1000];
    int counter;

    Console.WriteLine ("Please input some numbers");

    for (counter = 0; counter < userInput.Length; counter++) {
        string line = Console.ReadLine ();

        if (line == "" || line == "stop") {
            break;
        } else {
            int.TryParse (line, out userInput [counter]);
        }
    }
    var min = userinput.Length>0?userInput[0]:0;
    for(int i = 1; i < userInput.Length; i++)
    {
        if(userInput[i] < min && userInput[i] > 0)
        {
            min = userInput [i];
        }
    }

这应该足够......

答案 4 :(得分:0)

在一组值中获取最大值/最小值是一个非常流行的(并且最终是微不足道的)编程问题。

您的帖子是同一问题的专门实例。在您的情况下,您希望在一组整数中获得最小正值。

您的代码几乎是正确的。仅替换第二个for块中的以下行:

 min = userInput[i];

答案 5 :(得分:0)

在当前的解决方案中,您将第一个超过0的实例更改为0:

if(userInput[i] > 0)
{
    userInput[i] = min;
    break;
}

您需要将其更改为

min = userInput[i];

虽然这个for循环完全没必要(并且增加了复杂性)。你最好使用int.MaxValue将min设置为最大可能的int值,以便在下一个for循环中

if(userInput[i] < min && userInput[i] > 0)
{
    min = userInput [i];
}

第一个值将小于(或至少等于)min;

答案 6 :(得分:0)

您必须将列表限制为大于零的所有条目,然后使用LINQ方法Min()查找最接近零的最小值。请参阅下面的第二个示例,查看非LINQ版本。

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Please input some numbers. Use SPACE as separator");
            string line = Console.ReadLine();
            var userInput = new List<int>();

            foreach (string entry in line.Split(' '))
            {
                int number;
                if (!string.IsNullOrEmpty(entry) && int.TryParse(entry, out number))
                    userInput.Add(number);
            }

            const int lowest = 0;

            Console.WriteLine("The lowest number above {0} is: {1}", lowest, userInput.Where(n => n > lowest).Min());

            Console.WriteLine("Press any key to finish.");
            Console.ReadKey();
        }
    }
}

非LINQ示例

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Please input some numbers. Use SPACE as separator");
            string line = Console.ReadLine();
            var userInput = new List<int>();

            int min = int.MaxValue;

            if (!string.IsNullOrEmpty(line))
            {
                foreach (string entry in line.Split(' '))
                {
                    int number;
                    if (!string.IsNullOrEmpty(entry) && int.TryParse(entry, out number))
                        userInput.Add(number);
                }
            }

            const int lowest = 0;
            foreach(int number in userInput)
            {
                if (number > lowest)
                    min = Math.Min(number, min);
            }

            Console.WriteLine("The lowest number above {0} is: {1}", lowest, min);

            Console.WriteLine("Press any key to finish.");
            Console.ReadKey();
        }
    }
}

答案 7 :(得分:0)

使用LINQ,用一行做到这一点:

int[] userInput = new int[1000];

var result = userInput.OrderBy(i=>i).SkipWhile(i=>i<=0).First()

答案 8 :(得分:-1)

array1.Min()

请参阅this

  

使用Min方法,我们找到最小元素或最小值   经过改造。