Простая JAVA: проблема проверки пароля - PullRequest
1 голос
/ 13 ноября 2009

У меня есть простая проблема, которая говорит:

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

Мне нужна помощь в заполнении этого кода. У меня есть этот псевдокод, который я не могу найти в коде Java:

print "enter new password"
input newPassword
digitCounter =0
letterCounter = 0
for I = 0 to newPassword.length() by 1
    c = newPassword.charAt(i)
    if c is a digit
        increment digitCounter
    else if c is a letter
        increment letterCounter
    endif
endFor
if newPassword.length() >= 6 and digitCounter > 0 and letterCounter > 0
    print "the password is valid"
else
    print " password rejected, must be at least 6 characters long and be a mix of letters and digits "
endif

+++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++

Пока все, что у меня есть, это для кода Java:

import java.util.Scanner;

public class Password 
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);

        String thePassword;

        int len, i, letterCounter = 0, digitCounter = 0;
        char c;

        Len = thePassword.length();

        System.out.print("Enter the password: ");
        thePassword = in.nextLine();

        for (i = 0,i = len, )
        {
            c = in.charAt(1);

            if ()
        }

    }
}

Ответы [ 5 ]

2 голосов
/ 18 декабря 2010
impot javax.swing.JOptionPane;
class PasswordDemo{
  public static void main(String[] agrs){
     String pass = "abcdef";
     String right = "Success!";
     String wrong = "Failed to login";
     String input = JOptionPane.showInputDialog("Enter the password to login: ");

     do{
        JOptionPane.showMessageDialog(null,wrong);
        input = JOptionPane.showInputDialog("Enter the password to login: ");
     }while(!input.equals(pass));
     //when login successfully
     JOptionPane.showMessageDialog(null,right);
   }
}
2 голосов
/ 13 ноября 2009

Посмотрите на Character.isDigit() и Character.isLetter() для проверки символов:

Если вы хотите использовать String.charAt() для получения символов вашей строки, вы можете сделать цикл for следующим образом:

for (int i = 0;i < s.length();i++) {
    char c = s.charAt(i);
    //Check things about c
}

Хотя в Java 1.5 введен цикл For-Each , который будет автоматически зацикливаться на массивах следующим образом:

for (char c : s.toCharArray()) {
    //Check things about c
}
0 голосов
/ 15 ноября 2009

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

public class Password {
    public static void main(String[] args) {
        String thePassword = args[0];
        int passLength = thePassword.length();
        boolean hasLetters = false;
        boolean hasDigits = false;
        boolean hasSomethingElse = false;

        for (int i=0; i < passLength; i++) {
            char c = thePassword.charAt(i);
            if(Character.isLetter(c)) hasLetters = true;
            else if(Character.isDigit(c)) hasDigits = true;
            else hasSomethingElse = true;
        }

        if (hasLetters && hasDigits && !hasSomethingElse && (passLength >= 6)) {
            System.out.println("Password is correctly formatted");
        } else {
            System.out.println("Password is not correctly formatted");
        }
    }
}
0 голосов
/ 13 ноября 2009

Несколько быстрых советов:

  • Ваш алгоритм псевдокода неверен. Он будет правильно проверять, что строки действительно должны иметь длину не менее 6 символов, но не отменяет действие паролей со странными символами в них (например, ~%). Исходя из постановки задачи, представляется неявным, что предложение ", состоящее из комбинации букв и цифр " означает, что оно состоит из только из них. В этой части, как уже упоминали другие, вы можете использовать встроенные методы классов String или Character, такие как String.charAt(), Character.isDigit() и Character.isLetter().

  • делает привычкой объявлять вещи в самое позднее возможное время (то есть непосредственно перед тем, как его использовать). В вашем примере у вас есть String thePassword, затем 2 другие строки, а затем вы присваиваете что-то thePassword. Вместо этого напишите это непосредственно как String thePassword = in.nextLine(). Это поможет сделать код менее загроможденным и легким для чтения. То же самое для других ваших объявлений (char c, int len и т. Д.).

  • попробуйте использовать расширенный цикл for, если можете, чтобы избежать необходимости определять длину и определять, где остановиться (вероятность ошибок). В вашем примере ваш цикл может быть что-то вроде for (char c : thePassword.toCharArray()). Если вы еще не говорили об этом цикле в своем классе, вам не нужно его использовать, и вы должны знать, как работает простой цикл for, но это только предположение. В вашем примере кода ваш цикл не имеет смысла, поэтому я бы посоветовал вам прочитать циклы.

0 голосов
/ 13 ноября 2009

Я бы проверил, что Regex \ d (любая цифра) и Regex [a-z] (любая буква) совпадают со строкой. А затем проверьте длину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...