Как contentEquals может сравнивать несколько строк со всеми совпадающими строками? - PullRequest
0 голосов
/ 01 ноября 2019

Доброе утро, следующий код Java должен сравнить три строки с requiredProgram и выполнять цикл if и цикл do-while, если requiredProgram не равен всем трем строкам. Вместо этого он выполняет цикл if и цикл do-while, если только одна или две строки не соответствуют requiredProgram. Как я могу запрограммировать код, чтобы он делал то, что я хочу?

if (!requiredProgram.contentEquals(program1)||
    !requiredProgram.contentEquals(program2)||
    !requiredProgram.contentEquals(program3)) {
        System.out.println("Ohje, das tut mir leid. Hier muss ein Fehler unterlaufen sein! Bitte versuchen sie es erneut.");

    }
    } while(!requiredProgram.contentEquals(program1)||
            !requiredProgram.contentEquals(program2)||
            !requiredProgram.contentEquals(program3));

Ответы [ 2 ]

2 голосов
/ 01 ноября 2019

Если вы 3 program отличаетесь от requiredProgram, вы можете написать это как одно из следующих эквивалентных логических выражений:

  • Должно отличаться от 3 программы: отличается от P1 И отличается от P2 И отличается от P3

    if(!requiredProgram.contentEquals(program1) &&
       !requiredProgram.contentEquals(program2) &&
       !requiredProgram.contentEquals(program3))
    
  • Не должно быть равно ни одному из 3: НЕ ( равно P1 ИЛИ равно P2 ИЛИ равно P3 )

    if(!(requiredProgram.contentEquals(program1) || 
         requiredProgram.contentEquals(program2) || 
         requiredProgram.contentEquals(program3)))
    
1 голос
/ 01 ноября 2019

При первом взгляде на это логическое выражение можно получить одно из двух:

case1 or case2 or case3                     case1 || case2 || case3
not case1 and not case2 and not case3       !case1 && !case2 && !case3

Так что, увидев

!case1 || !case2 || !case3

один из 99,9% случаев может сказать: неправильно. По крайней мере один термин является истинным, следовательно, выражение является истинным.

Вы можете сократить код как:

if (!Set.of(program1, program2, program3).contains(requiredProgram)) {

Старая версия Java, менее эффективная и значимая:

if (!Arrays.asList(program1, program2, program3).contains(requiredProgram)) {
...