关于数组:在Java中操作类的构造函数

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

    }
}

首先,不应该使用double来表示密码中的字符数。你怎么能有1.5个字符?只需使用一个int

要检查字符是数字、小写还是大写,请使用字符类(不依赖于ASCII值):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for (int i = 0; i < password.length(); i++) {

    Character c = Character.valueOf(password.charAt(i));
    if (c.isDigit()) {
        totalnumbers++;
    }

    if (c.isLowerCase()) {
        lower++;
    }

    if (c.isUpperCase()) {
        upper++;
    }
}

若要生成给定长度的随机字母数字字符串,请查看此so post可接受的答案。有很多不同的方法可以做到这一点,但这是一个很好的开始的地方。


这里有几个不同的问题,我会尽力回答:

随机密码:

这个问题是关于随机密码生成的,所以对于更多的细节,看看在那里张贴的内容,但本质上你需要使用一些随机生成的Java生成,并从中创建一个字符串。有许多不同的方法可以做到这一点,这在这个问题中有详细说明,所以我将把它留给您来决定您希望如何做到这一点。

for循环错误:

调用password.length试图访问password对象中名为length的变量。在爪哇,你不能这样做,你必须使用这个方法:

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的字符串

Java – Generate Random String