密码/特定要求计划

时间:2014-11-08 01:10:37

标签: java

我正在为我的Java编程课做作业。

书中的问题要求用户创建一个使用JOptionPane框询问用户密码的程序。密码必须在6到10个字符之间,并且至少有一个数字和一个字母。满足此要求后,请要求用户验证其密码。如果他们的第二个输入与第一个输入不匹配,请再次询问原始问题。两个输入匹配后,显示一条消息,说“成功!”#34;。

我已经到了检查角色数量的地步,但我不能为我的生活做准备,弄清楚如何检查数字和字母。我已尝试嵌套for循环搜索数字和字母,但我无法找到一种方法,可以在没有数字或字母的情况下绕过长度要求。这是我目前的代码。

import javax.swing.JOptionPane;
class Password{
   public static void main(String[] args){

      String input1 = "";
      String input2 = "";
      int inputLength;

      do{
         do{

            input1 = JOptionPane.showInputDialog(null, "Enter your password\nIt must be 6 to 10 characters and\nhave at least one digit and one letter");

            inputLength = input1.length();

         }while(inputLength < 6 || inputLength > 10);

         input2 = JOptionPane.showInputDialog(null, "Verify Password");

      }while(!(input1.equals(input2)));

      JOptionPane.showMessageDialog(null, "Success!");

   }
}

2 个答案:

答案 0 :(得分:3)

你可以处理正则表达式。

  • (?=。* \ d)表示单词中的最后一位数
  • (?=。* [a-zA-Z])表示至少一个字母
  • {6,10} 表示6到10个字符

所以正确的正则表达式是((?=。 \ d)(?=。 [a-zA-Z])。{6,10}) < / p>

现在看一下String的`.matches(String regex)方法:)

如果你不能使用正则表达式:

  • 获取CharArray(input1.toCharArray())并迭代。
  • 对于每个字符,请检查它是否为数字或字符
  • 保留2个布尔值(例如,对于例如num和alpha)并在看到多个字符时将它们设置为true

然后,看看你的旗帜,然后测试这个

num && alpha && inputLenght > 6 && inputLenght < 10

编辑:

您可以使用Character.isLetter()Character.isDigit(),我认为您现在有足够的信息!

答案 1 :(得分:0)

想出来!我最后添加了两个while循环来检查内部do循环内部的数字和字母。如果找到了正确的东西,我设置了while循环以使布尔表达式为false(我知道,它似乎向后)。但它使得如果找到正确的字符,do循环将不会再次运行。感谢所有发布的人,这真的有助于清理事情!

这是完成的代码:

import javax.swing.JOptionPane;
class Password{
   public static void main(String[] args){

      String input1 = "";
      String input2 = "";
      int inputLength;
      boolean isDigit = true;
      boolean isLetter = true;
      char c = ' ';
      char d = ' ';
      int x = 0;

      do{
         do{

            input1 = JOptionPane.showInputDialog(null, "Enter your password\nIt must be 6 to 10 characters and\nhave at least one digit and one letter");

            inputLength = input1.length();

            while(x < input1.length()){
               c = input1.charAt(x);

               if(Character.isDigit(c)){
                  isDigit = false;
                  break;
               }
               x++;
            }

            x = 0;
            while(x < input1.length()){
               d = input1.charAt(x);

               if(Character.isLetter(d)){
                  isLetter = false;
                  break;
               }
               x++;
            }

         }while(inputLength < 6 || inputLength > 10 || isDigit || isLetter);

         input2 = JOptionPane.showInputDialog(null, "Verify Password");

      }while(!(input1.equals(input2)));

      JOptionPane.showMessageDialog(null, "Success!");

   }
}