[英]Storing data from the System.out.print method into a String (Java)?
我正在制作密碼生成器和管理員。 我通過在for循環中一次生成一個字符來創建密碼。 在每個for循環迭代結束時,它將打印出所選的隨機字符。 我一直在嘗試將密碼char逐個char存儲到與for循環中i的值相關的數組的索引中。 那不僅僅是打印,而我卻無能為力。 因此,我有兩個問題,我的主要問題是:是否可以捕獲我打印的字符,然后將它們存儲在字符串中? 或者,如下面的代碼所示,是否可以避免運行時(通過數組)獲得的空指針異常? 當我嘗試在索引i處為我的passwordString分配字符串時,會發生空指針異常。 我的代碼可能會更好地解釋它。 謝謝你的幫助 :)
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;
}
}
passString
未初始化,因此導致NullPointerException
的原因 randomNumString
,因此它永遠是空 您的“生成”方法應返回它們生成的值。 這將消除對成員變量的依賴,從而減少可能出現問題的區域。 這也意味着您可以添加新的生成方法,而無需更改很多代碼。
即使您選擇不執行此操作,您也應該有一個變量,其中包含每個計算的結果...
試試這個...
public class PassGen {
public static void main(String[] args) {
PassGen passGen = new PassGen();
String generate = passGen.generate();
System.out.println(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 minString = 0;
int maxString = 25;
int low1 = 1;
int high3 = 3;
public String generate() {
StringBuilder sb = new StringBuilder(4);
for (int i = 0; i < 4; i++) {
sb.append(generateCharacter());
}
return sb.toString();
}
protected char generateCharacter() {
char result = '-';
int ran3 = low1 + (int) (Math.random() * ((high3 - low1)));
switch (ran3) {
case 0:
result = genNumber(0, 9);
break;
case 1:
result = genLAlpha();
break;
case 2:
result = genUAlpha();
break;
}
return result;
}
protected char genNumber(int min, int max) {
int randomNumber = min + (int) (Math.random() * ((max - min) + 1));
char randomNumChar = Character.forDigit(randomNumber, 5);
return randomNumChar;
}
protected char genLAlpha() {
int randomLNum = minString + (int) (Math.random() * ((maxString - minString) + 1));
char randomLChar = lAlpha.charAt(randomLNum);
return randomLChar;
}
protected char genUAlpha() {
int randomUNum = minString + (int) (Math.random() * ((maxString - minString) + 1));
char randomUChar = uAlpha.charAt(randomUNum);
return randomUChar;
}
}
另外,我強烈建議您花一些時間來學習如何使用IDE的調試器。 如果您不使用和IDE,強烈建議您開始使用。 我花了30秒添加一個斷點並找到您的NullPointerException
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.