我遇到的问题是真实不对。这听起来有点奇怪,我也这么认为,这就是为什么我认为我会讨论它的原因。
这是我的精简代码:
static void Main(string[] args)
{
bool[] myValuesBls = new bool[10];
for (int i = 1; i < 10; i++)
{
if (i == 7)
myValuesBls[i] = true;
else
myValuesBls[i] = false;
}
bool myIsShouldBeTrue = false;
foreach (bool valueBl in myValuesBls)
{
myIsShouldBeTrue = valueBl;
}
Console.WriteLine(myIsShouldBeTrue);
Console.ReadLine();
}
值返回false,我很确定这是不可能的。我的数组中的第七项是TRUE。
答案 0 :(得分:1)
第7个值为true
,但第8个值为false
,覆盖了true
myIsShouldBeTrue
值
你可以对每个值进行OR,所以如果存在true
,它将被保留:
foreach (bool valueBl in myValuesBls)
{
myIsShouldBeTrue = myIsShouldBeTrue || valueBl;
}
答案 1 :(得分:1)
尝试这种情况会发生什么?
private static void Main(string[] args)
{
bool[] myValuesBls = new bool[10];
for (int i = 1; i <= 9; i++) {
if (i == 7) {
myValuesBls[i] = true;
} else {
myValuesBls[i] = false;
}
}
bool myIsShouldBeTrue = false;
foreach (bool valueBl in myValuesBls) {
myIsShouldBeTrue = valueBl;
if (myIsShouldBeTrue == true)
break;
}
Console.WriteLine(myIsShouldBeTrue);
Console.ReadLine();
}
这应该是当你的值为TRUE时退出FOR LOOP。
注意:它可能无法正常工作,因为我已经从VB转换代码,因为我的VB技能更好
答案 2 :(得分:0)
myIsShouldBeTrue = valueBl[9]
最终将是FALSE
所以
Console.WriteLine(myIsShouldBeTrue)
应输出FALSE
!
答案 3 :(得分:0)
如果将foreach循环的内容更改为
if(valueBl == true)
{
myIsShouldBeTrue = valueBl;
}
然后它将输出true。但正如其他人所说,它是一个for循环,所以控制台输出数组中的LAST值,这是假的。
实际上,如果你希望你的循环在循环中达到条件时结束,你应该使用while或do / while循环。 for循环真正用于遍历整个数组。如果你很懒,你也可以通过坚持回归来摆脱for循环;在其中,但你仍然需要一个回归的测试条件
编辑:Java版
public static void main(String[] args)
{
boolean[] myValuesBls = new boolean[10];
for (int i = 1; i < 10; i++)
{
if (i == 7)
myValuesBls[i] = true;
else
myValuesBls[i] = false;
}
boolean myIsShouldBeTrue = false;
for(boolean valueBl : myValuesBls)
{
if(valueBl == true) // condition
{
myIsShouldBeTrue = valueBl;
}
}
System.out.println(myIsShouldBeTrue);
}
这将输出true。
答案 4 :(得分:0)
你拥有的循环:
bool myIsShouldBeTrue = false;
foreach (bool valueBl in myValuesBls)
{
myIsShouldBeTrue = valueBl;
}
遍历数组中的每个项目,并将myIsShouldBeTrue
的值设置为当前项目的值。这样做的结果是myIsShouldBeTrue
将始终是数组中的最后一项。
根据您的评论,您可能希望确定数组中的任何值是否为真。我们可以通过多种方式实现这一目标。最贴近您的代码,我们可以将myIsShouldBeTrue
设置为myIsShouldBeTrue
与当前项目进行OR运算的结果。这样,该行将显示为“我已经找到了一个真值,或者这个项目是真的”。代码更改非常简单:
bool myIsShouldBeTrue = false;
foreach (bool valueBl in myValuesBls)
{
myIsShouldBeTrue |= valueBl;
}
|=
运算符将值设置为该值的结果与操作数进行OR运算。
如果我们愿意,我们可以改进此代码。对于初学者来说,一旦我们找到了一个真实的项目,就没有必要继续循环遍历该集合。我们知道结果将是真实的,所以我们可以退出。对于布尔运算,这称为“短路”。
bool myIsShouldBeTrue = false;
foreach (bool valueBl in myValuesBls)
{
if (valueBl)
{
myIsShouldBeTrue = true;
break;//exit the loop
}
}
LINQ也是一个很棒的工具,可以在这里使用。它具有基于数据序列聚合结果的操作。在这种特殊情况下,我们想知道是否有任何布尔值为真。我们可以写出来:
myIsShouldBeTrue = myValuesBls.Any(value => value);
如果任何值为真,那么myIsShouldBeTrue
将为真。最终的结果是与我们之前的循环没有太大区别的代码,尽管将Any
应用于更棘手的问题会更容易一些,并且它会像我们的要求一样完成伟大的阅读工作。一旦习惯了语法,就可以更容易地看到作者的意图。