-3

trueがtrueではないという問題があります。これは少し奇妙に聞こえますが、私もそう思います。そのため、私はそれについて議論するつもりだと思いました。

これが私の簡略化されたコードです:

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を返していますが、これは不可能だと確信しています。私の配列の7番目の項目はTRUEです。

4

5 に答える 5

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になった時点でFORLOOPを終了することです。

注:VBスキルが優れているため、VBからコードを変換したため、期待どおりに機能しない場合があります

于 2013-03-19T18:44:44.657 に答える
1

7 番目の値は ですtrueが、8 番目の値はで、値をfalse上書きします。truemyIsShouldBeTrue

各値を OR することができるため、true存在する場合は永続化されます。

foreach (bool valueBl in myValuesBls)
{
    myIsShouldBeTrue = myIsShouldBeTrue || valueBl;
}
于 2013-03-19T18:21:13.973 に答える
0

foreach ループの内容を

if(valueBl == true)
{
    myIsShouldBeTrue = valueBl;
}

その後、trueを出力します。しかし、他の人が言ったように、これは for ループであるため、コンソールは配列内の LAST 値を出力していますが、これは false です。

実際、ループ内で条件に達したときにループを終了させたい場合は、while または do/while ループを使用する必要があります。for ループは、実際には配列全体を処理することを目的としています。ただし、怠け者の場合は、return を付けることで 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を出力します。

于 2013-03-19T18:27:56.020 に答える
0

あなたが持っているループ:

bool myIsShouldBeTrue = false;
foreach (bool valueBl in myValuesBls)
{
    myIsShouldBeTrue = valueBl;
}

配列内の各項目を調べて、myIsShouldBeTrueの値を現在の項目の値に設定します。これの効果は、myIsShouldBeTrue常に配列の最後の項目になることです。

コメントに基づいて、配列内の値のいずれかが真であるかどうかを判断したいと思われます。それを行う方法はいくつかあります。現在のアイテムとの ORedmyIsShouldBeTrueの結果になるように設定できるコードに最も密接に固執します。myIsShouldBeTrueそうすれば、「I've already found a true value, or this item is true」という行になります。コードの変更は非常に簡単です。

bool myIsShouldBeTrue = false;
foreach (bool valueBl in myValuesBls)
{
    myIsShouldBeTrue |= valueBl;
}

演算子は、その|=値をオペランドと ORed した結果になるように値を設定します。

必要に応じて、このコードを改善できます。まず第一に、true であるアイテムが見つかったら、コレクションをループし続ける必要はありません。その時点で結果が真になることがわかっているので、やめることができます。これは、ブール演算に関して「短絡」と呼ばれます。

bool myIsShouldBeTrue = false;
foreach (bool valueBl in myValuesBls)
{
    if (valueBl)
    {
        myIsShouldBeTrue = true;
        break;//exit the loop
    }
}

LINQ は、ここで活用できる素晴らしいツールでもあります。一連のデータに基づいて結果を集計するために設計された操作があります。この特定のケースでは、ブール値のいずれかが true かどうかを知りたいと考えています。これを次のように書き出すことができます。

myIsShouldBeTrue = myValuesBls.Any(value => value);

いずれかの値が true の場合、true にmyIsShouldBeTrueなります。最終結果は、以前のループとあまり変わらないコードですが、Anyやや難しい問題に適用するのが少し簡単で、要件と同じように読むのに優れています。構文に慣れると、作成者の意図を正確に理解するのがはるかに簡単になります。

于 2013-03-19T18:56:08.470 に答える
0

myIsShouldBeTrue = valueBl[9]最終的にはFALSE そう Console.WriteLine(myIsShouldBeTrue)出力する必要がありますFALSE

于 2013-03-19T18:23:15.050 に答える