1

booleanJavaでの組み合わせと非ブールifステートメントはどのように機能しますか? 条件ステートメントを記述する必要がある特定の方法はありますか?

たとえば、次のコードでは毎回異なる結果が得られます。

カブトムシはランダムにオスまたはメスとして初期化され、年齢は 0 です。

public class BeetleAgent {
    public boolean isFemale;
    public int age;

    public BeetleAgent(boolean isFemale, int age) {
        // initialize class variables with arguments
    } 

    //age in days
    @ScheduledMethod(start = 1, interval = 1)
    public void trackAge () {
        this.setAge(getAge() + 1);
        System.out.println("Beetle is now " + this.getAge());

    }

    // adults mate after 1 week 
    @ScheduledMethod(start = 1, interval = 1)
    public void checkMate() { 
        if (this.getAge()== 7 && this.isFemale()) {
            System.out.println("Both are true, beetle can MATE.");
            mate();
        }
    }

    @ScheduledMethod(start = 1, interval = 1)
    public void checkMaleDeath() { 
        if (!this.isFemale() && this.getAge()== 13) {
            System.out.println("Both are true, male beetle can DIE.");
            maleDeath();
        }   
    }

    @ScheduledMethod(start = 1, interval = 1)
    public void checkFemaleDeath() {
        if (this.isFemale() && this.getAge() == 25) {
            System.out.println("Both are true, female beetle can DIE.");
            femaleDeath();
        }
    }

    // getters and setters
}

Javaが混合を許可していないとは想像できません...

編集:

環境...

    Random random = new Random();
    for (int i = 0; i < 6; i++) {
        boolean isFemale = random.nextBoolean();
        int age = 0;
        BeetleAgent beetle = new BeetleAgent(context, geography, isFemale, age);
        context.add(beetle);
        beetleagentlist.add(beetle);
        Coordinate coord = new Coordinate(-79.6976, 43.4763);
        Point geom = fac.createPoint(coord);
        geography.move(beetle, geom);
    }

私は実際にオスとメスのカブトムシを取得していることを確認するためのsysoutコードを持っています。それらが適切にエージングされていることを確認するための sysout コードもあります。

条件が満たされていないかのように、メソッドがスキップされることがあります。時々、それらはすべて適切に機能します。

出力はコード形式で申し訳ありませんが、最も簡単です。私が望むのは、カブトムシが7歳でメスであれば、交尾相手を見つけることです. カブトムシが 13 歳でオスの場合、死にます。カブトムシが 25 歳で雌の場合、死亡します。時々これが起こります:

