【问题标题】:Java enums as integers, Scanner, and menu optionsJava 枚举作为整数、扫描仪和菜单选项
【发布时间】:2016-10-27 18:08:49
【问题描述】:

我不熟悉 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 视为受限枚举类型?

希望这是有道理的,谢谢。

【问题讨论】:

    标签: java enums int java.util.scanner


    【解决方案1】:

    你可以使用例如:

    MenuOptions.values()[1]
    

    要获得 second 枚举,编号从 0 开始。

    values() 是所有给定枚举值的数组。

    你的情况是这样的:

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

    【讨论】:

    • 谢谢。奇迹般有效。它确实抛出了一个 ArrayIndexOutOfBoundsException 但我把它和另一个一起抓住了。
    • @FrankMeana 检查用户提供的数字是否不超过数组大小会更干净。
    猜你喜欢
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 2020-08-17
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    相关资源
    最近更新 更多