运行完美,但没有结果只有光标。预期结果为 int[] dizi = { 4, 5, -15, 22, -34, 3, 0, 7, 43, 100 };
int maxNumber = 0;
for (int i = 0; i < dizi.Length; i++)
{
if (dizi[i] < 0)
{
if (maxNumber < dizi[i])
{
maxNumber = dizi[i];
Console.WriteLine(maxNumber);
}
}
}
Console.ReadKey();
click
答案 0 :(得分:7)
您可以使用Where
命名空间中的Max
和System.Linq
扩展方法:
var maxNegative = dizi.Where(x => x < 0).Max();
Console.WriteLine(maxNegative);
如果集合中没有任何负数, Max()
将抛出异常。因此,如果您想要返回DefaultIfEmpty
而不是任何例外,则可能需要使用0
:
var maxNegative = dizi.Where(x => x < 0)
.DefaultIfEmpty()
.Max();
答案 1 :(得分:3)
使用Max()
确定您想要的值
int[] dizi = { 4, 5, -15, 22, -34, 3, 0, 7, 43, 100 };
int result = dizi.Where(x => x < 0).Max();
如果您想保留代码,请将int maxNumber = 0;
替换为int maxNumber = int.MinValue;
,以便覆盖maxNumber
,否则与0
相比,不会有更大的负数< / p>
答案 2 :(得分:0)
你可以试试这个:
int maxNumber = 0;
for (int i = 0; i < dizi.length; i++) {
if (dizi[i] < 0) {
if (maxNumber == 0 || dizi[i] > maxNumber ) {
maxNumber = dizi[i];
}
}
}
return maxNumber;
<强> IDEONE DEMO 强>
答案 3 :(得分:0)
如果您正在寻找非Linq 解决方案(旧的循环):
int[] dizi = { 4, 5, -15, 22, -34, 3, 0, 7, 43, 100 };
int maxNumber = 0;
foreach (var item in dizi)
if ((item < 0) && (maxNumber == 0 || item > maxNumber))
maxNumber = item;
Console.WriteLine(maxNumber);
Console.ReadKey();
如果合唱(-15
)不包含任何负数,此代码会打印出最大负数0
或dizi
答案 4 :(得分:0)
我意识到如果maxNumber低于任何数组元素,例如int maxNumber=-100
程序也是如此
答案 5 :(得分:0)
用此替换您的代码,您将获得正确的输出
max=0;
while(i<dizi.Length)
{
if(dizi[i]<max)
max=dizi[i];
i++;
}
if(max!=0)
{
Console.WriteLine(max);
}
else Console.WriteLine("No negative number")
}