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

Java 密码随机化器:创建相同的密码,java,random,Java,Random,关键是要做一个密码随机化器,但我的问题是我的代码总是使用相同的密码。我尝试过各种各样的东西,这是我通过互联网得到的最新的一个 主要类别: class Program { public static void main(String[] args) { PasswordRandomizer randomizer = new PasswordRandomizer(13); System.out.println("Password: " + randomizer

关键是要做一个密码随机化器,但我的问题是我的代码总是使用相同的密码。我尝试过各种各样的东西,这是我通过互联网得到的最新的一个

主要类别:

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());
    }
}
程序
类:

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;  
    }
}
import java.util.Random;
公共类密码随机化器{
//定义变量
私有随机密码=新随机();
私有整数长度;
私有字符串;
公共密码随机化器(整数长度){
//创建一个新对象,使用给定的密码长度
这个长度=长度;
字符串=”;
随机rndNumbers=新随机数();
int随机数=0;
对于(int nbr=1;nbr<长度;nbr++){
随机数=rndNumbers.nextInt(25);
character=“abcdefghijklmnopqrstuvxyz”。charAt(随机数);
字符=字符+字符;
}
System.out.println(字符);
this.character=字符;
}
公共字符串createPassword(){
//编写返回随机密码的代码
PasswordRandomizer randomizer=新的PasswordRandomizer(13);
//由符号a-z组成,长度作为构造函数的参数给定
返回此.character;
}
}

PasswordRandomizer
方法中,有行
System.out.println(字符)
每次打印随机密码。但是不同的密码不会出现在
createPassword
方法中,只有第一个密码会在输出中始终使用相同的密码。

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


您继续调用
createPassword()
(在其中一个实例上),它创建一个
PasswordRandomizer
对象(并将其丢弃),然后只返回
this.character
(不是随机数发生器。字符,它将为您提供所需的行为)。

正如我在评论中提到的,您的方法
createPassword()
调用构造函数并创建一组丢失的新实例变量。将您的“随机化”代码移动到此方法可以修复它。看看这本书。下面是修改过的构造函数和
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;  
}
公共密码随机化器(int-length){
//创建一个新对象,使用给定的密码长度
这个长度=长度;
}     
公共字符串createPassword(){
字符串=”;
随机rndNumbers=新随机数();
int随机数=0;
对于(int nbr=1;nbr<长度;nbr++){
随机数=rndNumbers.nextInt(25);
character=“abcdefghijklmnopqrstuvxyz”。charAt(随机数);
字符=字符+字符;
}
System.out.println(字符);
返回字符;
}

所以你的代码不能按预期工作?欢迎来到代码回顾!然而,我担心这个问题与这个网站的内容不符。代码审查是关于改进现有的工作代码。CodeReview不是在修复或更改代码时寻求帮助的网站。一旦代码满足了您的要求,我们很乐意帮助您以更干净的方式完成同样的事情!有关更多信息,请参阅我们的。如果要创建随机数,应使用SecureRandom而不是random。随机性不够安全。@asgs你为什么叫他哑巴。。?那有点糟糕,伙计。也许他/她只是新来的。@LostBam我把那个方法称为哑巴。我不相信侮辱,尤其是在编程方面。“我曾经在那里做过这件事。”asgs误解了这一点,这是我的错误。
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.
    }