2013-06-13 129 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的孩子沒有一個孩子存在:請提供孩子的名字

希望這能解決你的問題