代码通过率80%,最后一种情况不知如何写

小明在卡中心工作,用到的很多系统账号都需要设置安全密码。密码如果符合以下规范可以称为安全密码:
1、密码至少包含6个字符,至多包含20个字符;
2、至少包含一个小写字母,至少包含一个大写字母,至少包含一个数字;
3、不能出现连续3个相同的字符。

请写一个检查密码是否为安全密码的函数。
输入为一个字符串作为密码,输出为将该密码改为安全密码的最小改变次数。如果它已经是安全密码,则返回0。
备注:插入、删除、或者替换一个字符,均视为改变一次。
public class main
{

public static void main(String[] args)
{

// TODO Auto-generated method stub
int minChange=0;//最小修改次数
int problem=0;//问题2的个数
int modify=0;//重复需要修改的个数
int m=1;//记录重复的次数
ArrayList<Integer> repeat=new ArrayList<>();//记录所有重复情况
int noSmall=1;
int noCapital=1;
int noNumber=1;
System.out.print("输入密码");
Scanner scanner=new Scanner(System.in);
char[] PassWord=scanner.nextLine().toCharArray();
if(PassWord.length<6)//位数小于6时,取max(需要补齐的次数,需要修改的次数,问题2的个数)
{
for(int i=0;i<PassWord.length;i++)
{
char currentChar=PassWord[i];
if(currentChar>='A'&&currentChar<='Z')
{
noCapital=0;
}

if(currentChar>='a'&&currentChar<='z')
{
noSmall=0;
}
if(currentChar>='0'&&currentChar<='9')
{
noNumber=0;
}

if(i>0&&currentChar==PassWord[i-1])//判断重复
{
m++;
if(i==PassWord.length-1)
{
repeat.add(m);//若是最后一个元素
}
}
else//如果和之前的元素不同
{
if(m!=1)//若是刚结束重复,则将m重置
{
repeat.add(m);
m=1;
}
}

}
for(int r:repeat)
{
modify=modify+r/3;
}
int length=6-PassWord.length;
problem=noCapital+noSmall+noNumber;
minChange=problem>(length+modify)?problem:(length+modify);
}
//位数正确时,取max(需要修改的次数,问题2的个数)
else if(PassWord.length>=6&&PassWord.length<=20)
{
for(int i=0;i<PassWord.length;i++)
{
char currentChar=PassWord[i];
if(currentChar>='A'&&currentChar<='Z')
{
noCapital=0;
}

if(currentChar>='a'&&currentChar<='z')
{
noSmall=0;
}
if(currentChar>='0'&&currentChar<='9')
{
noNumber=0;
}

if(i>0&&currentChar==PassWord[i-1])//判断重复
{
m++;
if(i==PassWord.length-1)
{
repeat.add(m);//若是最后一个元素
}
}
else//如果和之前的元素不同
{
if(m!=1)//若是刚结束重复,则将m重置
{
repeat.add(m);
m=1;
}
}

}
for(int r:repeat)
{
modify=modify+r/3;
}
problem=noCapital+noSmall+noNumber;
minChange=problem>length?problem:length;
minChange=minChange>modify?minChange:modify;
}
else//大于20位时
{
for(int i=0;i<PassWord.length;i++)
{
char currentChar=PassWord[i];
if(currentChar>='A'&&currentChar<='Z')
{
noCapital=0;
}

if(currentChar>='a'&&currentChar<='z')
{
noSmall=0;
}
if(currentChar>='0'&&currentChar<='9')
{
noNumber=0;
}

if(i>0&&currentChar==PassWord[i-1])//判断重复
{
m++;
if(i==PassWord.length-1)
{
repeat.add(m);//若是最后一个元素
}
}
else//如果和之前的元素不同
{
if(m!=1)//若是刚结束重复,则将m重置
{
repeat.add(m);
m=1;
}
}

}
for(int r:repeat)
{
modify=modify+r/3;
}
int length=PassWord.length-20;
problem=noCapital+noSmall+noNumber;
minChange=modify>(length+problem)?modify:(length+problem);
}
//System.out.println("modify:"+modify);
//System.out.println("problem:"+problem);
System.out.println(minChange);
}

}#测试岗真题##笔试题目##测试开发工程师#
全部评论

相关推荐

双非阴暗爬行:我来看看笑死我了,这名字取得好想笑(没有不好的意思)
点赞 评论 收藏
分享
04-27 08:59
常州大学 Java
韵不凡:软件开发的工作需要博士吗?
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客企业服务