0

A が true の場合、b が true になるまでブール値が true になり、その時点で boolean が false になるように、2 つの条件 a と b を持つグローバル ブール値を設計する必要があります。つまり、A が false になった場合、ブール値は true のままです。

単純なグローバル変数を試してみましたが、A が false になると false になりました。

できれば JavaScript ですが、疑似コードも同じくらい役に立ちます。

4

5 に答える 5

2

これは XOR のように聞こえます。すなわち

!A and !B == false
A and !B == true
!A and B == true
A and B == false

残念ながら、JavaScript には論理 XOR 演算子がありませんが、

if( A ? !B : B ) {

機能的に同等です

于 2012-06-05T14:10:13.383 に答える
2

私があなたの質問を正しく理解していれば、それらのケースを

var bool = (a != b);
/*
    (false != false) = false
    (true != false) = true
    (false != true) = true
    (true != true) = false
*/

変更を加えて、グローバル変数を作成し、直接var aWasEverTrue = a;設定する代わりになどの関数を使用できます。asetA(true)

var a = false;
var b = false;
var aWasEverTrue = a;
function setA(newAValue) {
    aWasEverTrue = true;
    a = newAValue;
}

// (aWasEverTrue != b) = false

setA(true);
// (aWasEverTrue != b) = true

b = true;
// (aWasEverTrue != b) = false

setA(false);
// (aWasEverTrue != b) = false (as aWasEverTrue is still true)

b = false
// (aWasEverTrue != b) = true
于 2012-06-05T14:14:24.757 に答える
2

Javascript の昔ながらの方法:

function Enjoy() {
    this.a = true;
    this.b = true;
    this.bool = true;
}

Enjoy.prototype = {
    constructor: Enjoy,

    setA: function( val ) {
        this.a = val;
        if ( this.a === true && this.b === true ) this.bool = false;
        else if ( this.a === true && this.b === false ) this.bool = true;
    },

    setB: function( val ) {
        this.b = val;
        if ( this.a === true && this.b === true ) this.bool = true;
        else if ( this.a === true && this.b === false ) this.bool = false;
    },

    getBool: function() {
        return this.bool;
    }
};

var enjoy = new Enjoy();
enjoy.getBool(); // true
enjoy.setB( false );
enjoy.getBool(); // false

ご覧のとおり、ブール値とその両方にゲッター/セッターを使用し、すべてのロジックを実行する変数を使用するという考え方aですb

ちなみに、この質問は間違いなく StackOverflow に対するものです。

于 2012-06-05T14:10:43.433 に答える
2

あなたが望むのはステートマシンです

結果の状態:

T (True)
F (False)

トランジション:

F -- a (true) --> T
F -- anything else --> F
T -- b (true) --> F
T -- anything else --> T

if一連のsで表現できます

于 2012-06-05T18:25:27.657 に答える
0

Aが真でなかった場合にBがどのように動作するかについてのいくつかの仮定に基づいて:

function FlipFlop(){
    this.latch = false;
    this.value = false;
}

FlipFlop.prototype = {
    constructor: FlipFlop,

    setA: function( val ) {
        this.latch = this.latch || !!val;
        this.value = this.latch;
    },

    setB: function( val ) {
        if(this.latch && !!val) {
            this.latch = false;
        }
        this.value = !val;
    },

    getVal: function() {
        return this.value;
    }
}
于 2012-06-05T20:42:39.277 に答える