循环遍历字符数组不工作 - Java

时间:2013-04-28 04:17:55

标签: java

正在处理一个简单的控制台菜单,我不能在我的生活中获取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 个答案:

答案 0 :(得分:0)

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

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

查看Arrays课程文档here

希望它有所帮助。

答案 1 :(得分:0)

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

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

现在将你的while循环更改为

while(!isValidChoice(choice))

menuChoices更改为实例变量,以便您可以在构造函数中初始化它,然后在isValidChoice

中读取它

答案 2 :(得分:0)

试试这个

    while ("AaBbCcDdXx".indexOf(choice) == -1) {
        System.out.println("Invalid Selection: " + choice + "\n");
             ...

答案 3 :(得分: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上生锈了,并在这个小盒子里写了这个代码,所以我可能会有一些语法。

希望这有帮助!