这是我明天为期中考试做的一些练习。我似乎找不到我的代码的问题,这就是问题所在:
当我们的许多信息存储在网上时,拥有一个安全的密码是非常重要的。按照以下规则编写一个验证新密码的程序:
•密码长度必须至少为8个字符。
密码必须至少有一个大写字母和一个小写字母
• 密码必须至少有一位数字。
编写一个要求输入密码的程序,然后再次要求确认密码。如果密码不匹配或未满足规则,请再次提示。您的程序应包含一种检查密码是否有效的方法。
代码如下:
import java.util.Scanner;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author HP Laptop
*/
public class PasswordValidation {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Please enter password : ");
String password = in.nextLine();
System.out.print("Please re-enter the password to confirm : ");
String confirm = in.nextLine();
boolean condition;
condition = isValid(password);
while (!password.equals(confirm) && (!condition)) {
System.out.println("The password is invalid");
System.out.print("Please enter the password again : ");
String Password = in.nextLine();
System.out.print("Please re-enter the password to confirm : ");
String Confirm = in.nextLine();
}
if (isValid(password)) {
System.out.println("The password is valid");
/*} else {
System.out.println("The password is not valid");
System.out.print("Please enter the password again : ");
String Password = in.nextLine();
System.out.print("Please re-enter the password to confirm : ");
String Confirm = in.nextLine();
}*/
}
}
public static boolean isValid(String password) {
if (password.length() < 8) {
return false;
} else {
for (int i = 0; i < password.length(); i++) {
if (Character.isUpperCase(password.charAt(i))) {
}
}
for (int b = 0; b < password.length(); b++) {
if (Character.isLowerCase(password.charAt(b))) {
}
}
for (int c = 0; c < password.length(); c++) {
if (Character.isDigit(password.charAt(c))) {
}
}
return true;
}
}
}
错误是:
我输入一个少于8位数的名字,当它不是有效的时候,它会说它是有效的,当它是正确有效的时候,它不会打印出它是有效的。
代替
while (!password.equals(confirm) && (!condition)) {
你想要
while (!password.equals(confirm) || (!condition)) {
由于如果 isValid(password) 返回 false
,或者确认的密码与原始键入的密码不同,则密码无效。
如果password.equals(确认)
,即使条件为false(由于密码太短),您当前的代码也不会通过time条件。
另外,你的while循环要调用< code > condition = is valid(password);再次输入密码和确认密码后。否则,while循环将永远不会退出。
所以要么写:
condition = isValid(password);
while (!password.equals(confirm) || (!condition)) {
System.out.println("The password is invalid");
System.out.print("Please enter the password again : ");
String Password = in.nextLine();
System.out.print("Please re-enter the password to confirm : ");
String Confirm = in.nextLine();
condition = isValid(password);
}
或者更优雅地说:
while (!password.equals(confirm) || !isValid(password)) {
System.out.println("The password is invalid");
System.out.print("Please enter the password again : ");
String Password = in.nextLine();
System.out.print("Please re-enter the password to confirm : ");
String Confirm = in.nextLine();
}
这里可能存在一些问题,但最突出的是:
while (!password.equals(confirm) && (!condition)) {
如果我键入密码“abc”并确认为“abc”,那么< code >!password.equals(confirm)为< code>false。我想你希望这是:
while (!password.equals(confirm) || (!condition)) {
因为您希望在密码不匹配或无效时重复此行为。
这也是不正确的:
condition = isValid(password);
while (!password.equals(confirm) && (!condition)) {
System.out.println("The password is invalid");
System.out.print("Please enter the password again : ");
String Password = in.nextLine();
System.out.print("Please re-enter the password to confirm : ");
String Confirm = in.nextLine();
}
condition = isValid(password);
while (!password.equals(confirm) && (!condition)) {
System.out.println("The password is invalid");
System.out.print("Please enter the password again : ");
password = in.nextLine(); // <-- HERE
System.out.print("Please re-enter the password to confirm : ");
confirm = in.nextLine(); // <-- HERE
condition = isValid(password); // <-- HERE
}
@user3821797:我稍微修改了你的isValid方法。仔细检查一下,确保你理解我做了什么。如果您有任何疑问,请在此处发表评论,我会为您提供帮助。
public static boolean isValid(String password) {
Boolean atleastOneUpper = false;
Boolean atleastOneLower = false;
Boolean atleastOneDigit = false;
if (password.length() < 8) { // If its less then 8 characters, its automatically not valid
return false;
}
for (int i = 0; i < password.length(); i++) { // Lets iterate over only once. Saving time
if (Character.isUpperCase(password.charAt(i))) {
atleastOneUpper = true;
}
else if (Character.isLowerCase(password.charAt(i))) {
atleastOneLower = true;
}
else if (Character.isDigit(password.charAt(i))) {
atleastOneDigit = true;
}
}
return (atleastOneUpper && atleastOneLower && atleastOneDigit); // Return true IFF the password is atleast eight characters long, has atleast one upper, lower and digit
}
5.1 创建密码输入界面 5.1.1 示例代码 创建密码输入界面时,这里描述了安全性方面需要考虑的一些要点。 这里仅提及与密码输入有关的内容。 对于如何保存密码,未来会发布另一篇文章。 要点: 输入的密码应该被屏蔽显示(用*显示) 提供以纯文本显示密码的选项。 警告用户以纯文本显示密码有风险。 要点:处理最后输入的密码时,请注意以下几点以及上述要点。 如果在初始界面中有最后输入的密码,则将黑点的固
在kubuntu上用存储的密码启动pgAdmin III,每次连接到数据库时都会要求输入密码,并给出错误“连接到服务器的错误:fe_sendauth:没有提供密码”。它忽略存储密码字段中的复选框。
我试图检查密码,我加密之前,但我得到一个例外,我不知道为什么。 这里是我用来加密密码的方法: 加密工作成功。 此处为错误日志: 有什么想法吗?感谢你的帮助.
问题内容: 当开发人员想要保护自己的Web应用程序安全时,Spring Security非常有用。 但是,如何创建帐户呢?和“忘记密码”?大多数登录页面都具有这些链接以及用户名和密码字段。Spring的默认登录页面没有这些链接…在很好的情况下,它可以支持“记住我” … Spring是否支持创建帐户,忘记密码和更改密码这些流程?如果答案是肯定的,您能给我指出一些文件吗? 我已经搜索了此问题,但找不到
本文向大家介绍写一个密码默认星号,但可以查看密码的输入框相关面试题,主要包含被问及写一个密码默认星号,但可以查看密码的输入框时的应答技巧和注意事项,需要的朋友参考一下
我正在尝试用VBA锁解锁excel文件。我用默认密码将文件锁定在代码中,并将此密码给其他文件中的用户。总是相同的密码,所以没有必要输入它由用户,我给他的文件锁定在一开始。 但我没有任何办法知道“密码是否好”。 谢谢你的帮助,抱歉我的英语!