Java:验证输入是否为某个数字

Java:验证输入是否为某个数字,java,Java,驱动程序类、inputoutput类和numberValidator类。用户应使用j选项窗格弹出框输入数字1-8,如果输入的不是1-8,则应显示错误消息。如果数字为1-8,则其余代码(此处未编写)应继续运行。我出错了,有人知道我错在哪里吗 ///Driver class (excludes package)//// public class Driver { public static void main(String[] args) { InputOutput inpu

驱动程序类、inputoutput类和numberValidator类。用户应使用j选项窗格弹出框输入数字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;
}
}

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

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

您可以将正则表达式简化为
String regex=“[1-8]”

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

问候

编辑:

对于您的错误:

您从未初始化过
numberValidator
,因此编译器会看到您希望在没有numberValidator实例的情况下访问isNumeric方法,并看到medthod isNumeric没有关键字static。这就是它告诉您消息错误的原因

在您的if声明中,这样做可以纠正您的问题:

if ( new numberValidator().isNumeric(stringChoice))
或者将方法
isNumeric()
设为静态


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

您可以将正则表达式简化为
String regex=“[1-8]”

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

问候

编辑:

对于您的错误:

您从未初始化过
numberValidator
,因此编译器会看到您希望在没有numberValidator实例的情况下访问isNumeric方法,并看到medthod isNumeric没有关键字static。这就是它告诉您消息错误的原因

在您的if声明中,这样做可以纠正您的问题:

if ( new numberValidator().isNumeric(stringChoice))
或者将方法
isNumeric()
设为静态


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

出现了什么错误?是否不管用户选择什么,它都会继续运行?在下面的代码中,我添加了一个
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];

您得到的错误是什么?是否不管用户选择什么,它都会继续运行?在下面的代码中,我添加了一个
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];

您好,我的错误是无法从静态上下文引用非静态方法isNumeric(java.land.String)。不幸的是,我需要让我的代码与JOptionPane一起运行,并接受一个数字。我将正则表达式更改为:String regex=“[1-8]”;我仍然会遇到错误:/将方法isNumeric()更改为
公共静态布尔值isNumeric(String str)
,然后重试。如果问题解决了,请勾选您的问题已解决且您已选择答案。如果您的问题已回答,请勾选正确答案,以便所有人都知道问题已解决。ThanksHi,我的错误是无法从静态上下文引用非静态方法isNumeric(java.land.String)。不幸的是,我需要让我的代码与JOptionPane一起运行,并接受一个数字。我将正则表达式更改为:String regex=“[1-8]”;我仍然会遇到错误:/将方法isNumeric()更改为
公共静态布尔值isNumeric(String str)
,然后重试。如果问题解决了,请勾选您的问题已解决且您已选择答案。如果您的问题已回答,请勾选正确答案,以便所有人都知道问题已解决。谢谢,我已经做了更改,但仍然得到一个非静态方法isNumerica(java.lang.String)无法从静态上下文错误中引用。谢谢,我已经做了更改,但仍然得到一个非静态方法isNumerica(java.lang.String)无法从静态上下文错误中引用。感谢无法从静态上下文引用非静态方法isNumeric(java.lang.String)。无法从静态上下文引用非静态方法isNumeric(java.lang.String)。