首先,对不起,代码有点凌乱。它的格式不是很好。我的任务是随机生成一个由大写和小写字母组成的密码,其长度由用户指定。到目前为止,我的代码尚未完成,但那是因为我遇到了问题。
我的密码会显示小写和大写字母,但不够长。
例如,如果此人想要一个长度为14的密码,我只会获得一个小于该密码的密码。它永远不会是它应该的长度。
import java.util.Scanner;
import java.util.Random;
public class Password{
public static void main(String [] args){
Scanner in = new Scanner(System.in);
int passwordLength = 0;
Random randNum = new Random();
int randNumAscii = 0;
String generatedPassword = "";
System.out.print("Password Length (1-14): ");
passwordLength = in.nextInt();
for(int count = 0; count < passwordLength; count++){
randNumAscii = randNum.nextInt(123);
if(randNumAscii >= 65 && randNumAscii <= 90 || randNumAscii >= 97 && randNumAscii <= 122)
generatedPassword += (char)randNumAscii;
else
randNumAscii = randNum.nextInt(123);
}
System.out.println(generatedPassword);
}
}
答案 0 :(得分:1)
这是因为如果生成的密码位于您选择的范围内,您只需添加一个字符。如果一个字符在randNumAscii >= 65 && randNumAscii <= 90 || randNumAscii >= 97 && randNumAscii <= 122
之外被随机化,你永远不会将它附加到字符串。
你可以做的是在for循环中有一个while循环,一直持续到那个条件,或者继续for循环但是减少count变量,这样就会生成一个新的字符“with the index”说话。
答案 1 :(得分:1)
正如你所说,你的问题在于:
randNumAscii = randNum.nextInt(123);
if(randNumAscii >= 65 && randNumAscii <= 90 || randNumAscii >= 97 && randNumAscii <= 122)
generatedPassword += (char)randNumAscii;
else
randNumAscii = randNum.nextInt(123);
让我解释原因:
基本上,当userSelection == 2
时,您的代码会说:“对于给定长度的每个空格,选择一些随机字符。如果是大写或小写,请添加它。否则,请更改它。”但是,你忘记做的是附加“改变”的随机字符。
你需要做的就是这样(伪代码):
randNumAscii = [random from 0 to 123]
while randNumAscii is not uppercase and not lowercase:
randNumAscii = [random from 0 to 123]
append (char)randNumAscii to generatedPassword
由于这是一项任务,我将实施留给您。因为我不确定您的技能水平,您可能需要阅读the documentation on while
。