gpt4 book ai didi

java - 随 secret 码生成器(ASCII - AP 计算机科学)Java

转载 作者:行者123 更新时间:2023-12-02 03:55:51 26 4
gpt4 key购买 nike

所以我的在线 AP Comp Sci 老师没有回复我,我的程序遇到了问题。我需要根据此列表中的用户输入创建一个随 secret 码生成器:

  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 的值将在循环的每次迭代中得到维护。

一旦退出封闭 block (if (selection == 1) { ...),变量 password 就不再存在,并且它的值也不再存在。内容不再可访问。这意味着您可以在处理下一个选项的 block 内声明另一个名为 password 的变量,该变量与第一个 block 中的 password 完全无关。它甚至不必是同一类型。

这就是作用域的工作原理:作用域中定义的变量对于嵌套在其中的任何作用域都是可见的,但是当退出作用域时,该变量将不再存在。

数据类型

我假设您正在尝试使用字母、数字和符号(字符序列)生成密码。在 Java 中表示文本有几种不同的方法,但我在上面演示了解决此问题的最方便的选项,即 StringBuilder。您会注意到,当我 append() 每个字符时,我使用了强制转换 (char)。这是因为整数相加的结果是整数。 StringBuilder 有许多采用不同数据类型的 append() 方法。如果附加char,则会附加该字符。但是,如果您追加一个 int,则会追加表示该数值的一系列字符(以十进制表示)。通过转换为 char,我们选择正确的 append() 版本。

因式分解

你重复了很多代码。更好的结构可以通过将公共(public)代码“提升”到子 block 之外来避免这种情况。

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变量的声明和初始化等。它使你的代码更短,如果你发现一个bug,你更有可能在一个地方修复它,而不是在每个受支持的选项中修复它。

随着了解更多,您将找到更好的方法来处理不同的选项,方法是将角色生成分解到另一个对象中,您在进入循环之前选择一次该对象。这样您就不必不断地重新评估选择了哪个选项。

关于java - 随 secret 码生成器(ASCII - AP 计算机科学)Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35459425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com