Как я могу упростить это, если последовательность? - PullRequest
0 голосов
/ 25 февраля 2020

Я учусь java, и я застрял в глупой ситуации.

Я мог бы просто выбросить весь свой код сюда, но это только еще больше запутало бы вас. Таким образом, я преобразовал свое логическое мышление в это:

if (a) 
{
    *instruction 1*
}

if (!a && b && !c) 
{
    *instruction 2*
}

if (!a && b && c)
{
    *instruction 3*
}
else
{
    *instruction 4*
}

Все, что я хочу знать, - могу ли я упростить это, поэтому я не использую так много утверждений "если" ... И я бы хотел чтобы узнать, как вы пришли к своему выводу.

Заранее спасибо! (Да, я тупой, помогите мне)

РЕДАКТИРОВАТЬ:

Я добавляю таблицу истинности с каждой комбинацией a, b и c: Truth table

Ответы [ 3 ]

0 голосов
/ 25 февраля 2020

Возможно, вы захотите использовать оператор switch, чтобы сделать его более читабельным. Что-то вроде:

switch(expression) {
case x:
// code block
break;
case y:
// code block
break;
default:
// code block
}

Оператор switch является оператором многократного перехода. Он обеспечивает простой способ отправки выполнения в разные части кода в зависимости от значения выражения. По сути, выражение может быть байтовым, коротким, типом char и типом int. Начиная с JDK7, он также работает с перечисляемыми типами (перечисления в java), классами String и классами Wrapper.

Насколько я вижу, существует класс Wrapper для логических значений.

boolean result = switch (ternaryBool) {
case TRUE -> true;
case FALSE -> false;
case FILE_NOT_FOUND -> throw new UncheckedIOException(
    "This is ridiculous!",
    new FileNotFoundException());
// as we'll see in "Exhaustiveness", `default` is not necessary
default -> throw new IllegalArgumentException("Seriously?! ?");
};

https://blog.codefx.org/java/switch-expressions/

0 голосов
/ 25 февраля 2020

Если a, b и c являются локальными переменными или иным образом гарантированно не изменится, пока вы go через операторы if, то вы можете написать свой код как:

if (a) {
    // instruction 1
} else if (b) {
    if (!c) {
        // instruction 2
    } else {
        // instruction 3
    }
} 
if (a || !b || !c) {
    // instruction 4
}

Однако, это все еще довольно сложно. В зависимости от значения a, b и c и от того, как вы их вычисляете, вам, вероятно, следует реорганизовать этот код в несколько методов. Например, оператор if, относящийся к c, может хорошо вписаться в метод с одной ответственностью.

Если вы хотите проверить правильность этого изменения, вы можете создать таблицу истинности со всеми возможными комбинациями из a, b и c, являющихся true или false. Вы бы проверили, какая инструкция будет выполнена в вашем первом коде, и какая инструкция будет выполнена в новом коде.

0 голосов
/ 25 февраля 2020

В нескольких условиях я бы использовал оператор switch, чтобы его было легче читать.

https://beginnersbook.com/2017/08/java-switch-case/

...