驱动程序类,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;
}
}
答案 0 :(得分:1)
可能你的意思是:String regex = "[1-8]\."
- 即1-8区间的单个数字后跟一个点?
答案 1 :(得分:1)
您可以将正则表达式简化为String regex = "[1-8]";
。
这意味着你的正则表达式只能接受1到8之间的数字。
问候。
编辑:
您的错误:
您从未初始化numberValidator
,因此编译器会看到您想要在没有numberValidator实例的情况下访问isNumeric方法,并且看到medthod isNumeric没有关键字static。这就是它告诉你消息错误的原因。
Changin你这样的if语句纠正了你的问题:
if ( new numberValidator().isNumeric(stringChoice))
或使您的方法isNumeric()
成为静态。
顺便说一句:类名必须有大写的第一个字符。
答案 2 :(得分: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];