我试图建立一个算法,该算法的输入是10个数字(正数和负数),而输出是最小的正数和最大的负数。 我会为最小的正面问题找到正确的答案,但对于最大的负面问题不会给出正确的答案。 代码和输出被插入。
答案 0 :(得分:2)
如果您有一个收藏集,例如int[] numbers
,则可以在 Linq 的帮助下查询:
using System.Linq;
...
int[] numbers = ...
...
// Either biggest negative or 0 (if we don't have any negative values)
int biggestNegative = numbers
.Where(x => x < 0)
.DefaultIfEmpty() // <- we don't want exception on empty input
.Max();
// Either smallest positive or 0 (if we don't have any positive values)
int smallestPositive = numbers
.Where(x => x > 0)
.DefaultIfEmpty() // <- we don't want exception on empty input
.Min();
如果您希望在for
循环中计算值:
int biggestNegative = 0;
int smallestPositive = 0;
for (int i = 0; i < 10; ++i) {
...
// Simplest, you may want to check user input
int value = int.Parse(Console.ReadLine());
...
if (value > 0)
smallestPositive = smallestPositive == 0
? value
: Math.Min(smallestPositive, value);
else if (value < 0)
biggestNegative = biggestNegative == 0
? value
: Math.Max(biggestNegativee, value);
}
让我们打印出值:
Console.WriteLine(
$"Biggest negative: {(biggestNegative == 0 ? "???" : biggestNegative.ToString())}");
Console.WriteLine(
$"Smallest positive: {(smallestPositive == 0 ? "???" : smallestPositive.ToString())}");
答案 1 :(得分:0)
if (num>negMax)
在这种情况下有错误。由于您的初始negMax值为0,因此不会满足任何负数,因此negMax值将永远不会更新。
答案 2 :(得分:0)
您正在将negMax
初始化为0。
没有大于0的负数。
根据您要完成的工作,可以执行以下操作之一:
negMax
初始化为int.MinValue
如果可以保证至少有一个负数,这是可以的,因为可以保证第一个负输入等于或大于。如果不能保证负输入,则无法确定是否有负输入,并且输出可能最终不正确。
negMax
分配新值的条件您可以改为将为negMax
到if (num > negMax || negMax >= 0)
分配新值的条件。
由于通常不将0视为负数(如果这样,则可以使用任何正数来初始化negMax
),因此,如果输出结束,您将知道不存在负数最高为0。
要对posMin
执行相同操作,您必须将其初始化为小于0的值,并调整if条件,以便为该变量相应地赋值。
或者,您也可以将negMax
和posMin
声明为int?
并检查null而不是>= 0
。
如果选择这种方式,则可以检查变量和输出的值,例如,没有输入负数或没有正数,而不是输出所选的任何占位符。