【问题标题】:Java password checking, code modificationJava密码检查、代码修改
【发布时间】:2017-09-24 23:15:42
【问题描述】:
  • 密码至少应包含 8 个字符。
  • 密码应由数字和字母组成。
  • 不允许使用特殊字符。

此代码的输出始终是“无效密码” 应该修改什么以获得正确的输出?

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;
    }
}

【问题讨论】:

  • 在调试器中逐行检查代码。想想逻辑。检查您调用的函数返回什么。你会找到的。
  • 回答:你的程序应该被修改以获得正确的输出。

标签: java


【解决方案1】:

|是按位或,||是逻辑或。你应该知道区别。

尽管如此:

if(!Character.isLetter(c) && !Character.isDigit(c))
           return false;

=>如果字符不是字母也不是数字返回false

【讨论】:

  • 如果我这样做,它会显示有效密码,即使它只有字母,甚至只有数字。
  • 啊,你需要两者结合吗?
【解决方案2】:

在 if 语句中执行 OR 时,您的代码中只有一个 |。它应该是 || 。昨天我被同一件事难住了一个小时:l

【讨论】:

  • 这不能解决实际问题
【解决方案3】:

| 是位运算符,|| 是逻辑运算符。另外,逻辑有问题。 Character 不能同时是一个字母数字,所以这个条件总是true。尝试使用&amp;&amp;

if(!Character.isLetter(c) && !Character.isDigit(c))
    return false;

【讨论】:

  • 这不能解决实际问题
  • @SamiKuhmonen 只是忽略了这一点。现已修复
【解决方案4】:

我觉得我应该在你的方法中提到一些错误,因为它可能会帮助你在未来节省时间。

如果你的方法isValid,你有一个循环遍历字符串中的所有字符。这是执行此操作的正确方法,因此您清楚地知道实现目标需要做什么。

但是,从逻辑上讲,这个方法接下来要做的事情如下。

  1. 获取字符串中的第一个字符
  2. 检查字符是数字还是字符
  3. 如果该字符不是数字或字符,则返回 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;
   }    
} 

【讨论】:

    猜你喜欢
    • 2012-11-20
    • 2021-07-13
    • 2014-02-09
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    相关资源
    最近更新 更多