Java中的数据验证

时间:2013-11-16 18:30:22

标签: java validation

嗯,让我们说这曾经工作得很好然后我今天再次启动它现在它没有......

引脚是1234,无论我做什么,它说它无效...

是的我知道它第三次没有检查。我也必须解决这个问题:

    import java.util.Scanner;

    import java.util.Scanner;


  public class ATM
  {

      public ATM()

      {
          Scanner console = new Scanner(System.in);

          final String pin = "1234";
          String userPin = "";
          int pinCount = 1;
          boolean error = false;

          do{
              System.out.print("Enter PIN: ");
              userPin = console.nextLine();

              if (pinCount == 3) {
                  System.out.println("Bank account is blocked");
                  break;
              }
              else if (userPin.length() < 4 || userPin.length() > 4) {
                  error = true; 
                  pinCount += 1;
              }
              else if (isNumeric(userPin) && userPin == pin && pinCount < 3) {
                  System.out.println("Your PIN is correct");
                  break;
              }
              else{
                  System.out.println("Your PIN is incorrect");
                  error = true;
                  pinCount += 1;
              }
          }while(error);          
      }

      public static boolean isNumeric(String str)
        { 
          try  
          {  
            double d = Double.parseDouble(str);  
          }  
          catch(NumberFormatException nfe)  
          {  
            return false;  
          }  
          return true;  
        }
  }

不要问我为什么要拆分它:

public class ATMtest 
{
    public static void main(String[] args) 
    {
        ATM atm = new ATM();
    }

}

非常感谢任何帮助。

6 个答案:

答案 0 :(得分:4)

您不会将String个对象与==进行比较。您应该使用equals()方法。我知道如果你是java的新手是没有意义的,==的意思是“它们是同一个引用吗?”而equals()的意思是“他们是平等的吗?”。

答案 1 :(得分:2)

userPin == pin应为userPin.equals(pin)

答案 2 :(得分:1)

对于精确4长度使用\d{4} regex的数字匹配,并删除if else语句中的所有样板代码以进行验证。

public static boolean isNumeric(String str) {
    Pattern p = Pattern.compile("\\d{4}");
    Matcher matcher = p.matcher(str);
    return matcher.matches();

}

对于字符串比较,使用equals的{​​{1}}方法。从

改变它
==

else if (isNumeric(userPin) && userPin == pin && pinCount < 3) {

答案 3 :(得分:1)

在代码中声明两个String变量:

  final String pin = "1234";
  String userPin = "";

并验证它们是否相等。

  else if (isNumeric(userPin) && userPin == pin && pinCount < 3) {
          System.out.println("Your PIN is correct");
          break;
      }

字符串比较应使用equals方法而不是==

更改

userPin == pin

 userPin.equals(pin)

答案 4 :(得分:0)

将其更改为

  else if (isNumeric(userPin) && userPin == pin && pinCount < 3) {
                      System.out.println("Your PIN is correct");
                      break;
                  }

else if (isNumeric(userPin) && userPin.equals(pin) && pinCount < 3) {
                      System.out.println("Your PIN is correct");
                      break;
                  }

答案 5 :(得分:0)

switch会不会在这里变得更好而不是所有那些条件?