【问题标题】:Make user enter String again after invalid input无效输入后让用户再次输入字符串
【发布时间】:2021-05-27 22:40:24
【问题描述】:

当用户输入无效数据但继续工作时程序抛出错误,我如何强制用户输入数据直到他输入正确的数据?我试过System.exit(0),但那个停止程序。

也尝试使用while,但不知道如何创建消息以说“嘿无效输入,再试一次!”

public void setName(String name) {
        if (name.matches("[a-zA-Z]+")) {
            this.name = name;
        } else {
            System.out.println("Only letters for name!");
            System.exit(0);
        }
    }

 public void setName(String name) {
        while (name.matches("[a-zA-Z]+")) {
            this.name = name;
        } else { //how to make message here?
            System.out.println("Only letters for name!");
            System.exit(0);
        }
    }

我之前看到了一些关于此的问题,但找不到与我的问题完全相似的东西,因为我有这个正则表达式。

我也有这个来添加新用户:

  System.out.println("Add first name for passenger: ");
    passengers.setName(scanner.nextLine());

这是我的方法registerNewPassenger 等等lastNameemail,在方法结束时我有这个

 ArrayList<Passengers> passengersList = new ArrayList<>();
    passengersList.add(passengers);
    System.out.println(passengersList);

在我的主目录中,我只是称之为。

【问题讨论】:

    标签: java


    【解决方案1】:

    可能是这样的

    private Scanner scanner = new Scanner(System.in);
    private String name;
    
    public void setName() {
        String aName = "";
        while (aName.isEmpty()) {
            System.out.print("Enter Name: --> ");
            aName = scanner.nextLine(); 
            if (!aName.matches("[a-zA-Z]+")
                System.err.println("Invalid Entry (" + name + ")! Only letters for name!");
                aName = "";
            }
        }
        this.name = aName;
    }
    

    【讨论】:

    • 这行得通,但我在另一个类中有注册新用户的方法,我使用 setter 设置新名称,现在当我添加这个验证时,它都是混合的
    【解决方案2】:

    在 while 循环中不断询问名称,直到它与正则表达式匹配。

        public void setName() {
        Scanner sc = new Scanner(System.in);
        String name = sc.nextLine();
        while (!name.matches("[a-zA-Z]+")) {
            //Name not matched
            System.out.println("Please Enter a valid name");
            name = sc.nextLine();
        }
        this.name = name;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多