正在处理一个简单的控制台菜单,我不能在我的生活中获取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;
}
}
答案 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上生锈了,并在这个小盒子里写了这个代码,所以我可能会有一些语法。
希望这有帮助!