我有两个类:一个生成器类和一个SystemManagement类。在Generator类中,我可以生成密码。SystemManagement类导入生成器(从另一个包)并包含附加信息。
当我创建一个SystemManagement对象并对其调用getPassword()时,我得到了null。为什么会发生这种情况?
生成器:
public class Generator {
private static String password;
private static Generator instance;
public String nextPassword() {
char[] allowedCharacters = {'a', 'b', 'c', 'd', 'e', 'f', '1', '2', '3', '4', '5','6'};
SecureRandom random = new SecureRandom();
StringBuffer password1 = new StringBuffer();
for (int i = 0; i < password1.length(); i++) {
password1.append(allowedCharacters[random.nextInt(allowedCharacters.length)]);
}
password = password1.toString();
return password;
}
public String currentPassword() {
return password;
}
public static void setPassword(String password) {
Generator.password = password;
}
public static Generator getInstance() {
if (instance == null) {
instance = new Generator();
}
return instance;
}
}SystemManagement:
public class SystemManagement implements Serializable {
private String name;
private String family;
private String password;
public SystemManagement() {
}
public SystemManagement(String password) {
this.password = Generator.getInstance().nextPassword();
}
public Students addStudent(String name, String family) {
Students student = new Students(name, family);
students.add(student);
return student;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}发布于 2009-11-20 23:01:09
我可以在你的代码中发现几个问题:
nextPassword()方法始终返回一个空的String作为密码,因为您在长度为0的空StringBuilder上进行迭代。SystemManagement对象时,您的password为null,因为您没有为它赋值(除非您使用D9创建一个带有D13构造函数的新D12对象,否则将忽略该参数,并且您的D14是空的,因为D15总是返回一个空的code发布于 2009-11-20 22:56:41
password1.length()第一次是0,所以它永远不会被填满?
发布于 2009-11-20 22:56:56
StringBuffer password1 = new StringBuffer();
for (int i = 0; i < password1.length(); i++) {我可以想象,对于字符串缓冲区的length,这应该是0。
https://stackoverflow.com/questions/1770942
复制相似问题