2

我正在处理一个简单的控制台菜单,我无法在 getValidChoice() 方法中获取菜单来选择除数组中的第一个字符之外的任何字符。对于“A”以外的任何字符,我都会收到“无效选择”消息。我究竟做错了什么?下面是代码:

干杯,

class Menu {
    private String[] options;
    public Menu(String[] options) {
        this.options = options;
    }
    public void display() {
        System.out.println("\t***** Property Sale System Menu *****\n");
        System.out.println("A. " + options[1]);
        System.out.println("B. " + options[2]);
        System.out.println("C. " + options[3]);
        System.out.println("D. " + options[4]);
        System.out.println("X. " + options[0] + "\n");
        System.out.println("Enter your selection");
    }
    public char getValidChoice() {
        Scanner input = new Scanner(System.in);
        char choice;
        choice = input.nextLine().charAt(0);
        char[] menuChoices = {'A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'X', 'x'};
        for(int i = 0; i < menuChoices.length; i++) {
            while(choice != menuChoices[i]) {
                System.out.println("Invalid Selection: " + choice + "\n");
                display();
                choice = input.nextLine().charAt(0);
            }
        }
        return choice;
    }
}
4

4 回答 4

0

尝试使用 if 语句而不是 while 循环,例如:

for(int i = 0; i < menuChoices.length; i++) {
    int x = 0;
    int y = 0;

    if(choice != menuChoices[i]) {
        x++;
    }
    elseif(choice == menuChoices[i]) {
        y++;
    }

    if(x == menuChoices.length())
    {
    System.out.println("Invalid Selection: " + choice + "\n");
    display();
    getValidChoice();
    }

    if(y == 1)
        i = menuChoices.length();
}

由于您已经在运行 for 循环来检查所有可能选项的输入,因此您不需要 for 循环中的另一个 while 循环。正如其他人所说,看看你的代码的逻辑,你会看到错误。我认为我刚刚写的应该可以工作,但可能需要进行一些编辑。数学应该检查出来,但我对我的 java 生疏了,把这段代码写在这个小盒子里,所以我可能会去掉一些语法。

希望这可以帮助!

于 2013-04-28T05:09:47.757 回答
0

这应该可以完成工作,无需创建循环:

if(Arrays.asList(menuChoices).contains(choice)){
      //the array contains the choice.
}

看看这里Arrays的类文档。

希望能帮助到你。

于 2013-04-28T04:22:09.207 回答
0

我认为您的嵌套循环让您感到困惑。尝试用新方法简化事情

private boolean isValidChoice(char choice) {
    // Put your for loop in here
}

现在将您的 while 循环更改为

while(!isValidChoice(choice))

更改menuChoices为实例变量,以便您可以在构造函数中对其进行初始化,然后将其读入isValidChoice

于 2013-04-28T04:22:19.070 回答
0

尝试这个

    while ("AaBbCcDdXx".indexOf(choice) == -1) {
        System.out.println("Invalid Selection: " + choice + "\n");
             ...
于 2013-04-28T04:31:50.190 回答