代码通过率80%,最后一种情况不知如何写
小明在卡中心工作,用到的很多系统账号都需要设置安全密码。密码如果符合以下规范可以称为安全密码:
1、密码至少包含6个字符,至多包含20个字符;
2、至少包含一个小写字母,至少包含一个大写字母,至少包含一个数字;
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'&¤tChar<='Z')
{
noCapital=0;
}
if(currentChar>='a'&¤tChar<='z')
{
noSmall=0;
}
if(currentChar>='0'&¤tChar<='9')
{
noNumber=0;
}
if(i>0&¤tChar==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'&¤tChar<='Z')
{
noCapital=0;
}
if(currentChar>='a'&¤tChar<='z')
{
noSmall=0;
}
if(currentChar>='0'&¤tChar<='9')
{
noNumber=0;
}
if(i>0&¤tChar==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'&¤tChar<='Z')
{
noCapital=0;
}
if(currentChar>='a'&¤tChar<='z')
{
noSmall=0;
}
if(currentChar>='0'&¤tChar<='9')
{
noNumber=0;
}
if(i>0&¤tChar==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);
}
}#测试岗真题##笔试题目##测试开发工程师#
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'&¤tChar<='Z')
{
noCapital=0;
}
if(currentChar>='a'&¤tChar<='z')
{
noSmall=0;
}
if(currentChar>='0'&¤tChar<='9')
{
noNumber=0;
}
if(i>0&¤tChar==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'&¤tChar<='Z')
{
noCapital=0;
}
if(currentChar>='a'&¤tChar<='z')
{
noSmall=0;
}
if(currentChar>='0'&¤tChar<='9')
{
noNumber=0;
}
if(i>0&¤tChar==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'&¤tChar<='Z')
{
noCapital=0;
}
if(currentChar>='a'&¤tChar<='z')
{
noSmall=0;
}
if(currentChar>='0'&¤tChar<='9')
{
noNumber=0;
}
if(i>0&¤tChar==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);
}
}#测试岗真题##笔试题目##测试开发工程师#