Manipulating the constructor of a class in Java
我有一个关于密码分析的练习(弱与强),我必须创建两个构造函数。其中一个必须接收密码的长度,密码必须随机创建,我该怎么做?
另外,我无法确定密码是弱密码还是强密码。如果密码至少有3个大写字母、2个小写字母和6个数字,它就会很强。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | class Password { private double length; private String password; Password()//default constructor with password length 8 { password="defaultt"; length=8; } Password(double length) { this.length=length; password="";//generate a random password, how? } boolean isStrong(String password) { int totalnumbers=0; int upper=0; int lower=0; for(int i=0;i<password.length;i++)//marks an error in .length why? { if (password.charAt(i)>='0' && password.charAt(i)<='9') totalnumbers+=1; if (password.charAt(i) is lowercase)//what can I do here? lower+=1; if (password.charAt(i) is uppercase) upper+=1; } if(totalnumbers>=6 && lower>=2 && upper>=3) return true; else return false; } generatePassword(double length) { password;//generate the password of the object with this.length //how to do it? } String getPassword() { return password; } double getLength() { return length; } void setLength(double length) { this.length=length; } } public class Exercises2 { public static void main(String[] args) { Password x=new Password(); Password array[]; Scanner rd=new Scanner(System.in); int Size; System.out.println("Give the size of the passwords array"); Size=rd.nextInt(); array=new Password[Size]; for( int i=0;i<Size;i++) { array[i]=new Password();//creation of an object for each position of the array } for(int j=0;j<Size;j++) { System.out.println("Give the size for each password of the array"); array[j]=[rd.nextInt]; //length for each password of the array } Password arrayBooleans[]=new Password[Size]; for (int k=0;k<Size;k++){ arrayBooleans[k]=x.isStrong(array[k]); } for(int i=0;i<Size;i++) { System.out.println("password"+i+ arrayBooleans[i]); } } } |
首先,不应该使用
要检查字符是数字、小写还是大写,请使用字符类(不依赖于ASCII值):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
若要生成给定长度的随机字母数字字符串,请查看此so post可接受的答案。有很多不同的方法可以做到这一点,但这是一个很好的开始的地方。
这里有几个不同的问题,我会尽力回答:
随机密码:
这个问题是关于随机密码生成的,所以对于更多的细节,看看在那里张贴的内容,但本质上你需要使用一些随机生成的Java生成,并从中创建一个字符串。有许多不同的方法可以做到这一点,这在这个问题中有详细说明,所以我将把它留给您来决定您希望如何做到这一点。
调用
1 | password.length() |
大小写检测
这个问题显示了一种根据字符值检测字符是大写还是小写的好方法。代码段:
1 2 3 4 5 | if(input>='a'&&input<='z') //lowercase if(input>='A'&&input<='Z') //uppercase |
号
尝试使用简单的逻辑,
1 2 3 4 5 6 7 8 | Use Password() { // Simply check length if(length == 8) { // Call a method which would check that password is strong or weak. for e.g, } } |
。
//可以使用类java.util.random with方法生成密码例如,
1 2 3 | char c = (char)(rnd.nextInt(128-32))+32 20x to get Bytes, which you interpret as ASCII. // If you're fine with ASCII. // Call a method which would check that password is strong or weak. |
使用给定的链接随机生成密码:
用Java创建一个具有随机Z和0到9的字符串