2014-09-21 49 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