在Java中操作类的构造函数

时间:2017-08-11 03:07:05

标签: java arrays object constructor

我有一个关于密码分析的练习(弱与强),我必须创建2个构造函数。其中一个必须收到密码的长度,密码必须随机创建,我该怎么做

此外,我无法确定密码是弱还是强。如果密码至少有3个大写字母,2个小写字母和6个数字,那将会很强大。

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

    }
}

3 个答案:

答案 0 :(得分:2)

首先,您不应该使用Platform: Buffalo WZR-1750DHP Firmware: DD-WRT v3.0-r33006 std (08/03/17) 作为密码中的字符数。你怎么能有1.5个字符?只需使用double

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

int

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

答案 1 :(得分:0)

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

随机密码:

This SO question讨论随机密码生成,因此有关更多详细信息,请查看其中发布的内容,但实质上您需要使用内置于Java中的一些随机生成并从中创建一个字符串。有很多不同的方法可以做到,这个问题详细说明,所以我会留给你决定你希望如何做到这一点。

for循环错误:

调用password.length尝试访问密码对象中名为length的变量。在Java中,您不能这样做,您必须使用以下方法:

password.length()

大写/小写检测

This SO question显示了一种基于char值检测字符是大写还是小写的好方法。片段:

if(input>='a'&&input<='z')
    //lowercase

if(input>='A'&&input<='Z')
    //uppercase

答案 2 :(得分:-1)

尝试使用简单逻辑

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类与方法生成密码 例如,

 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.

使用给定的链接随机生成密码:

Creating a random string with A-Z and 0-9 in Java

http://www.baeldung.com/java-random-string