Java中的数据验证
好吧,让我们说,这过去工作得很好,然后我今天再次启动,现在它不 pin是1234,无论我做什么,它都表示无效 是的,我知道它不会第三次检查。我也必须解决这个问题: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);
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;
}