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



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

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

相关内容

  • 没有找到相关文章