我正在制作密码生成器和管理器。我通过从for循环中一次生成一个字符来创建密码。在每次for循环迭代结束时,它会打印出所选的随机字符。我一直试图通过char将密码char存储到与for循环中的i值相关的数组的索引中。这不仅仅是印刷和我无法做任何事情。因此,我有两个问题,我的主要问题是:是否可以捕获我打印的字符,然后将它们存储在字符串中?或者,像下面的代码一样,我是否可以避免运行时(通过我的数组)运行时出现的空指针异常?空指针异常发生时,我试图分配一个字符串到我的密码字符串在索引我。这可能会更好地解释我的代码。 感谢您的帮助:)将数据从System.out.print方法存储到字符串(Java)中?
package pass.gen;
public class PassGen {
public static void main(String[] args) {
PassGen passGen = new PassGen();
passGen.generate();
}
String lAlpha = "abcdefghijklmnopqrstuvwxyz"; //used to generate lowercase pass chars
String uAlpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //used to generate uppercase pass chars
int minNum = 0; //the mininum number that a integer value can be in the password
int maxNum = 9; //the max number "" ...........................................""
int randomNumber;
int minString = 0;
int maxString = 25;
int randomLNum;
int randomUNum;
int low1 = 1;
int high3 = 3;
int ran3;
char randomLChar;
char randomUChar;
char randomNumChar;
String randomLString;
String randomUString;
String randomNumString;
String passString []; //should this be an array of chars?
boolean case1; //if the case is true (case1 is for random numbers) then a random number is added to the passString
boolean case2; //if the case is true (case2 is for random lowercase letters) then a random lowercase letter is added to the passString
boolean case3; //if the case is true (case3 is for random uppercase letters) then a random uppercase letter is added to the passString
void generate(){
for(int i = 0; i < 4; i++){
ran3 = low1 + (int)(Math.random() * ((high3 - low1) + 1));
switch(ran3){
case 1:genNumber(0,9);
break;
case 2:genLAlpha();
break;
case 3:genUAlpha();
break;
default:System.out.println("Unable to Generate a Password.");
}
if(case1 == true){
passString[i] = randomNumString;
}if(case2 == true){
passString[i] = randomLString;
}if(case3 == true){
passString[i] = randomUString;
}
}
System.out.println(passString);
}
void genNumber(int min, int max){
randomNumber = min + (int)(Math.random() * ((max - min) + 1));
randomNumChar = Character.forDigit(randomNumber,5);
case1 = true;
}
void genLAlpha(){
randomLNum = minString + (int)(Math.random() * ((maxString - minString) + 1));
randomLChar = lAlpha.charAt(randomLNum);
randomLString = Character.toString(randomLChar);
case2 = true;
}
void genUAlpha(){
randomUNum = minString + (int)(Math.random() * ((maxString - minString) + 1));
randomUChar = uAlpha.charAt(randomUNum);
randomUString = Character.toString(randomUChar);
case3 = true;
}
}
我还不确定你为什么要这样做。为什么不保存一个String或StringBuilder? –
还有什么行导致NPE被抛出? –
您的代码有几个问题可以改进。也许你应该考虑在http://codereview.stackexchange.com/上提问,但作为@HovercraftFullOfEels说,你应该看看使用[StringBuilder](http://docs.oracle.com/javase/1.5.0 /docs/api/java/lang/StringBuilder.html)。 –