Java密码检查、代码修改 密码应至少包含8个字符。 密码应包括数字和字母。 不允许使用特殊字符。
此代码的输出总是无效的密码 应该修改什么以获得正确的输出Java密码检查、代码修改 密码应至少包含8个字符。 密码应包括数字和字母。 不允许使用特殊字符。,java,Java,此代码的输出总是无效的密码 应该修改什么以获得正确的输出 import java.util.*; import java.lang.String; import java.lang.Character; public class password { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.pri
import java.util.*;
import java.lang.String;
import java.lang.Character;
public class password {
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() < 8) {
return false;
} else {
for(int i = 0; i <= password.length() - 1; i++) {
char c = password.charAt(i);
if (!Character.isLetter(c) | !Character.isDigit(c)) {
return false;
}
}
}
return true;
}
}
在执行OR语句时,代码中只有一个|。应该是| |。昨天我被同样的问题难住了一个小时:l是位运算符,|是逻辑运算符。此外,逻辑也有问题。字符不能同时是字母和数字,因此此条件始终为真。试用&&
|是位or,| |是逻辑or。你应该知道区别 但要这样做:
if(!Character.isLetter(c) && !Character.isDigit(c))
return false;
=>如果字符不是字母或数字返回false我觉得我应该在您的方法中提到一些错误,因为这可能有助于节省您将来的时间 如果您的方法有效,则会有一个循环,循环遍历字符串中的所有字符。这是正确的方法,所以你清楚地知道你需要做什么来实现目标 然而,从逻辑上讲,这个方法接下来要做的事情如下 获取字符串中的第一个字符 检查字符是数字还是字符 如果该字符不是数字或字符,则返回false 如果第一个字符不是字符或不是数字,您的方法将失效。理性地说,你的想法是正确的,但字母不是数字,反之亦然 假设第一个字母是“A”-它不是一个数字,所以返回false。 如果第一个字符是“1”-它不是一个字母,那么返回false 如您所见,如果只输入数字或字母,将运算符更改为&&将停止程序失败,但如果添加任何非字母数字值,将返回false 如果需要强制执行至少一个数字和至少一个数字,则必须在迭代字符串时存储字符串中的数字和字符数 有两个变量,一个用于存储总位数,另一个用于存储字符数,并在遍历字符串时递增 如果找到的总位数大于零,且找到的字母总数大于零,则您的密码有效
import java.util.*;
import java.lang.String;
import java.lang.Character;
public class password {
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()<8) {
return false;
} else {
int dCount = 0;
int cCount = 0;
for (int i=0; i<=password.length()-1; i++) {
char c=password.charAt(i);
if(Character.isLetter(c) {
cCount++;
}
if(Character.isDigit(c)) {
dCount++;
}
}
return dCount > 0 && cCount > 0;
}
}
这不会解决实际问题这不会解决实际问题problem@SamiKuhmonen只是忽略了这一点。修复了在调试器中逐行检查代码的问题。想想逻辑。检查您调用的返回函数。你会找到的。回答:你的程序应该被修改以获得正确的输出。如果我这样做,它会显示有效的密码,即使它只是字母,甚至只是数字。啊,你需要两者的组合吗?
import java.util.*;
import java.lang.String;
import java.lang.Character;
public class password {
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()<8) {
return false;
} else {
int dCount = 0;
int cCount = 0;
for (int i=0; i<=password.length()-1; i++) {
char c=password.charAt(i);
if(Character.isLetter(c) {
cCount++;
}
if(Character.isDigit(c)) {
dCount++;
}
}
return dCount > 0 && cCount > 0;
}
}