2013-06-13 80 views
-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”。通过命令行访问枚举

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

请解释一下..

+0

你的括号不匹配 –

+0

请不要”不要改变问题中的代码,不管它是多么的错误:http://meta.stackexchange.com/questions/101583/when-is-it-close-to-edit-someone-elses-code?rq=1 。正确的代码可以显示在答案中。 –

回答

5

您需要将String arg从命令行转换为枚举值。

Child c = Child.valueOf(args[0]); 
5

使用Enum.valueOf()。它需要一个枚举类和字符串作为参数,并试图通过该名称找到一个枚举。

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

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

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 
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的孩子没有一个孩子存在:请提供孩子的名字

希望这能解决你的问题