-1
enum Child {
    David(23),
    Johnson(34),
    Brackley(19);
  }

  int age;

  Child(int age) {
    this.age=age; 
  }

  void getAge() {
    return age; 
  }

  public class Test {
    public static void main(String args[]) {
    ---------------------
  }
}

如果我必须输入命令行参数,例如。如果我输入 java Test David 那么它应该打印“23”。

那么我们如何通过命令行访问枚举..?main 方法中应该写什么?

请解释..

4

4 回答 4

8

您需要将命令行中的字符串 arg 转换为枚举值。

Child c = Child.valueOf(args[0]);
于 2013-06-13T10:45:40.130 回答
5

使用Enum.valueOf(). 它以枚举类和字符串作为参数,并尝试通过该名称查找枚举。

注意:IllegalArgumentException如果找不到则抛出...您必须明确地捕获它,因为这是一个未经检查的异常。

另一种解决方案是.valueOf()在您的枚举类本身(MyEnum.valueOf("whatever"))上使用。与异常处理相同的警告也适用。

于 2013-06-13T10:45:18.217 回答
1

您的解决方案:

public enum Child {

    David(23),
    Johnson(34),
    Brackley(19);

    private int age;

    private Child(int age) {
        this.age=age; 
    }

    int getAge(){
        return age;
    }

    public static Child getAgeFromName(String name) {
        for(Child child : Child.values()) {
            if(child.toString().equalsIgnoreCase(name)) {
                return child;
            }
        }
        return null;
    }

    public static void main(String[] args) {
        if(args.length != 0) {
            Child child = Child.getAgeFromName(args[0]);
            if(child != null) {
                System.out.println(args[0] + " age is " + child.getAge());
            }else {
                System.out.println("No child exists with name " + args[0]);
            }
        } else {
            System.out.println("please provide a child name");
        }


    }
}

输入:输出
java 儿童大卫:大卫年龄是 23 岁
java 儿童 sam:不存在名为 sam
的儿童 java 儿童:请提供儿童姓名

希望这能解决你的问题

于 2013-06-13T11:32:49.833 回答
0

您可以执行以下操作

enum Child {
   David(23),
   Johnson(34),
   Brackley(19);

 int age;

 Child(int age) {
   this.age=age; 
 }

 public int getAge() {
   return age; 
 }

   public static void main(String args[]) 
   {
       for(Child c : Child.values())
       {
               //Here you can check for you equality of name taken as command line arg
           System.out.println("Name is " + c + " and age is " + c.getAge());
       }
   }

}

输出如下

Name is David and age is 23
Name is Johnson and age is 34
Name is Brackley and age is 19
于 2013-06-13T10:55:33.680 回答