密码随机化器:创建相同的密码



重点是制作一个密码随机化器,但我的问题是我的代码总是制作相同的密码。我试过各种各样的东西,这是我最近一次使用互联网。

主要类别:

class Program {
    public static void main(String[] args) {
        PasswordRandomizer randomizer = new PasswordRandomizer(13);
        System.out.println("Password: " + randomizer.createPassword());
        System.out.println("Password: " + randomizer.createPassword());
        System.out.println("Password: " + randomizer.createPassword());
        System.out.println("Password: " + randomizer.createPassword());
    }
}

Program类:

import java.util.Random;
public class PasswordRandomizer {
    // Define the variables
    private Random password = new Random();
    private int length;
    private String character; 
    public PasswordRandomizer(int length) {
        //creates a new object, uses the given password length
        this.length = length;
        String characters = "";
            Random rndNumbers = new Random();
            int randomnumber = 0;

            for (int nbr = 1; nbr < length; nbr++) {
                randomnumber = rndNumbers.nextInt(25);
                char character = "abcdefghijklmnopqrstuvwxyz".charAt(randomnumber);
                characters = characters + character; 
            }
        System.out.println(characters);
        this.character = characters;
    }

    public String createPassword() {
        // write code that returns a randomized password
        PasswordRandomizer randomizer = new PasswordRandomizer(13);
        //consists of symbols a-z and is of the length given as a parameter to the constructor
        return this.character;  
    }
}

PasswordRandomizer方法中,有一行System.out.println(characters);,它每次都打印出随机化的密码。但是createPassword方法中没有不同的密码,只有第一个方法在输出中始终产生相同的密码。

正如我在注释中提到的,方法createPassword()调用构造函数并创建一组丢失的新实例变量。将你的"随机化"代码移到这个方法可以修复它。请在Ideone查看示例。修改后的构造函数和createPassword()代码如下。

public PasswordRandomizer (int length) {
        //creates a new object, uses the given password length
        this.length = length;
}     
public String createPassword() {
        String characters = "";
        Random rndNumbers = new Random();
        int randomnumber = 0;
        for (int nbr = 1; nbr < length; nbr++) {
            randomnumber = rndNumbers.nextInt(25);
            char character = "abcdefghijklmnopqrstuvwxyz".charAt(randomnumber);
            characters = characters + character; 
        }
        System.out.println(characters);
        return characters;  
}

在您的示例中,您创建了Random的2个实例和PasswordRandomizer的两个实例。

您一直在调用createPassword()(在其中一个实例上),它创建了一个PasswordRandomizer对象(并将其丢弃),然后只返回this.character;(而不是randomizer.character,它将为您提供所寻求的行为)。

public String createPassword() {
        // write code that returns a randomized password
        PasswordRandomizer randomizer = new PasswordRandomizer(13);
        //consists of symbols a-z and is of the length given as a parameter to the constructor
        return randomizer.character;  //This could be a simple fix.
    }

最新更新