Java枚举为整数,扫描程序和菜单选项

时间:2016-06-25 04:29:44

标签: java enums int java.util.scanner

我不熟悉Java以及枚举类型。

我正在尝试使用枚举类型作为其有效选项进行菜单选择,并为用户显示以下整数选择:

欢迎来到Frank的银行应用程序。

输入:
    1.创建银行     2.在银行添加分行     3.将客户添加到分支机构
    4.与客户进行交易     5.显示银行,分行,客户和交易     6.退出申请。

选择 - >

但是,我遇到的问题是枚举常量似乎不接受整数值作为其名称。所以我现在被困在他们的信件上。这是我到目前为止的代码:

import java.util.Scanner;

enum MenuOptions
{
    z("Continue"), a("Create Bank"), b("Add Branch"), c("Add Customer"),
    d("Make Transaction"), e("Display Information"), q("Quit");

    // field
    private String meaning;

    // constructor
    MenuOptions(String meaning)
    {
        this.meaning = meaning;
    }

    // getters
    public String getMeaning()
    {
        return meaning;
    }
}


public class Main
{
    private static Scanner input = new Scanner(System.in);

    public static void main(String[] args)
    {
        System.out.println("Welcome to Frank's Banking Application.");

        MenuOptions menuOptions = MenuOptions.z;

        while (menuOptions != MenuOptions.q)
            try
            {
                menu();


                menuOptions = MenuOptions.valueOf(input.nextLine());


                switch (menuOptions)
                {
                    case a:
                        //createBank();
                        break;

                    case b:
                        //addBranch();
                        break;

                    case c:
                       // addCustomer();
                        break;

                    case d:
                       // makeTransaction();
                        break;

                    case e:
                        break;

                    case q:
                        System.out.println("Goodbye.");
                        break;

                    default:
                        System.out.println("Selection out of range. Try again");
                }
            }
            catch (IllegalArgumentException e)
            {
                System.out.println("Selection out of range. Try again:");
            }


    }

    public static void menu()
    {
        System.out.println("\nEnter:");
        System.out.println("\ta. Create Bank");
        System.out.println("\tb. Add a branch to a Bank");
        System.out.println("\tc. Add a customer to a Branch");
        System.out.println("\td. Make a transaction with a customer");
        System.out.println("\te. Display Banks, Branches, Customers, and Transactions.");
        System.out.println("\tq. Quit Application.");
        System.out.print("\nSelection -> ");

    }
}

可以看出,我必须编辑所有枚举以使用字母作为名称,以便允许扫描程序的用户输入使用valueOf方法匹配其类型。

是否有办法允许选项:来自键盘的用户输入的1,2,3,4,5,6被视为限制枚举类型?

希望有意义并感谢。

1 个答案:

答案 0 :(得分:2)

您可以使用例如:

MenuOptions.values()[1]

要获取第二个枚举,编号从0开始。

values()是一个包含所有枚举值的数组。

在你的情况下,它会像:

MenuOptions.values()[Interger.parseInt(input.nextLine().trim()) - 1]