Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 密码验证程序问题_Java_String - Fatal编程技术网

Java 密码验证程序问题

Java 密码验证程序问题,java,string,Java,String,我试图完成我的编程任务,我必须创建一个“密码验证器”,它有1个大写字母、1个小写字母、1个数字和1个特殊字符。如果无效,它必须显示“invalid”加上它显示为false的规则。我遇到的问题不是错误消息,但我总是得到肯定的响应,加上所有违反的规则,再加上它会读取两次。这里帮不上什么忙 import java.util.Scanner; public class PasswordVerifier { public static void main(String[] args) {

我试图完成我的编程任务,我必须创建一个“密码验证器”,它有1个大写字母、1个小写字母、1个数字和1个特殊字符。如果无效,它必须显示“invalid”加上它显示为false的规则。我遇到的问题不是错误消息,但我总是得到肯定的响应,加上所有违反的规则,再加上它会读取两次。这里帮不上什么忙

import java.util.Scanner;

public class PasswordVerifier {
    public static void main(String[] args) {
        System.out.println("Password Verifier");
        System.out.println("Enter a password that meets the following rules: ");
        System.out.println("-Must be at least 8 characters long" + '\n' +
                "-Must contain at least 1 lower case character" + '\n' +
                "-Must contain at least 1 upper case character" + '\n' +
                "-Must contain at least 1 numeric digit" + '\n' +
                "-Must contain at least 1 special character from the set: !@#$%^&*" + '\n' +
                "-Must not contain the word 'and' or the word 'end'");

        String password;
        String contains1 = "and";
        String contains2 = "end";
        String special = "!@#$%^&*";

        Scanner stdIn = new Scanner(System.in);
        boolean digit = false;        //Has at least 1 digit
        boolean upper = true;        //Has at least 1 upper case letter
        boolean lower = true;        //Has at least 1 lower case letter
        boolean hasspecial = true;    //Has at least 1 special character
        boolean length = true;        //Has at least 8 digits
        boolean endand = true;        //Does not contain end or and
        boolean valid = false;        //Is the password valid?


        System.out.println("Enter password: ");
        password = stdIn.nextLine();


        int result;
        result = password.indexOf(contains1);
        if (result == -1) {
            System.out.println("");
        } else {
            System.out.println("Must not contain the word 'and'");
        }

        int result2;
        result2 = password.indexOf(contains2);
        if (result2 == -1) {
            System.out.println("");
        } else {
            System.out.println("Must not contain the word 'end'");
        }

        if (password.length() < 8) {
            System.out.println("Must be at least 8 characters long.");
        } else {
            System.out.print("");
        }
        for (int i = 0; i < password.length(); i++) {
            if (!(Character.isUpperCase(password.charAt(i)))) ;
            {
                upper = false;
                valid = false;
                i++;
            }
            if (!(Character.isLowerCase(password.charAt(i)))) ;
            {
                lower = false;
                valid = false;
                i++;
            }
            if (!(Character.isDigit(password.charAt(i)))) ;
            {
                digit = false;
                valid = false;
                i++;
            }
            if (!(password.matches(special))) ;
            {
                hasspecial = false;
                valid = false;
            }

            if (upper != true) {
                System.out.println("Must contain an upper case letter.");
            }
            if (lower != true) {
                System.out.println("Must contain a lower case letter.");
            }
            if (digit != true) {
                System.out.println("Must contain a numeric digit.");
            }
            if (hasspecial != true) {
                System.out.println("Must contain a special character.");
            }
            if (valid) {
                System.out.println("Valid.");
            } else if (valid != true) {
                System.out.println("Invalid.");
            }
        }
    }

}
import java.util.Scanner;
公共类密码验证器{
公共静态void main(字符串[]args){
System.out.println(“密码验证器”);
System.out.println(“输入符合以下规则的密码:”);
System.out.println(“-长度必须至少为8个字符”+”\n+
-必须至少包含1个小写字符“+”\n+
-必须至少包含1个大写字符“+”\n+
“-必须至少包含1个数字”+“\n”+
“-必须至少包含集合中的1个特殊字符:!@$%^&*“+”\n”+
“-不得包含‘和’或‘结束’一词”;
字符串密码;
字符串contains1=“and”;
字符串contains2=“end”;
字符串special=“!@$%^&*”;
扫描仪标准输入=新扫描仪(System.in);
布尔数字=false;//至少有1个数字
boolean upper=true;//至少有一个大写字母
boolean lower=true;//至少有一个小写字母
boolean hasspecial=true;//至少有一个特殊字符
boolean length=true;//至少有8位数字
布尔值endand=true;//不包含end或and
boolean valid=false;//密码有效吗?
System.out.println(“输入密码:”);
密码=stdIn.nextLine();
int结果;
结果=password.indexOf(contains1);
如果(结果==-1){
System.out.println(“”);
}否则{
System.out.println(“不得包含单词‘and’”);
}
结果2;
result2=password.indexOf(contains2);
如果(结果2==-1){
System.out.println(“”);
}否则{
System.out.println(“不得包含单词‘end’”);
}
if(password.length()<8){
System.out.println(“长度必须至少为8个字符”);
}否则{
系统输出打印(“”);
}
对于(int i=0;i有一件事。你所有的if行都错了

您正在添加一个“;”在if之后。这意味着,如果满足if条件,则不执行任何操作,然后始终执行以下行

还有一件事,当你这么做的时候

if (!(password.matches(special))) {
   hasspecial = false;
   valid = false;
}
您要求密码与字符串“!@#$%^&(星号)”匹配,但它可能不匹配。因此,由于您假设字符串包含一个特殊字符,hasspecial将始终为真。您需要编写类似password.matches的内容(“((星号)[!@$%^&*](星号))(可能会转义一些字符)

最后,如果一个字母不符合条件,请将标记设置为false。因此,如果下面的字母符合条件,标记仍将为false。您通常应该假设所有条件都为false,然后在满足条件后将标记设置为true来处理此类问题


注意:我写了(星号)而不是*,因为文本突出显示,我不知道如何转义:(

选择一个密码,在纸上执行你的算法,在每一步记录每个变量的值。只是一个提示:你发现一个不是大写的字符并不意味着密码没有任何大写字符。你从来没有给有效的变量赋值。那么你怎么能得到肯定的响应呢?所以我改变了”“有效”到“正确”,但我遇到了同样的问题…Nm以不同的格式重写