所以我的在线AP Comp Sci老师没有回应我,我的程序遇到了问题。我需要根据此列表中的用户输入创建一个随机密码生成器:
System.out.println("※※※※※※※※※※※※※※※※※※※ | Password Generation Menu | ※※※※※※※※※※※※※※※※※※※");
System.out.println("※|==========================================================================|※");
System.out.println("※| [1] Lowercase Letters |※");
System.out.println("※| [2] Lowercase and Uppercase Letters |※");
System.out.println("※| [3] Lowercase, Uppercase and Numbers |※");
System.out.println("※| [4] Lowercase, Uppercase, Numbers and Symbols |※");
System.out.println("※| [5] Quit |※");
System.out.println("※|==========================================================================|※");
System.out.println("※※※※※※※※※※※※※※※※※※※※※※ | Your selection? | ※※※※※※※※※※※※※※※※※※※※※※※");
到目前为止,我遇到了问题
int selection = in.nextInt();
if (selection ==1)
{
System.out.println("How many characters will me used in the password? (1 - 14)");
int chars = in.nextInt();
while ( count <= chars)
{
int password;
password += rand.nextInt((122 - 97) + 1)+ 97;
count++;
}
System.out.println("Password: " + password);
}
else if (selection ==2)
{
System.out.println("How many characters will me used in the password? (1 - 14)");
int chars = in.nextInt();
while ( count <= chars)
{
while( !(randNum>=65 && randNum<=90)&& !(randNum>=97 && randNum<=122))
{
randNum = randNumList.nextInt();
int password;
password += randNum;
}
count++;
}
System.out.println("Password: " + password);
}
else if (selection ==3)
{
System.out.println("How many characters will me used in the password? (1 - 14)");
int chars = in.nextInt();
while ( count <= chars)
{
while( !(randNum>=65 && randNum<=90)&& !(randNum>=97 && randNum<=122)&& !(randNum>=48 && randNum<=57))
{
randNum = randNumList.nextInt();
int password;
password += randNum;
}
count++;
}
System.out.println("Password: " + password);
}
else if (selection ==4)
{
System.out.println("How many characters will me used in the password? (1 - 14)");
int chars = in.nextInt();
while ( count <= chars)
{
int password;
password += rand.nextInt((126 - 35) + 1)+ 35;
count++;
}
System.out.println("Password: " + password);
}
else if (selection ==5)
{}
else
{
System.out.println(" ERROR: " + selection + " is not on the menu ");
}
}
它说找不到变量密码,这是因为循环吗?我完全被难倒和沮丧,因为我的工作落后
了(这是我第一次在这个网站上问对不起,它的格式是否奇怪(
问题很少。
范围
一个是范围的概念。每个变量都有一个作用域,用于定义何时可以访问变量以及存储数据的时间。
每个选项(1-4(都是使用不同的方法创建一个密码,并且每个方法都使用循环向密码添加字符。因此,每个方法都应该有一个变量来存储添加字符时的密码。通常,结构可以是这样的:
if (selection == 1) {
System.out.println("How many characters?");
int chars = in.nextInt();
StringBuilder password = new StringBuilder(chars);
for (int count = 0; count < chars; ++count) {
password.append((char) ('A' + rand.nextInt(26)));
}
System.out.println("Your password is: " + password);
} else if (selection == 2) {
...
这里要注意的关键是,我们在添加字符的循环之外定义了一个变量 password
。这意味着password
的值将在循环的每次迭代中保持。
然而,一旦封闭块(if (selection == 1) { ...
(退出,变量password
就不再存在,其内容也不再可访问。这意味着您可以在处理下一个选项的块内声明另一个名为 password
的变量,该变量与第一个块中的password
完全无关。它甚至不必是相同的类型。
的工作方式:作用域中定义的变量对嵌套在其中的任何作用域都是可见的,但是当作用域退出时,该变量将不再存在。
数据类型
我假设您正在尝试生成带有字母,数字和符号(字符序列(的密码。在 Java 中表示文本有几种不同的方法,但我在上面演示了这个问题最方便的选项,StringBuilder
。你会注意到我在append()
每个角色时使用了演员(char)
。这是因为添加整数的结果是整数。 StringBuilder
有许多采用不同数据类型的append()
方法。如果追加一个char
,则会追加该字符。但是,如果附加一个int
,则会附加一系列以十进制表示该数值的字符。通过投射到char
,我们选择了正确的append()
版本。
保 理
你重复了很多代码。更好的结构可以通过将通用代码"提升"出子块来避免这种情况。
int selection = in.nextInt();
System.out.println("How long?");
int chars = in.nextInt();
StringBuilder password = new StringBuilder(chars);
for (int count = 0; count < chars; ++count) {
if (selection == 1) {
password.append((char) ('A' + rand.nextInt(26));
} else if (selection == 2) {
...
}
}
System.out.println("Your password is: " + password);
这使您免于重复提示、输入和输出处理、password
变量的声明和初始化等。它使您的代码更短,如果您发现错误,您更有可能在一个地方修复它,而不是在每个受支持的选项中修复它。
随着知识的深入,您将找到更好的方法来处理不同的选项,方法是在进入循环之前将角色生成分解到另一个对象中,您可以选择一次。这样,您就不必经常重新评估选择了哪个选项。