Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java密码检查、代码修改 密码应至少包含8个字符。 密码应包括数字和字母。 不允许使用特殊字符。_Java - Fatal编程技术网

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