我需要在存储在数组中的所有整数中找到大于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的情况下这样做。
答案 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)