0

一个驱动类、输入输出类和 numberValidator 类。用户将使用 j-option 窗格弹出框输入数字 1-8,如果输入的不是 1-8,则应该显示错误消息。如果数字是 1-8,则其余代码(此处未写)应该继续运行。我收到错误,有人看到我错在哪里了吗?

///Driver class (excludes package)////

public class Driver {
    public static void main(String[] args) {
       InputOutput inputoutput = new InputOutput();

       inputoutput.displayMenu();
    }
}

///InputOutput class (excludes package and import for JOptionPane)///
public class InputOutput {
    public int displayMenu()
    {

        String stringChoice = JOptionPane.showInputDialog("Restaurant:\n"
                + "1. Pancakes: $10.00\n"
                + "2. Bananas: $1.00\n"
                + "3. Bread: $2.00\n");
        if (numberValidator.isNumeric(stringChoice)){
            choiceNumber = Integer.parseInt(stringChoice);   
        }
        return choiceNumber;
    }

///numberValidator class code (excludes package)///
public class numberValidator {
    public boolean isNumeric(String str)
   {
        boolean valid = true;
        String regex = "[1-8/.]*";
    valid = str.matches(regex);
    return valid;
}
}
4

3 回答 3

1

可能您的意思是:String regex = "[1-8]\."- 即间隔 1-8 中的单个数字后跟一个点?

于 2012-04-14T04:19:42.253 回答
1

您可以将您的正则表达式简化为String regex = "[1-8]";.

这意味着您的正则表达式只能接受 1 到 8 之间的数字。

问候。

编辑 :

对于您的错误:

您从未初始化numberValidator,因此编译器看到您想要在没有 numberValidator 实例的情况下访问 isNumeric 方法,并看到方法 isNumeric 没有关键字 static。这就是为什么它告诉你消息错误。

像这样更改您的 if 语句可以解决您的问题:

if ( new numberValidator().isNumeric(stringChoice))

或使您的方法isNumeric()静态。

顺便说一句:类名的第一个字符必须大写。

于 2012-04-14T04:21:18.307 回答
1

你得到什么错误?仅仅是不管用户选择什么,它都会继续运行吗?在下面的代码中,我添加了一个如果选择的值不是数字else,它将重新运行该方法。displayMenu()

public class InputOutput {
    public int displayMenu()
    {

        String stringChoice = JOptionPane.showInputDialog("Restaurant:\n"
                + "1. Pancakes: $10.00\n"
                + "2. Bananas: $1.00\n"
                + "3. Bread: $2.00\n");
        if (numberValidator.isNumeric(stringChoice)){
            choiceNumber = Integer.parseInt(stringChoice);   
        }
        else {
            return displayMenu();
            }
        return choiceNumber;
    }

但是对于您的问题,使用选项下拉列表会更好吗?...

String[] options = new String[]{"Pancakes: $10.00","Bananas: $1.00","Bread: $2.00"}

int chosenIndex = JOptionPane.showOptionDialog(null, "Choose a menu item", "Menu", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);

String chosenValue = options[chosenIndex];
于 2012-04-14T04:29:33.103 回答