2014-09-21 46 views
0

我在密碼類中編寫代碼,該密碼生成一定長度的密碼。測試驅動程序PasswordTest將不同的長度輸入到generatePassword方法中。這兩個程序都編譯,但是當我嘗試運行PasswordTest.java時,我在線程「main」中得到錯誤:異常。我如何糾正這個錯誤並讓我的測試驅動程序工作?隨機密碼生成器測試驅動程序將不會執行

這裏是密碼類:

/** 
* Password.java -- Generates random passwords 
* @author Sam Harrison 
* @version 21-Sept-2014 
* 
*/ 
import java.util.Random; 
public class Password 
{ 
    public char randomChar(int length) 
    { 
     final int NUM_CHARS = 62; 

     Random rand = new Random(); 
     int num = rand.nextInt(NUM_CHARS); 

     if (num <= 9) 
      num += 48; 
     else if (num <= 35) 
      num += 55; 
     else 
      num += 61; 

     return (char) num; 
    } 
    public String generatePassword(int length) 
    { 
     String str1 = "abcdefghijklmnopqrstuvwxyz1234567890"; 

     Password randObj = new Password(); 
     str1 = randObj.generatePassword(length); 
     return str1; 

    } 
} 

下面是測試車手:

/** 
* PasswordTest.java 
* @author Sam Harrison 
* @version 21-Sept-2014 
* 
*/ 

public class PasswordTest 
{ 
    public static void main (String[] args) 
    { 
     int length = 3; 

     Password randObj = new Password(); 
     randObj.generatePassword(length); 
    } 
} 

回答

0

在任何地方,你實際上生成一個密碼。你需要用某種積累字符的循環替換generatePassword的主體。現在,它所做的只是分配一個新的實例Password並遞歸到該實例中,該實例會執行相同的操作,直到耗盡堆棧或堆爲止。

+0

我迷失在如何編寫循環,我猜。 – 2014-09-21 23:42:36

+0

那麼你已經有'randomChar'(只是刪除那個未使用的'length'參數)。您可以使用'String password =「」;'聲明一個空字符串,並通過將'randomChar'中的字符與'+ ='運算符相加來構建它。所以你所要做的就是聲明一個空字符串,然後在for循環中追加字符,直到它達到期望的長度。 – Rotten194 2014-09-22 22:17:57