2009-11-20 23 views
0

我有兩個類:一個Generator類和一個SystemManagement類。發生器類,我可以生成密碼。 SystemManagement類導入Generator(來自另一個包)幷包含附加信息。爲什麼我的方法返回空密碼?

當我製作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; 
    } 
} 
+2

杜佩:http://stackoverflow.com/questions/1769962/why-am-i-getting-null-on-this-code – BalusC 2009-11-20 14:56:01

+0

這是怎麼連接到FindBugs的? – 2009-11-20 20:51:24

回答

0

password1.length()0是第一次,所以它從來沒有得到填補?

+0

這將返回一個空字符串,而不是null。 – erickson 2009-11-20 14:57:42

0
StringBuffer password1 = new StringBuffer(); 
    for (int i = 0; i < password1.length(); i++) { 

我可以想象這將是0的字符串緩衝區的length

0

如果您調用不帶參數的構造函數(如sys = new SystemManagement();),則從不設置新對象的password成員。只有在調用構造函數時纔會發生這種情況,該構造函數採用忽略的String —。

0
StringBuffer password1 = new StringBuffer(); 
for (int i = 0; i < password1.length(); i++) { 
    password1.append(allowedCharacters[random.nextInt(allowedCharacters.length)]); 
} 

for循環永遠不會運行,因爲password1.length()此時將爲0。

3

我能發現一對夫婦的問題與您的代碼:

  • 因爲你遍歷一個空StringBuilder長度爲你nextPassword()方法總是返回一個空String作爲密碼0

  • 當使用無參數構造函數創建一個新的SystemManagement對象,則password爲空,因爲您不指定任何對象(除非使用setPassword設置器)。

  • 當您創建與需要String構造一個新的SystemManagement對象,你忽略參數,並且您password是空的,因爲nextPassword()總是返回一個空String

相關問題