0

ドライバークラス、入出力クラス、および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;
}
}
4

3 に答える 3

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 に答える
1

おそらくあなたは次のことを意味していました:String regex = "[1-8]\."-つまり、間隔1〜8の1桁の後にドットが続きますか?

于 2012-04-14T04:19:42.253 に答える
1

正規表現をに簡略化できますString regex = "[1-8]";

これは、正規表現が1から8までの数字しか受け入れられないことを意味します。

よろしく。

編集 :

あなたのエラーのために:

初期化したことがないnumberValidatorため、コンパイラは、numberValidatorのインスタンスなしでisNumericメソッドにアクセスすることを確認し、medthodisNumericにキーワードstaticがないことを確認します。そのため、メッセージエラーが表示されます。

このようなifステートメントを変更すると、問題が修正されます。

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

または、メソッドをisNumeric()静的にします。

ところで:クラス名は大文字の最初の文字でなければなりません。

于 2012-04-14T04:21:18.307 に答える