Java中是否存在任何检测无输入的异常?

时间:2011-02-19 03:08:57

标签: java exception try-catch variable-assignment

如果我想检测用户是否输入了任何字符,我需要添加到try catch块中的什么异常?

这是我的代码,我想知道用户是否输入了任何内容,或者用户的输入是否已保存在addressbook中。我使用数组来存储我的条目:

public void addEntry() {
    entry[counter] = new AddressBookEntry();
    entry[counter].setName(JOptionPane.showInputDialog("Enter name: "));
    entry[counter].setAdd(JOptionPane.showInputDialog("Enter add: "));
    entry[counter].setPhoneNo(JOptionPane.showInputDialog("Enter Phone No.: "));
    entry[counter].setEmail(JOptionPane.showInputDialog("Enter E-mail: "));
    counter++;
}

我需要试一试吗?这是我的完整代码:

public class AddressBook {

private AddressBookEntry entry[];
private int counter;
private String SName;
private int notfound = 0;

public static void main(String[] args) {
    AddressBook a = new AddressBook();
    a.entry = new AddressBookEntry[100];
    int option = 0;
    try {
        while (option != 5) {
            String content = "Choose an Option\n\n"
                    + "[1] Add an Entry\n"
                    + "[2] Delete an Entry\n"
                    + "[3] Update an Entry\n"
                    + "[4] View all Entries\n"
                    + "[5] View Specific Entry\n"
                    + "[6] Exit";
            option = Integer.parseInt(JOptionPane.showInputDialog(content));
            switch (option) {
                case 1:
                    a.addEntry();
                    break;
                case 2:
                    a.deleteEntry();
                    break;
                case 3:
                    a.editEntry();
                    break;
                case 4:
                    a.viewAll();
                    break;
                case 5:
                    a.searchEntry();
                    break;
                case 6:
                    System.exit(1);
                    break;
                default:
                    JOptionPane.showMessageDialog(null, "Invalid Choice!");
            }
        }
    }catch(NumberFormatException e){
        JOptionPane.showMessageDialog(null, "Please Choose a Number in the displayed Menu");
    }
}

public void addEntry() {
    entry[counter] = new AddressBookEntry();
    entry[counter].setName(JOptionPane.showInputDialog("Enter name: "));
    entry[counter].setAdd(JOptionPane.showInputDialog("Enter add: "));
    entry[counter].setPhoneNo(JOptionPane.showInputDialog("Enter Phone No.: "));
    entry[counter].setEmail(JOptionPane.showInputDialog("Enter E-mail: "));
    counter++;
}

public void viewAll() {
    String addText = "  NAME\tADDRESS\tPHONE NO.\tE-MAIL ADD\n\n";
    int nonNull = 0;
    for (int i = 0; i < entry.length; i++) {
        if (entry[i] != null) {
            addText = addText + entry[i].getInfo() + "\n";
            nonNull++;
        }
        if (nonNull == counter) {
            break;
        }
    }
    JOptionPane.showMessageDialog(null, new JTextArea(addText));
}

public void searchEntry() {
    SName = JOptionPane.showInputDialog("Enter Name to find: ");
    searchMethod();
}

public void searchMethod() {
    for (int i = 0; i < counter; i++) {
        if (entry[i].getName().equals(SName)) {
            JOptionPane.showMessageDialog(null, entry[i].getInfo2());
            notfound = 0;
            break;
        } else {
            notfound++;
        }
    }
    if (notfound != 0) {
        JOptionPane.showMessageDialog(null, "Name Not Found!");
    }
}

public void editEntry() {
    SName = JOptionPane.showInputDialog("Enter Name to edit: ");
    for (int i = 0; i < counter; i++) {
        if (entry[i].getName().equals(SName)) {
            entry[i] = new AddressBookEntry();
            entry[i].setName(JOptionPane.showInputDialog("Enter new name: "));
            entry[i].setAdd(JOptionPane.showInputDialog("Enter new add: "));
            entry[i].setPhoneNo(JOptionPane.showInputDialog("Enter new Phone No.: "));
            entry[i].setEmail(JOptionPane.showInputDialog("Enter new E-mail: "));
            notfound = 0;
            break;
        } else {
            notfound++;
        }
    }
    if (notfound != 0) {
        JOptionPane.showMessageDialog(null, "Name Not Found!");
    }
}

public void deleteEntry() {
    SName = JOptionPane.showInputDialog("Enter Name to delete: ");
    for (int i = 0; i < counter; i++) {
        if (entry[i].getName().equals(SName)) {
            JOptionPane.showMessageDialog(null, "Found!");
            entry[i] = null;
            break;
        }
    }
}

}

我的addEntry()方法存在问题,因为我想检测用户的新添加条目是否已存储在我的地址簿中,以及当我询问“输入名称:”时用户是否输入了任何内容在JOptionPane中仍然按OK。

4 个答案:

答案 0 :(得分:2)

我不知道任何异常,但您可以使用length方法。

示例:

input=(JOptionPane.showInputDialog(frame1, "what do you want?"));
    if(input.length() > 0) {
        l1.setText("a " + input + " on the way!");
    }
    else{
        l1.setText("would you please choose something");
    }

如果长度大于零

答案 1 :(得分:1)

通常,当某个方法抛出异常并且您没有捕获它时,编译器会提醒您(对于已检查的异常)或者在运行时抛出异常时,您会在控制台上看到一个很好的堆栈跟踪(标准错误)。如果你没有看到这个,那么你已经捕获(并抛弃)了这个异常,或者没有例外。

用户没有输入任何字符本身并不是导致任何人抛出异常的条件,我们需要更多的上下文。

答案 2 :(得分:1)

虽然对你的问题不太清楚,但我会尽力回答。
在这种情况下,您可以在此处手动创建自己的例外,例如

throw new MyException();    

由于您的条件“ 用户未输入任何字符 ”本身并不清楚,我建议您可以尝试通过检查参数的数量来抛出异常传递给命令行。
如果它为0,即没有传递参数,则可以抛出自己的异常。

但就其本身而言,不会抛出异常。

答案 3 :(得分:1)

根据您更新的问题,您似乎在谈论来自对话框的用户输入。 javadoc表示如果用户取消了对话框,showInputDialog方法将返回用户的String(可能为空)或null

不会抛出任何异常。取消对话框的用户不是“例外”。