Java 我将如何浓缩这些方法?
我不知道如何用一个Java 我将如何浓缩这些方法?,java,Java,我不知道如何用一个isValidPassword方法解决这个问题,所以我把它分成3个部分,让它工作起来。有人能告诉我如何使用我写的代码吗?如果可能的话,可以把它浓缩一下吗 创建程序密码,提示用户输入密码并确定密码是否有效。应该有一个静态方法isValidPassword,用于验证密码(字符串)并返回true或false。用户只有三次尝试输入有效密码。 有效密码遵循以下三条规则: - Must have at least eight characters. - Must contain ONLY
isValidPassword
方法解决这个问题,所以我把它分成3个部分,让它工作起来。有人能告诉我如何使用我写的代码吗?如果可能的话,可以把它浓缩一下吗
创建程序密码,提示用户输入密码并确定密码是否有效。应该有一个静态方法isValidPassword
,用于验证密码(字符串)并返回true或false。用户只有三次尝试输入有效密码。
有效密码遵循以下三条规则:
- Must have at least eight characters.
- Must contain ONLY letters and digits.
- Must contain at least two digits.
为程序使用对话框。您必须为此程序使用字符串和字符类。您不能使用正则表达式。这个程序只需要运行一次
import javax.swing.JOptionPane;
public class Password {
public static void main(String[] args) {
int retryCount = 0;
while (retryCount < 3) {
retryCount++;
String password = JOptionPane.showInputDialog("Please Enter the Password");
if (CheckPassword(password)) {
JOptionPane.showMessageDialog(null, "Congrats! Correct Password!");
break;
}
else {
JOptionPane.showMessageDialog(null, "Sorry, Invalid Password, you tried " + retryCount + " times");
continue;
}
}
}
public static boolean CheckPassword(String password) {
if (password.length() >= 8 & CheckAlphanumeric(password) && Check2digits(password)) {
return true;
}
else {
return false;
}
}
public static boolean CheckAlphanumeric(String string) {
for (int i = 0; i < string.length(); i++) {
char x = string.charAt(i);
if (x < 0x30 || (x >= 0x3a && x <= 0x40) || (x > 0x5a && x <= 0x60) || x > 0x7a) {
return false;
}
}
return true;
}
public static boolean Check2digits(String string) {
int count = 0;
for (int i = 0; i < string.length(); i++) {
char c = string.charAt(i);
if (Character.isDigit(c)) {
count++;
}
if (count > 2) {
return true;
}
}
return false;
}
}
import javax.swing.JOptionPane;
公共类密码{
公共静态void main(字符串[]args){
int retryCount=0;
while(retryCount<3){
retryCount++;
String password=JOptionPane.showInputDialog(“请输入密码”);
如果(检查密码(密码)){
showMessageDialog(null,“恭喜!密码正确!”);
打破
}
否则{
showMessageDialog(null,“对不起,密码无效,您尝试了”+retryCount+“次”);
继续;
}
}
}
公共静态布尔校验密码(字符串密码){
if(password.length()>=8&检查字母数字(密码)和检查2数字(密码)){
返回true;
}
否则{
返回false;
}
}
公共静态布尔校验字母数字(字符串){
对于(int i=0;i=0x3a&&x0x5a&&x0x7a){
返回false;
}
}
返回true;
}
公共静态布尔Check2digits(字符串){
整数计数=0;
对于(int i=0;i2){
返回true;
}
}
返回false;
}
}
让我们快速回顾一下代码:
- 阅读java命名约定。方法名大小写相同;返回布尔值的东西应该命名为
isPasswordValid()
- 您在这里所做的实际上是一种很好的方法:您应该更喜欢许多小方法(具有很好的有意义的名称!),而不是一些大方法(其背后的东西称为“单层抽象”原则)
- 您可以阅读有关正则表达式的内容,以便进行大部分检查;尤其是检查“仅限ascii字符”是一个很好的选择!因此,即使您的作业中说“不要使用它们”;您可能想学习如何使用它们。只是为了您自己的学习进度!但是正如Kayaman指出的,该类有许多用于此类检查的静态帮助器方法;因此不需要手动实现所有这些
- 您的代码“逻辑不一致”。如果某些字符串符合某些密码规则(最小长度、最小位数),则您的代码正在验证。但您的消息暗示此代码正在检查提供的密码是否正确。;如:用户输入其密码,然后代码检查该密码是否已知并与以前存储的密码匹配。从这个意义上说:确保消息和代码内容一致
public interface PasswordValidator {
public void checkPassword(String password) throws InvalidPasswordException;
}
然后创建各种实现,例如
public class MinimumLengthValidator implements PasswordValidator {
@Override
public void checkPassword(String password) throws InvalidPasswordException {
if (password.lenght() < 8) {
throw new InvalidPasswordException("Given password is not long enough; expecting at least 8 characters");
}
}
公共类最小长度验证器实现密码验证器{
@凌驾
public void checkPassword(字符串密码)引发InvalidPasswordException{
if(password.lenght()<8){
抛出新的InvalidPasswordException(“给定的密码不够长;至少需要8个字符”);
}
}
然后,您创建这些不同验证程序类的实例;并将它们存储在某个数组中。您迭代该数组,并单独调用每个验证;当验证失败时,您会直接收到一个异常,并为用户提供一条好消息
如上所述:以上内容仅表示灵感(并且只是打印下来,所以要小心打字错误)。让我们快速回顾一下代码:
- 阅读java命名约定。方法名大小写相同;返回布尔值的东西应该命名为
isPasswordValid()
- 您在这里所做的实际上是一种很好的方法:您应该更喜欢许多小方法(具有很好的有意义的名称!),而不是一些大方法(其背后的东西称为“单层抽象”原则)
- 您可以阅读有关正则表达式的内容,以便进行大部分检查;尤其是检查“仅限ascii字符”是一个很好的选择!因此,即使您的作业中说“不要使用它们”;您可能想学习如何使用它们。只是为了您自己的学习进度!但是正如Kayaman指出的,该类有许多用于此类检查的静态帮助器方法;因此不需要手动实现所有这些
- 您的代码“逻辑不一致”。您的代码正在验证某个字符串是否符合某些密码规则(最小长度、最小位数)。但您的消息暗示此代码正在检查提供的密码是否正确;如:用户输入其密码,然后
public class Demo { private final int passwordAttempts = 3; private int countAttempts = 0; private String password; private int digitCounter = 0; public Demo() { init(); } public static void main(String[] args) { new Demo(); } private String checkPassword(String pass) { if (pass.length() >= 8) { if (StringUtils.isAlphanumeric(pass)) { char[] toCharArray = pass.toCharArray(); for (int i = 0; i < toCharArray.length; i++) { char check = toCharArray[i]; if(Character.isDigit(check)){ digitCounter++; } } if (digitCounter >= 1) { return "success"; }else{ return "digit"; } }else{ return "alphanumeric"; } }else{ return "length"; } } private void init() { while (countAttempts < passwordAttempts) { password = JOptionPane.showInputDialog("Please Enter the Password"); digitCounter = 0; String passwordResult = checkPassword(password); if (passwordResult.equals("success")) { JOptionPane.showInputDialog("yes you entered correct password..."); } else if(passwordResult.equals("length")){ JOptionPane.showInputDialog("password must contain atleast 8 characters..."); }else if(passwordResult.equals("alphanumeric")){ JOptionPane.showInputDialog("only alphanumeric password accept..."); }else if(passwordResult.equals("digit")){ JOptionPane.showInputDialog("password must contain atleast two digits..."); } countAttempts++; } } }
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.0</version> </dependency>