Female: true
Female: true
Female: false
Female: false
Female: false
Female: true
Preparing to load a set of trees... 
6182 trees loaded!
Preparing to load the model...
1 model loaded!
Beetle is now 1
Beetle is now 1
Beetle is now 1
Beetle is now 1
Beetle is now 1
Beetle is now 1
Beetle is now 2
Beetle is now 2
Beetle is now 2
Beetle is now 2
Beetle is now 2
Beetle is now 2
Beetle is now 3
Beetle is now 3
Beetle is now 3
Beetle is now 3
Beetle is now 3
Beetle is now 3
Beetle is now 4
Beetle is now 4
Beetle is now 4
Beetle is now 4
Beetle is now 4
Beetle is now 4
Beetle is now 5
Beetle is now 5
Beetle is now 5
Beetle is now 5
Beetle is now 5
Beetle is now 5
Beetle is now 6
Beetle is now 6
Beetle is now 6
Beetle is now 6
Beetle is now 6
Beetle is now 6
Beetle is now 7
Beetle is now 7
Beetle is now 7
Beetle is now 7
Beetle is now 7
Beetle is now 7
Both are true, beetle can MATE.
Mating...
Both are true, beetle can MATE.
Mating...
Both are true, beetle can MATE.
Mating...
//sometimes this prints twice (should only print once)
Both are true, beetle can MATE.
Mating...
Both are true, beetle can MATE.
Mating...
Both are true, beetle can MATE.
Mating...
Beetle is now 8
Beetle is now 8
Beetle is now 8
Beetle is now 8
Beetle is now 8
Beetle is now 8
Beetle is now 9
Beetle is now 9
Beetle is now 9
Beetle is now 9
Beetle is now 9
Beetle is now 9
Beetle is now 10
Beetle is now 10
Beetle is now 10
Beetle is now 10
Beetle is now 10
Beetle is now 10
Beetle is now 11
Beetle is now 11
Beetle is now 11
Beetle is now 11
Beetle is now 11
Beetle is now 11
Beetle is now 12
Beetle is now 12
Beetle is now 12
Beetle is now 12
Beetle is now 12
Beetle is now 12
Beetle is now 13
Beetle is now 13
Beetle is now 13
Beetle is now 13
Beetle is now 13
Beetle is now 13
Both are true, male beetle can DIE.
Male beetle has died...
Both are true, male beetle can DIE.
Male beetle has died...
Both are true, male beetle can DIE.
Male beetle has died...
Beetle is now 14
Beetle is now 14
Beetle is now 14
Beetle is now 14
Beetle is now 14
Beetle is now 14
Beetle is now 15
Beetle is now 15
Beetle is now 15
Beetle is now 15
Beetle is now 15
Beetle is now 15
Beetle is now 16
Beetle is now 16
Beetle is now 16
Beetle is now 16
Beetle is now 16
Beetle is now 16
Beetle is now 17
Beetle is now 17
Beetle is now 17
Beetle is now 17
Beetle is now 17
Beetle is now 17
Beetle is now 18
Beetle is now 18
Beetle is now 18
Beetle is now 18
Beetle is now 18
Beetle is now 18
Beetle is now 19
Beetle is now 19
Beetle is now 19
Beetle is now 19
Beetle is now 19
Beetle is now 19
Beetle is now 20
Beetle is now 20
Beetle is now 20
Beetle is now 20
Beetle is now 20
Beetle is now 20
Beetle is now 21
Beetle is now 21
Beetle is now 21
Beetle is now 21
Beetle is now 21
Beetle is now 21
Beetle is now 22
Beetle is now 22
Beetle is now 22
Beetle is now 22
Beetle is now 22
Beetle is now 22
Beetle is now 23
Beetle is now 23
Beetle is now 23
Beetle is now 23
Beetle is now 23
Beetle is now 23
Beetle is now 24
Beetle is now 24
Beetle is now 24
Beetle is now 24
Beetle is now 24
Beetle is now 24
Beetle is now 25
Beetle is now 25
Beetle is now 25
Beetle is now 25
Beetle is now 25
Beetle is now 25
Both are true, female beetle can DIE.
Female beetle has died...
Both are true, female beetle can DIE.
Female beetle has died...
Both are true, female beetle can DIE.
Female beetle has died...
Beetle is now 26
Beetle is now 26
Beetle is now 26
Beetle is now 26
Beetle is now 26
Beetle is now 26

