Смешивание реляционных и логических условий в операторах java if

Как работает комбинация boolean и небулевых операторов if в java? Есть ли особый способ написания условных операторов?

Например, приведенный ниже код каждый раз дает разные результаты.

Жуки инициализируются как случайные самцы или самки и имеют возраст 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 

person Taylor Marie    schedule 10.03.2015    source источник
comment
Я не могу сразу увидеть какие-либо проблемы с операторами if. Вы пытались использовать отладчик для проверки значений переменных и почему условные выражения проходят/не проходят?   -  person Brandon    schedule 10.03.2015
comment
@blm Приятно знать. У меня есть, но мне не удалось заставить отладчик работать для симуляции повторной симфонии так же, как он работает для класса Java. Я попробую снова.   -  person Taylor Marie    schedule 10.03.2015
comment
Можете ли вы сказать нам, какой именно результат вы получаете и что ожидается? Я также не могу найти ничего плохого в коде прямо сейчас.   -  person Aify    schedule 10.03.2015
comment
Я считаю, что единственная проблема, с которой вы можете столкнуться, связана с вашими входными данными конструктора (age и isFemale). Можете ли вы показать нам, что вы передаете в него? Нам понадобится желаемый результат, а также фактический результат.   -  person Fernando Carvalhosa    schedule 10.03.2015
comment
Кстати, здесь нет небулевого смешивания. Например, this.getAge() == 7 каждый раз приводит к boolean. "For example, the code below gives me different results every time. Beetles are initialized as randomly male or female and at age 0." Поскольку они инициализируются случайным образом, не должны ли результаты каждый раз быть разными?   -  person Fernando Carvalhosa    schedule 10.03.2015
comment
@FernandoCarvalhosa, хорошо, спасибо, я отредактирую   -  person Taylor Marie    schedule 10.03.2015
comment
Я предложил некоторые правки, взгляните на них, когда у вас будет время.   -  person Fernando Carvalhosa    schedule 10.03.2015
comment
Спасибо @FernandoCarvalhosa. Также я добавил дополнительную информацию.   -  person Taylor Marie    schedule 10.03.2015
comment
@Aify Я добавил некоторую информацию.   -  person Taylor Marie    schedule 10.03.2015
comment
Насколько я могу судить, в коде нет абсолютно ничего плохого. Если это не работает так, как вы хотите, не могли бы вы объяснить, как вы хотите, чтобы это работало?   -  person Aify    schedule 10.03.2015
comment
@Aify, не могли бы вы взглянуть на правки.   -  person Taylor Marie    schedule 10.03.2015
comment
Я вижу, вы тоже спрашивали об этом на Repast-interest. Помогла вам справка там про случайное семя или нет? Я не уверен, что это настоящая проблема - действительно ли во втором запуске у вас есть 3 женщины, но блок кода femaleDeath(), похоже, не запускается? Если да - я отредактирую ваш вопрос, чтобы сделать его немного яснее. Тогда, возможно, я смогу помочь.   -  person J Richard Snape    schedule 18.03.2015
comment
@JRichardSnape Ричард, извините за задержку. Ник предложил изменить приоритеты, например @ScheduledMethod(start = 1, interval = 1, priority = 1.1), чтобы разные методы имели разные приоритеты 1.2, 1.3., 1.4 и т. д., и это сработало. Вы можете просмотреть обсуждение в документации списка рассылки repast: sourceforge.net /p/repast/mailman/repast-interest/   -  person Taylor Marie    schedule 22.04.2015
comment
Конечно, нет проблем. Я видел, что вы получили ответ по процентам за обед - я слежу за этим. Хороший звонок, чтобы опубликовать ответ на свой вопрос здесь тоже. Я немного отредактировал его, чтобы он соответствовал форматированию кода здесь... Всего наилучшего!   -  person J Richard Snape    schedule 22.04.2015
comment
Кстати, если вы не согласны с моим редактированием вашего ответа, вы всегда можете отменить его / изменить.   -  person J Richard Snape    schedule 22.04.2015


Ответы (1)


Здесь небольшая задержка, но проблема была решена в разговоре с Ник Коллиер, соавтор Repast Simphony, в списке интересов трапезы. Он заявил, что все методы запланированы для одного и того же приоритета, что означает, что они используют случайный помощник (и, следовательно, случайное начальное число) для определения своего порядка.

Следовательно, например, step() может вызываться после checkMate() и т. д., а затем в следующем тике снова происходит рандомизация и step() может вызываться перед checkMate() и т. д. В результате агент может быть 13, а затем 14 без каких-либо других методов. вызывается, когда агенту 13. Если вы хотите указать приоритет методов @Scheduled, вы можете использовать параметр priority или просто изменить время начала (т. е. step() начинается с 1, затем следующий метод с 1.1 и т. д.)

Я обнаружил, что мой код работает нормально, если методы death() имеют наивысший приоритет.

person Taylor Marie    schedule 21.04.2015