Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的数据验证_Java_Validation - Fatal编程技术网

Java中的数据验证

Java中的数据验证,java,validation,Java,Validation,好吧,让我们说,这过去工作得很好,然后我今天再次启动,现在它不 pin是1234,无论我做什么,它都表示无效 是的,我知道它不会第三次检查。我也必须解决这个问题: import java.util.Scanner; import java.util.Scanner; public class ATM { public ATM() { Scanner console = new Scanner(System.in);

好吧,让我们说,这过去工作得很好,然后我今天再次启动,现在它不

pin是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;  
        }
  }

任何帮助都将不胜感激。

userPin==pin
应该是
userPin.equals(pin)
您不能将
String
对象与
=
进行比较。您应该使用
equals()
方法。我知道,如果您是java新手,这是没有意义的,但是
=
表示“它们是相同的引用吗?”,
equals()表示“它们相等吗?”。

对于精确
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
方法inted of
=
。从

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

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

在代码中声明两个字符串变量:

  final String pin = "1234";
  String userPin = "";
然后验证它们是否等于

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

将此更改为

  else if (isNumeric(userPin) && userPin == pin && pinCount < 3) {
                      System.out.println("Your PIN is correct");
                      break;
                  }
else if(isNumeric(userPin)&&userPin==pin&&pinCount<3){
System.out.println(“您的PIN是正确的”);
打破
}
这个

else if(isNumeric(userPin)&&userPin.equals(pin)&&pinCount<3){
System.out.println(“您的PIN是正确的”);
打破
}

这里的
开关是否比所有那些if条件更好?

if(userPin.length()<4 | | userPin.length()>4)
应该简化为
if(userPin.length())!=4
。此外,
isNumeric
检查是多余的。您必须打开非常特定的条件。因此,您可以打开userPin.length,甚至打开userPin的值,但这仅在您查找非常特定的值时才起作用。否则…if是正确的结构。@user299980这就是为什么您的代码有时可以使用有时不需要。字符串文字可能引用相同的内存位置,但不一定如此。如果您好奇,请参阅String.intern()上的javadoc。
  else if (isNumeric(userPin) && userPin == pin && pinCount < 3) {
          System.out.println("Your PIN is correct");
          break;
      }
userPin == pin
 userPin.equals(pin)
  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;
                  }