使用String / char创建子菜单?

时间:2013-04-18 02:23:29

标签: java

public static String getSubMenu(String submenu){
        Scanner keyboard = new Scanner(System.in);
        String chosen="", A="A",B="B", a="a", b="b";
        do{
        chosen = keyboard.next();
        keyboard.nextLine();
        System.out.print("\n\n");
        }while(chosen.compareTo(A));
        return chosen;
    }
    //This function below is fine.
    public static void Menu(){
        String unem="";
        do{
        System.out.println("Sub Menu");
        System.out.println("Select an Option\n\n");
        System.out.println("a.Sort by name\n" +                            
                           "b.Sort by time\n" +
                           "c.Exit sub-menu\n\n");
        System.out.print("Input the number for the selected option: ");
        unem= getSubMenu(unem);
        if("a".equals(unem)|| "A".equals(unem)){

        }
        if("b".equals(unem)|| "B".equals(unem)){

        }
    }while ("a".equals(unem) ||"b".equals(unem) || "A".equals(unem) || "B".equals(unem));

    }

}

嗨,我正在尝试制作一个子菜单。正如您在函数Menu中看到的那样,当调用getSubMenu时,用户必须在函数getSubMenu中输入所选选项。我浏览了我的教科书和在线,似乎你不能在诸如

之类的参数中使用char
char a="a";
if(a != b); 

如果您可以在上述功能中使用字符而不是字符串,请说明。

但继续前进。我现在要做的是让getSubMenu返回一个包含'A' || 'a' || 'b' || 'B' || 'c' || 'C'的字符串,然后在用户没有将任何这些作为输入时循环。我尝试过使用compareTo,但收到了Type mismatch: cannot convert from int to boolean error我该如何改进呢?我可以使用什么语法,以便这可以工作。

感谢所有为此提供帮助和贡献的人。

编辑:新的工作职能

  public static String getSubMenu(String submenu){
            Scanner keyboard = new Scanner(System.in);
            boolean looped = true;
            String chosen="";
            do{
            chosen = keyboard.next();
            keyboard.nextLine();
            System.out.print("\n\n");
            if("a".equals(option)|| "A".equals(option) || "b".equals(option)|| "B".equals(option) || "c".equals(option)|| "C".equals(option)){
                looped = false;
            }
            else
                System.out.println("Wrong input");
            }while(looped);
            return option;

这可能不是我的目标,但它仍然可以完成它。

2 个答案:

答案 0 :(得分:1)

while(chosen.compareTo(A))是您应该收到错误的地方。方法compareTo(String)返回int,您无法在while(boolean expression)中使用它,它需要一个布尔表达式,该表达式将计算为truefalse。我正在粘贴代码以供参考,即兴发布:

 public static String getSubMenu(String submenu) {
    Scanner keyboard = new Scanner(System.in);
    List<String> list = Arrays.asList(new String[]{"A","B","C"});
    do {
        chosen = keyboard.next();
        keyboard.nextLine();
        System.out.print("\n\n");
    } while (chosen!=null && list.contains(chosen.toUpperCase()));
    return chosen;
}

答案 1 :(得分:0)

compareTo()比较2个对象并返回一个表示哪个对象更大的int。由于它不是布尔值,因此do while循环无法编译。如果您正在寻找用户的特定输入,请使用此代码段。

        do
        {
            chosen = keyboard.next();
            keyboard.nextLine();
            System.out.print("\n\n");
        }
        while (!chosen.trim().equalsIgnoreCase("a"));

您需要trim()字符串来删除空白字符,您可以使用equalsIgnoreCase()来匹配“A”和“a”。