首页 > 解决方案 > 获取模式匹配或 do while 循环中的 try catch 问题,即使输入所需的输入也会导致循环循环

问题描述

我遇到的问题的具体部分是提示输入名称的这部分代码。

public void setName() {
        do {
            System.out.println("Enter name: ");
            name = input.nextLine();
            try {
                Pattern pattern = Pattern.compile(name);
                Matcher matcher = pattern.matcher("[a-zA-Z]");                
            } catch (PatternSyntaxException e) {
            }
        } while (false);
    }

由于它应该是人名,自然不允许使用数字、标点符号和符号。我使用了一个 do while 循环来循环提示以及一个 try catch 块。为了检查输入,我使用模式匹配来搜索是否输入了数字。出于某种原因,我无法打破循环。我曾尝试使用中断,但当我输入符号时,它只是打破了循环。我应该更改代码的哪一部分以使其仅在输入字母或单词时才中断?

这是整个程序(不包括驱动程序类)

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

public class Sales {

    private int transaction;
    private int salesNum;
    private String name;
    private double amount;
    private double commission;

    Scanner input = new Scanner(System.in);

    //default constructor
    public Sales() {
        transaction = 0;
        salesNum = 0;
        name = "";
        amount = 0.0;
    }

    //getter method
    public int getTransaction() {
        return transaction;
    }

    public int getSalesNum() {
        return salesNum;
    }

    public String getName() {
        return name;
    }

    public double getAmount() {
        return amount;
    }

    public double getCommRate() {
        return commission;
    }

    //setter method
    public void setTransaction() {
        do {
            System.out.println("Enter transaction number: ");
            try {
                transaction = Integer.parseInt(input.nextLine());
                break;
            } catch (NumberFormatException e) {
            }
        } while (true);
    }

    public void setSalesNum() {
        do {
            System.out.println("Enter sales number: ");
            try {
                salesNum = Integer.parseInt(input.nextLine());
                break;
            } catch (NumberFormatException e) {
            }
        } while (true);
    }

    public void setName() {
        do {
            System.out.println("Enter name: ");
            name = input.nextLine();
            try {
                Pattern pattern = Pattern.compile(name);
                Matcher matcher = pattern.matcher("[a-zA-Z]");                
            } catch (PatternSyntaxException e) {
            }
        } while (false);
    }

    public void setAmount() {
        System.out.println("Enter amount: ");
        amount = input.nextDouble();
    }

    @Override
    public String toString() {
        setTransaction();
        setSalesNum();
        setName();
        setAmount();
        return String.format("%s, your transaction number and sales number are %d and %d respectively. Total amount is %.2f.\n", this.getName(), this.getTransaction(), this.getSalesNum(), this.getAmount());
    }
}

标签: javapattern-matchingtry-catchdo-while

解决方案


推荐阅读