重点是制作一个密码随机化器,但我的问题是我的代码总是制作相同的密码。我试过各种各样的东西,这是我最近一次使用互联网。
主要类别:
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.
}