2013-11-24 2 views
-2

Это попытка проверки пароля. Я хотел проверить, имеет ли пароль длиной не менее 8 символов. Если хотя бы 1 символ - это верхний и нижний регистр. Я также хотел проверить, является ли хотя бы один символ не буквенно-цифровым. Я сдаюсь на сегодня. Я отправляю его в stackoverflow, потому что мне интересно, есть ли люди, которые могли бы помочь мне в этом. Я еще не знаю, как быть чрезмерно конкретным с техническими деталями Java о том, почему работает моя программа, и я подозреваю, что если бы я это сделал, я бы не опубликовал ее на stackoverflow.com. Я придерживаюсь того же мнения о том, что java - ужасный язык. Я вынужден, однако, завершить 1 класс java в моем колледже, поэтому я практиковал. Я до сих пор не знаком с этим языком. Ниже моя программа.Проверка пароля. Проблемы с методами проверки пароля

import java.util.Scanner; 

public class PasswordChecker { 
    public static void main(String[] args) { 
    String Password = ""; 
    Scanner input = new Scanner(System.in); 
    System.out.println("Enter a password to be checked"); 
    Password = input.next(); 
    PassChkr(Password); 
    } 

    private static boolean PassChkr(String a) { 
    boolean safe = false; 
    boolean unsafe = true; 

    boolean hasLowercase = !a.equals(a.toUpperCase()); 
    boolean hasUppercase = !a.equals(a.toLowerCase()); 

    // Does work 
    if (a.length() >= 8) { 
     safe = true; 
     System.out.println("Your password is at least 8 characters long"); 
     // Doesn't work..  
    } 

    for (int i = 0; i < a.length(); i++) { 
     if (hasLowercase == false) { 
     safe = true; 
     System.out.println("Your password has a least 1 lowercase character"); 
     } 

     if (hasUppercase == false) { 
     safe = true; 
     System.out.println("Your password has at least 1 uppercase character"); 
     } 
    } 

    // for (int i = 0; i < a.charAt(0); i++) { 
    // if (Character.isLetterOrDigit(i) == false) 
    //  safe = true; 
    // System.out.println("Your password has at least 1 non letter or digit"); 
    // 
    return false; 
    } 
} 
+2

Первого правила программирования, независимо от языка является: прочитать сообщение об ошибке. Если вы хотите, чтобы мы решили проблему, вы могли бы хотя бы сказать нам, в чем проблема. Java не мешает вам это делать, не так ли? –

+0

У меня возникли проблемы с не-буквенно-цифровым контролером, который прокомментирован в этом, а также строка, которая проверяет, имеет ли она 1 строчную и прописную букву. Я думал, это будет очевидно. Прости. – Espryon

+0

* У меня проблемы *: какие проблемы? –

ответ

-1

я бы сделать что-то вроде:

for (int i = 0; i < a.length(); i++) { 
    if (Character.isLowerCase(a.charAt(i))) { 
    boolean lSafe = true; 
    } 

    if (Character.isUpperCase(a.charAt(i))) { 
    boolean uSafe = true; 
    } 
} 
if(lSafe){ 
    System.out.println("Your password has a least 1 lowercase character"); 
} 
if(uSafe){ 
    System.out.println("Your password has a least 1 lowercase character"); 
} 

и я бы поцарапать:

boolean safe = false; 
boolean unsafe = true; 

boolean hasLowercase = !a.equals(a.toUpperCase()); 
boolean hasUppercase = !a.equals(a.toLowerCase()); 

не может гарантировать, что это лучший способ, но он должен работать.

+0

одно слово 'scope' –

+0

Второе: стандартные соглашения об именах. –

+0

изменен только для вас JB – mig

3

Я бы разорвать эту проблему вверх в трех тестов (containsUpper, containsLower и containsNonAlpha) Я хотел выполнить следующую

/** 
* Return true if the input string contains an upper case 
* letter. 
* 
* @param a 
*   The input string. 
* @return True if a contains an upper case letter. 
*/ 
private static boolean containsUpper(String a) { 
    if (a == null) { 
    return false; 
    } 
    for (int i = 0; i < a.length(); i++) { 
    if (Character.isUpperCase(a.charAt(i))) { 
     return true; 
    } 
    } 
    return false; 
} 

/** 
* Return true if the input string contains a lower case 
* letter. 
* 
* @param a 
*   The input string. 
* @return True if a contains a lower case letter. 
*/ 
private static boolean containsLower(String a) { 
    if (a == null) { 
    return false; 
    } 
    for (int i = 0; i < a.length(); i++) { 
    if (Character.isLowerCase(a.charAt(i))) { 
     return true; 
    } 
    } 
    return false; 
} 

/** 
* Return true if the input string contains a non-alphanumeric 
* letter. 
* 
* @param a 
*   The input string. 
* @return True if a contains a lower case letter. 
*/ 
private static boolean containsNonAlpha(String a) { 
    if (a == null) { 
    return false; 
    } 
    for (int i = 0; i < a.length(); i++) { 
    char c = a.charAt(i); 
    if (!Character.isDigit(c) && !Character.isLetter(c)) { 
     return true; 
    } 
    } 
    return false; 
} 
+0

+1 для разделения тестов; что делает самый дидактический смысл – ljgw

+0

Разве это не избыточный b/c метода в классе символов, который проверяет оба? if (! Character.isDigit (c) &&! Character.isLetter (c)) { return true; Я этого не заметил, но на самом деле вы получили оценку на форуме помощи lol? Есть метод, который проверяет оба из них. Мне нравится разбиение проблемы, но, как указано выше, и комментарии действительно нужны? Я имею в виду, если кто-то может прочитать java и выяснить, что это значит, действительно ли нужно удлинить программу? – Espryon

+0

Вы, безусловно, можете использовать 'Character.isLetterOrDigit()' мое решение не было оптимальным (или я сделал бы один проход, а не три). –

Смежные вопросы