簡體   English   中英

Java:驗證輸入是否為一定數字

[英]Java: validating if input is a certain number

驅動程序類,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之間的數字。

問候。

編輯:

對於您的錯誤:

您從未初始化過numberValidator因此編譯器看到要在沒有numberValidator實例的情況下訪問isNumeric方法,並看到方法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];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM