1

java中的组合boolean和非布尔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 代码来查看它们是否正常老化。

有时,方法会被跳过,就好像条件不满足一样。有时它们都可以正常工作。

抱歉,输出是代码格式,但它最简单。我想要的是,如果甲虫是 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

这里有点延迟,但问题已在与就餐兴趣列表上的 Repast Simphony 共同创建者 Nick Collier 的对话中得到解决。他说所有方法都被安排为相同的优先级,这意味着它们使用随机助手(因此是随机种子)来决定它们的顺序。

因此,例如,step()可能在checkMate()等之后被调用,然后在下一个滴答中,随机化再次发生并且step()可能在之前checkMate()等被调用。因此,代理可能是 13,然后是 14,而当代理时没有调用任何其他方法是 13。如果你想指定@Scheduled方法的优先级,你可以使用优先级参数或者只是错开开始时间(即step()从 开始1,然后下一个方法在1.1等等。)

我发现如果death()方法是最高优先级,我的代码可以正常工作。

于 2015-04-21T23:19:18.123 回答