Как вернуть что-то, когда ВСЕ 3 условия ДОЛЖНЫ быть выполнены в операторе if - PullRequest
0 голосов
/ 21 октября 2019

Слабый пароль определяется как пароль длиной менее восьми символов. Средний пароль определяется как пароль длиной восемь или более символов и имеющий либо цифру, либо «другой» символ. Надежный пароль определяется как пароль длиной восемь или более символов и имеющий как цифру, так и символ «другой».

Как я могу вернуть что-либо, когда ДОЛЖНЫ быть выполнены ВСЕ 3 условия? Мой слабый пас - единственное, что печатается правильно.

public String test() {
//length is user input String which is already converted to into int
//digit and other are booleans,
    if (length < 8)
       return weak pass;
    if ((length <=8) || (length <=8 && digit==true) || (length<=8 && other==true))
       return medium pass
    if (length <= 8 && digit==true && other==true)
       return strong pass;
    return null;
}

Ответы [ 3 ]

2 голосов
/ 21 октября 2019

Должно быть,

public String test() {
//length is user input String which is already converted to into int
//digit and other are booleans,
    if (length < 8)
       return weak pass;
    if (length >= 8 && digit && other)
       return strong pass;
    if (length >= 8 && (digit || other))
       return medium pass
    return null;
}

Сокращенная версия,

public String test() {
    if (length < 8) {
        return "weak";
    } else {
        if (digit && other) {
           return "strong";
        }
        if (digit || other) {
           return "medium";
        } 
    }
    return null;
}

Еще больше, сокращенная

public String test() {
    return length < 8 ? "weak" : (digit && number) ? "strong" : (digit || number) ? "medium" : null;
}
1 голос
/ 21 октября 2019

Сначала переведите каждое письменное утверждение в логическое утверждение:

Слабый пароль определяется как пароль длиной не более восьми символов.

length < 8

Средний пароль определяется как пароль длиной восемь или более символов и имеющий либо цифру, либо «другой» символ.

length >= 8 && (digit || other)

Надежный пароль определяется какпароль длиной восемь или более символов, состоящий как из цифры, так и из другого символа.

length >= 8 && digit && other

Затем подумайте о порядке, в котором вы хотите их проверить. Сначала проверьте самый сильный, затем средний, а затем слабый:

public String test() {
    if (length >= 8 && digit && other)
        return strong;

    if (length >= 8 && (digit || other))
        return medium;

    if (length < 8)
        return weak;

    return null;
}

Обратите внимание, что существует один случай, не охваченный данными ограничениями: пароль длиной 8 или более, без цифры и без «другой»" характер. Для этого случая null возвращается.

0 голосов
/ 21 октября 2019

Есть пара проблем.

  • Вам нужны двойные кавычки вокруг этих строковых литералов "weak pass" и так далее.
  • откуда вы берете длину? Вы можете передать строку для проверки в качестве параметра, а затем посмотреть длину. Вот так:
public String test(String password) 
{ int length = password.length;

  if (length < 8) 
    etc...
  • Что такое цифра? Это метод или переменная? Я не знаю, собирались ли вы опубликовать псевдокод, но его синтаксис недопустим.

После этого вы можете прочитать его. В первом операторе if вы проверяете, если длина меньше 8, и возвращаете "weak pass", если это так. Когда вы доберетесь до второго if, вы уже знаете, что длина> = 8, поэтому вам больше не нужно тестировать. Вы можете, если хотите прояснить другим разработчикам, для чего вы тестируете, но это не нужно и может добавить беспорядок, который вас смущает.

Итак, вы написали выражение ((length <=8) || (length <=8 && digit) || (digit <=8 && other)) там. Вы можете удалить <, потому что они никогда не соответствуют действительности. Если это меньше 8, вы уже вернули что-то в свой первый if. Итак, теперь у вас есть (length==8 || (length ==8 && digit) || (digit <=8 && other))

Я не уверен, действительно ли вы имели в виду digit <=8 там или length <=8. Я предполагаю, что length <= 8, так что тогда (length==8 || (length == 8 && digit) || (length == 8 && other))

Если первая часть этого условия length==8 истинна, результат верен. Вот как работает логическое значение ИЛИ. Таким образом, это означает, что второе и третье условия больше не нужны, потому что они будут оцениваться, только если length != 8, и в этом случае ни один из (length == 8 && digit) или (length == 8 && other) не является истинным.

Последнее if оператор (length <= 8 && digit && other) требует, чтобы length <= 8. Однако, если это так, вы уже вернули значение в первом или втором операторе if, поэтому тест в последнем if никогда не будет верным. Вы можете пропустить это.

В итоге, у вас есть вот что: if (length < 8) return weak pass; if (length == 8) return medium pass return null;

Я думаю, что вы, возможно, захотите прочитать о булевой логике. Вы можете обнаружить, что or и and не имеют в виду то, что, по вашему мнению, они делают. На общем языке они часто используются взаимозаменяемо, но в булевой логике они имеют очень точное значение.

...