【问题标题】:Invalid data added/saved (addPerson)添加/保存的数据无效 (addPerson)
【发布时间】:2013-01-10 10:59:22
【问题描述】:
Scanner sc = new Scanner(System.in);
Boolean valid =  true;
do{
    valid = true;
    //get first name input and valid
    System.out.print("Enter your First Name > ");
    String firstName = sc.nextLine();
    if(firstName.trim().length() > 25){
        valid = false;
    }
    //get last name input and valid
    System.out.print("Enter your Last Name > ");
    String lastName = sc.nextLine();
    if(lastName.trim().length() > 25){
        valid = false;
    }
    //get email input and valid
    System.out.print("Enter your Email > ");
    String email = sc.nextLine();
    if(email.trim().length() > 40){
        valid = false;
    }
      ctrl.addPerson(email, firstName, lastName);

}while(valid == false);

不断提示用户输入无效,但仍添加/保存无效数据 (addPerson)。 我可以理解为什么保存无效,但我应该如何正确使用 if ?谢谢你的帮助!


我已经阅读了大家的建议和建议,以下是编辑后的代码。希望会更好。

Scanner sc = new Scanner(System.in);
boolean valid =  true;
String firstName = null;
String lastName = null;
String email = null;
Date birthday = null;

        do{
            System.out.print("Enter your First Name > ");
            firstName = sc.nextLine();
        }while(firstName.trim().length() > 25);

        do{     
            System.out.print("Enter your Last Name > ");
            lastName = sc.nextLine();
        }while(lastName.trim().length() > 25);

        do{     
            System.out.print("Enter your Email > ");
            email = sc.nextLine();
        }while(email.trim().length() > 40);

        ctrl.addPerson(email, firstName, lastName);

【问题讨论】:

  • 尝试找出哪些条件不成立。添加一些日志输出或使用调试器来执行此操作。
  • 另一个改进是在循环外部声明String firstName, lastName, email = null; //expand to 3 lines.. 和内部,在提示输入之前检查null(再次)。不得不多次输入长名字会令人沮丧,因为我无法正确获取我的电子邮件。
  • @AndrewThompson 是的,你是对的。为了让它不那么令人沮丧,我修改并使用了三个循环在用户输入后立即进行验证。抱歉,我没有得到“在提示输入(再次)之前检查 null。”部分 =p
  • 您更改的代码(这比我的评论更好)使其无关紧要。

标签: java loops if-statement validation


【解决方案1】:

您需要将方法addPerson 置于类似条件下

if(valid) {
    ctrl.addPerson(email, firstName, lastName);
}

我还建议你使用原始类型(boolean 而不是Boolean),这里没有理由使用它的对象表示。

【讨论】:

  • 感谢您的帮助。为了在检查后立即通知用户这样的警告“名字应该
  • @mandy:你应该重构你的代码。我想你想要的是:反复询问名字直到它有效,然后反复询问姓氏直到它有效,然后反复询问电子邮件直到它有效。所以你需要3个循环,而不仅仅是一个。尝试制作简短的方法。每个循环都应该在一个方法中返回名字(第一种方法)、姓氏(第二种方法)和电子邮件(第三种方法)。
  • @JBNizet 谢谢!我已经相应地修改了代码,现在更好了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 2013-09-04
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多