Sometimes this happens, where for in this example, but females dont die(not good). Also notice that the mate function only ran once as it should:
Female: false
Female: false
Female: false
Female: true
Female: true
Female: true
Preparing to load a set of trees... 
6182 trees loaded!
Preparing to load the model...
1 model loaded!
Beetle is now 1
Beetle is now 1
Beetle is now 1
Beetle is now 1
Beetle is now 1
Beetle is now 1
Beetle is now 2
Beetle is now 2
Beetle is now 2
Beetle is now 2
Beetle is now 2
Beetle is now 2
Beetle is now 3
Beetle is now 3
Beetle is now 3
Beetle is now 3
Beetle is now 3
Beetle is now 3
Beetle is now 4
Beetle is now 4
Beetle is now 4
Beetle is now 4
Beetle is now 4
Beetle is now 4
Beetle is now 5
Beetle is now 5
Beetle is now 5
Beetle is now 5
Beetle is now 5
Beetle is now 5
Beetle is now 6
Beetle is now 6
Beetle is now 6
Beetle is now 6
Beetle is now 6
Beetle is now 6
Beetle is now 7
Beetle is now 7
Beetle is now 7
Beetle is now 7
Beetle is now 7
Beetle is now 7
Both are true, beetle can MATE.
Mating...
Both are true, beetle can MATE.
Mating...
Both are true, beetle can MATE.
Mating...
Beetle is now 8
Beetle is now 8
Beetle is now 8
Beetle is now 8
Beetle is now 8
Beetle is now 8
Beetle is now 9
Beetle is now 9
Beetle is now 9
Beetle is now 9
Beetle is now 9
Beetle is now 9
Beetle is now 10
Beetle is now 10
Beetle is now 10
Beetle is now 10
Beetle is now 10
Beetle is now 10
Beetle is now 11
Beetle is now 11
Beetle is now 11
Beetle is now 11
Beetle is now 11
Beetle is now 11
Beetle is now 12
Beetle is now 12
Beetle is now 12
Beetle is now 12
Beetle is now 12
Beetle is now 12
Beetle is now 13
Beetle is now 13
Beetle is now 13
Beetle is now 13
Beetle is now 13
Beetle is now 13
Both are true, male beetle can DIE.
Male beetle has died...
Both are true, male beetle can DIE.
Male beetle has died...
Both are true, male beetle can DIE.
Male beetle has died...
Beetle is now 14
Beetle is now 14
Beetle is now 14
Beetle is now 14
Beetle is now 14
Beetle is now 14
Beetle is now 15
Beetle is now 15
Beetle is now 15
Beetle is now 15
Beetle is now 15
Beetle is now 15
Beetle is now 16
Beetle is now 16
Beetle is now 16
Beetle is now 16
Beetle is now 16
Beetle is now 16
Beetle is now 17
Beetle is now 17
Beetle is now 17
Beetle is now 17
Beetle is now 17
Beetle is now 17
Beetle is now 18
Beetle is now 18
Beetle is now 18
Beetle is now 18
Beetle is now 18
Beetle is now 18
Beetle is now 19
Beetle is now 19
Beetle is now 19
Beetle is now 19
Beetle is now 19
Beetle is now 19
Beetle is now 20
Beetle is now 20
Beetle is now 20
Beetle is now 20
Beetle is now 20
Beetle is now 20
Beetle is now 21
Beetle is now 21
Beetle is now 21
Beetle is now 21
Beetle is now 21
Beetle is now 21
Beetle is now 22
Beetle is now 22
Beetle is now 22
Beetle is now 22
Beetle is now 22
Beetle is now 22
Beetle is now 23
Beetle is now 23
Beetle is now 23
Beetle is now 23
Beetle is now 23
Beetle is now 23
Beetle is now 24
Beetle is now 24
Beetle is now 24
Beetle is now 24
Beetle is now 24
Beetle is now 24
Beetle is now 25
Beetle is now 25
Beetle is now 25
Beetle is now 25
Beetle is now 25
Beetle is now 25
Beetle is now 26
Beetle is now 26
Beetle is now 26
Beetle is now 26
Beetle is now 26
Beetle is now 26
Beetle is now 27
Beetle is now 27
Beetle is now 27
Beetle is now 27
Beetle is now 27
Beetle is now 27
Beetle is now 28
Beetle is now 28
Beetle is now 28
Beetle is now 28
Beetle is now 28
Beetle is now 28 
4

1 に答える 1

2

ここで少し遅れましたが、この問題は、リパスト インタレスト リストのリパスト シンフォニーの共同制作者であるニック コリアーとの会話で解決されました。彼は、すべてのメソッドが同じ優先順位でスケジュールされていると述べました。これは、ランダム ヘルパー (したがってランダム シード) を使用して順序を決定していることを意味します。

その結果、たとえば、後でなどにstep()呼び出さcheckMate()れ、次のティックで再びランダム化が行われ、step()checkMate()などに呼び出される可能性があります。その結果、エージェントが 13 になり、エージェントが呼び出されたときに他のメソッドが呼び出されずに 14 になる場合があります。メソッドの優先順位を指定したい場合は@Scheduled、priority パラメータを使用するか、単に開始時刻をずらします (つまり、step()で開始し1、次に次のメソッドを で開始する1.1など)。

death()メソッドの優先度が最も高い場合、コードが正常に機能することがわかりました。

于 2015-04-21T23:19:18.123 に答える