Java 如何最小化输入异常

Java 如何最小化输入异常,java,exception,Java,Exception,我有以下代码,可以很好地完成工作,但正如您所看到的,它非常冗长,可能会令人困惑: private void addRecord() { String firstName = JOptionPane.showInputDialog("First Name: "); if (firstName.length() <= 0){ JOptionPane.showMessageDialog(null, "That is not a valid input.","Inp

我有以下代码,可以很好地完成工作,但正如您所看到的,它非常冗长,可能会令人困惑:

private void addRecord() {
    String firstName = JOptionPane.showInputDialog("First Name: ");
    if (firstName.length() <= 0){
        JOptionPane.showMessageDialog(null, "That is not a valid input.","Input error",JOptionPane.ERROR_MESSAGE);
        addRecord();
    }//end if

    String lastName = JOptionPane.showInputDialog("Last Name: ");
    if (lastName.length() <= 0){
        JOptionPane.showMessageDialog(null, "That is not a valid input.","Input error",JOptionPane.ERROR_MESSAGE);
        addRecord();
    }//end if

    String a = JOptionPane.showInputDialog("Student Number: ");
    int studentNumber = Integer.parseInt(a);
    if (a.length() <= 0 || studentNumber == 0){
        JOptionPane.showMessageDialog(null, "That is not a valid input.","Input error",JOptionPane.ERROR_MESSAGE);
        sortMenu();
    }//end if

    String major = JOptionPane.showInputDialog("Major: ");
    if (major.length() <= 0){
        JOptionPane.showMessageDialog(null, "That is not a valid input.","Input error",JOptionPane.ERROR_MESSAGE);
        addRecord();
    }//end if

    String b = JOptionPane.showInputDialog("GPA: ");
    double gpa = Double.parseDouble(b);
    if (b.length() <= 0 || gpa > 4.0){
        JOptionPane.showMessageDialog(null, "That is not a valid input.","Input error",JOptionPane.ERROR_MESSAGE);
        sortMenu();
    }//end if

    tree.addNode(studentNumber, firstName, lastName, major, gpa);
}//end addRecord
private void addRecord(){
String firstName=JOptionPane.showInputDialog(“名字:”);
如果(firstName.length()尝试以下操作:

private void checkString(String st, boolean or) {
    if (st.length() <= 0 || or){
        JOptionPane.showMessageDialog(null, "That is not a valid input.","Input error",JOptionPane.ERROR_MESSAGE);
        addRecord();
    }
}
private void addRecord() {
    String firstName = JOptionPane.showInputDialog("First Name: ");
    checkString(firstName, false);

    String lastName = JOptionPane.showInputDialog("Last Name: ");
    checkString(lastName, false);

    String a = JOptionPane.showInputDialog("Student Number: ");
    int studentNumber = Integer.parseInt(a);
    checkString(a, studentNumber == 0);

    String major = JOptionPane.showInputDialog("Major: ");
    checkString(major, false);

    String b = JOptionPane.showInputDialog("GPA: ");
    double gpa = Double.parseDouble(b);
    checkString(b, gpa > 4.0);

    tree.addNode(studentNumber, firstName, lastName, major, gpa);
}
private void checkString(字符串st、布尔或){
如果(标准长度()4.0);
addNode(studentNumber、firstName、lastName、major、gpa);
}

参数包含在额外条件中。

考虑到所有的if语句都不同,我个人认为没有办法,如果它们很常见,您可以扩展并覆盖JOptionPane方法。edit*我还注意到,如果输入出现任何错误,您将完全重新启动进程,作为一个用户,这一点非常重要这会让我非常恼火。我明白了。有没有办法在同一个对话框中包含所有这些提示?不必为每个提示显示一个框,您可以创建自己的框,其中包含4个字段和动作监听器。我将提取一个方法。我还可以做一些其他事情来减少耦合,但这只是样式和一致性c您的方法称为addRecord(),但它会添加一条记录并读取输入。只是一个想法。在这一点上吹毛求疵是没有意义的,祝你好运。有些东西看起来不太像。如果名字很好,但姓氏不好,你不打算再次询问名字吗?如果你一直有错误,堆栈可能会变得非常大。@JustinKSU在问题中看到我的评论。@JustinKSU第节,我意识到无论什么输入不正确,它仍然会回到最开始。它还没有完成,这肯定是会被更改的。谢谢tho:)我认为它不会工作,因为它会返回addRecord()方法。它最终会变成这样(First Last(fail),第一,最后,数字,主要GPA,(继续第一次执行)数字,主要GPA。