我正在製作密碼生成器和管理器。我通過從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)。 –