【问题标题】:Java code Check Password for Letter and Digit?Java代码检查字母和数字的密码?
【发布时间】:2011-06-20 23:58:52
【问题描述】:

编辑--版本 第一篇文章是 confusamagin。我的任务是创建一个密码提示程序。需要检查密码以查看它是否确实包含至少一个数字和一个字母。密码长度也必须在 6 - 10 之间。

我的问题是试图弄清楚如何查看密码是否存在数字和字母。在检查密码区域,我不确定从哪里开始。我不确定如何查看它是否有一个字母和一个数字。我知道该怎么做,或者使用 for 语句来计数和检查,但它所做的只是检查它是否包含所有字母或所有数字。

以下是我目前所拥有的......

import java.util.Scanner;

class Password {

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

//------ENTER A USERNAME
        System.out.println("Welcome please enter your username and password.");
        System.out.print("Username >>");
        input.nextLine();


//------PASSWORD AUTHENTICATION BEGIN       
        String password = enterPassword();
            while ( !checkPassword(password) ) {
            System.out.println("Password must be 6 - 10 characters long!"); 
            password = enterPassword();
            }

//------PASSWORD VERIFY
        String passwordverify = enterPassword();
        while (!password.equals(passwordverify)){
            System.out.println("ERROR - Passwords DO NOT MATCH Re-Enter Passwords Again");
            password = enterPassword();

        }

//------ACCEPT PASSWORD     
        System.out.println("Username and Password Accepted!");

        }


//--ENTER PASSWORD STATEMENT
    public static String enterPassword(){
        String password;
        Scanner input = new Scanner(System.in);
        System.out.print("Password >>");
        password = input.nextLine();
        return password;
        }

//--BOOLEAN CHECK PW    
    public static boolean checkPassword(String password){
        int length;
        length = password.length();
            if (length < 6 || length > 11){
            return false;
            }
                    for (int i = 0; i < password.length();i++){
        if (!Character.isLetter(password.charAt(i)))
        return false;
            }           
            return true;
        }

}

【问题讨论】:

  • @jzd:标题是赠品(虽然我同意正文中的某个地方应该有问题)
  • @spender,标题给出了提示,但有几个循环和逻辑检查。这个问题非常模糊。很快就发现了代码中的几个问题。
  • 同意含糊其辞。我的错。我现在清理了这一切。得到了我想做的事情,但它并没有成为一项协议。在上面重新发布

标签: java authentication passwords


【解决方案1】:

有两件事不对。

  1. 您对第一个非字母的字母检查失败。您的数字检查也会发生同样的事情。例如,如果每个字符都是非字母,您只想拒绝。所以逻辑错误。

  2. 您有三个循环。坏主意,因为如果您通过一次长度检查,就永远不会再次检查它。考虑一下如果有人输入会发生什么:12345678。长度可以,但没有字母。好的,现在输入:a1。长度未再次检查。

【讨论】:

  • 我也会使用 do...while 来避免做任何事情两次。
【解决方案2】:

checkPasswordLettercheckPasswordDigit 仅在所有字符分别为字母/数字时才会返回 true。这是你的意思吗?

【讨论】:

  • 不,这不是我的意思,感谢您指出这一点。我现在必须想出一种方法来检查它们是否有数字或字母。仍然挂断,因为我的书没有提供这样做的方法。
【解决方案3】:
  public static boolean checkPasswordLetter(String password){
            for (int i = 0; i < password.length();){
            if (!Character.isLetter(password.charAt(i))){
                return false;
                }
            }
        return true;
        }

这里你没有增加变量 i ,需要 for i++ 或者如果不是字母,那么你的循环将永远持续下去,并且在 checkPasswordDigit 中

【讨论】:

  • 好收获。完全错过了。
  • 我明白你的意思,我通过在 for 中添加 i++ 来清理它。但进一步调查这不是我想要做的,因为它检查整个字符串是字母。
【解决方案4】:

首先...并不是说 Java 没有循环或检查布尔值。 Java 正在做你告诉它做的事情。

现在,您想要做的事情与您正在做的事情不同。

你需要做的是:

public static void main(String[] args) {
    // ...
    String password = enterPassword();
        while ( !isPasswordValid(password) ) {            
        password = enterPassword();
    }
    System.out.println("Username and Password Accepted!");
}

public static boolean isPasswordValid(String password) {
    // return true if and only if password:
    // 1. has 6-10 characters
    // 2. contains at least one digit
    // 3. contains at least one character
    // print messages accordingly
}

【讨论】:

  • +1 我喜欢伪代码方法,以免泄露任务。
  • 酷爱它。这一点帮助很大。实际上,我现在确实将其分别更改为 checkPassword。
【解决方案5】:
import java.util.Scanner;

import java.util.*;
import java.lang.String;
import java.lang.Character;

public class CheckingPassword 
{
    public static void main(String[] args) 
        {
        Scanner input = new Scanner(System.in);
        System.out.print("Please enter a Password: ");
        String password = input.next();
        if (isValid(password)) {
            System.out.println("Valid Password");
        } else {
            System.out.println("Invalid Password");
        }
    }
    public static boolean isValid(String password) {
        if (password.length() < 9) { 
            return false;
        }

else {
        char c = 0 ;  
              int  count=0;
              System.out.println(password.length());
        for (int i = 0;i<=password.length()-1; i++) 
                {
c = password.charAt(i);
System.out.println(c);
if (!Character.isLetterOrDigit(c))
{       
return false;        
}
else if (Character.isDigit(c))
{   
count++;    
if(count==3)
{
return false;
}
}
}
                return true;
}
                }

                }

【讨论】:

    【解决方案6】:
    import java.util.Scanner;
    public class password{
    public static void main(String[] args) {
      // Create a Scanner
      Scanner input = new Scanner(System.in);
    
         // Prompt the user to enter a string
     System.out.print("Enter a password ") ;
      String s = input.nextLine();
    
    
     if(isValid(s))
    System.out.println(s + " is a valid password");
    else
    System.out.println(s + " is not a valid password");
    }
    
    public static boolean isValid(String s ) 
    {
    
      int i = 0,j=0;
    
    
     if(s.length()>=8)
         {
        for(i=0;i<s.length();i++)
       {
         //if(Charcter.isLetter(s.charAt(i))||Digit.isLetter(s.charAt(i)))
       if (Character.isLetterOrDigit(s.charAt(i)))
     {
        if(Character.isDigit(s.charAt(i)))
        j++;
     }
      }
        }
      else
       return false;
        if(j>=2)   
         return true;
           return false;
         } }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      • 2017-09-24
      • 2021-11-04
      • 2017-03-09
      相关资源
      最近更新 更多