几周前我刚刚开始使用java,我正在尝试制作一个程序来验证密码是否至少为10个字符,每个至少有一个:大写,小写,数字,并且只是字母数字字符。
以下是我到目前为止的代码。它实际上比英文代码更英文,但我想要做的是在一个布尔下运行几个循环(至少这是我认为我正在做的)。你能帮助我理解布尔运算是如何工作的,以及是否有可能在一个布尔值下测试几个条件,正如我在下面尝试的那样?
谢谢!
public class validatingPassword
{
public static void main(String[] args)
{
String password= isSecurePassword("testcase");
System.out.println(isSecurePassword);
}
public static boolean isSecurePassword(String password)
{
password.charAt(x);
int lengthPassword= password.length();
if (lengthPassword < 10);
return false;
for (int x = 0; x < lengthPassword; x++)
{
if ('A' <=x && x <= 'Z');}
else if
return false;
for (int x = 0; x< lengthPassword; x++)
{
('a' <=x && x <= 'z'); }
else if
return false:
for (int x = 0; x < lengthPassword; x++)
{
('0' <=x && x <= '9');}
return true;
}
else if
{
x++;
return false;
}
}
}
答案 0 :(得分:1)
我只是给出了未记录的正确代码。因为我认为你有正确的想法,但缺少一些Java语法。您可以通过所有命令单步调试代码。
public class ValidatingPassword {
public static void main(String[] args) {
String[] passwords = { "testcase", "T3stCas3%45" };
for (String password : passwords) {
System.out.println(password + " : " + isSecurePassword(password));
}
}
/**
* Is this a secure password?
* At least 10 characters, at least one capital letter, one small
* letter and one digit.
*
* @param password never null.
* @return whether password is secure.
*/
public static boolean isSecurePassword(String password) {
int lengthPassword = password.length();
if (lengthPassword < 10) {
return false;
}
boolean hasCapital = false;
boolean hasSmallLetter = false;
boolean hasDigit = false;
for (int i = 0; i < lengthPassword; i++) {
char ch = password.charAt(i);
if ('A' <= ch && ch <= 'Z') {
hasCapital = true;
}
if ('a' <= ch && ch <= 'z') {
hasSmallLetter = true;
}
if ('0' <= ch && ch <= '9') {
hasDigit = true;
}
}
return hasCapital && hasSmallLetter && hasDigit;
}
}
答案 1 :(得分:0)
是的,可以嵌套布尔语句......但是你的护腕都搞砸了。
你有:
for (int x = 0; x < lengthPassword; x++){
if ('A' <=x && x <= 'Z');}
else if {
return false;
应该看起来更像:
for (int x = 0; x < lengthPassword; x++)
{
if ('A' <=x && x <= 'Z') {
// Do nothing
}
else {
return false;
}
}
如果你使用else,它会期望一个条件语句,所以你只想使用需要在for语句中的else以及if。
你也不需要增加x,因为这是由for循环完成的。
您也可以将它们全部合并到一个for语句中,而不是将每个语句组合在一起:
for (int x = 0; x < lengthPassword; x++)
{
if ('A' <=x && x <= 'Z') {
// Do nothing
}
else {
return false;
}
if ('a' <=x && x <= 'z') {
// Do nothing
}
else {
return false;
}
if ('0' <=x && x <= '9') {
// Do nothing
}
else {
return false;
}
}
我甚至不确定你要做的事情是否会奏效。如果我试图这样做,我会用正则表达式来做。
使用缩进确实有帮助。