2012-04-04 83 views
2

我正在嘗試工廠模式中的一個示例。這給了我ArrayIndexOutOfBoundsException。有人可以解釋嗎?Java中的工廠模式示例

java.lang.ArrayIndexOutOfBoundsException: 0 at com.factory.SalutationFactory.main(SalutationFactory.java:10) 

這是我的課程。

package com.factory; 

public class SalutationFactory { 

    public static void main(String[] args) { 

     try 
     { 
     SalutationFactory factory = new SalutationFactory();   
     factory.getPerson(args[0], args[1]); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public Person getPerson(String name, String gender){ 

     if(gender.equals("M")) 
      return new Male(name); 
     else if(gender.equals("F")) 
      return new Female(name); 
     else 
      return null; 
    } 
} 

package com.factory; 

public class Person { 

    private String name; 
    private String gender; 

    public String getName(){ 
     return name; 
    } 

    public String getGender(){ 
     return gender; 
    } 

} 

package com.factory; 

public class Female extends Person { 

    public Female(String fullname){ 
     System.out.println("Hello Ms " + fullname); 
    } 
} 

package com.factory; 

public class Male extends Person { 

    public Male(String fullname){ 
     System.out.println("Hello Mr " + fullname); 
    } 

} 

感謝 開發

+1

請發佈您的異常堆棧跟蹤! – 2012-04-04 11:36:13

+2

您是否傳遞了命令行參數? – PhyBandit 2012-04-04 11:38:00

+0

java.lang.ArrayIndexOutOfBoundsException:0 \t at com.factory.SalutationFactory.main(SalutationFactory.java:10) – dsmishra1981 2012-04-04 11:42:34

回答

4

因爲這是使用數組中唯一的一行:

factory.getPerson(args[0], args[1]); 

我懷疑你不是提供2個命令行參數。你會需要這樣的東西:

$ java com.factory.SalutationFactory Smith M 
+0

java.lang.ArrayIndexOutOfBoundsException:0 \t at com.factory.SalutationFactory.main(SalutationFactory.java:10)這是堆棧跟蹤。順便說一句,我使用日食。所以當我運行時,控制檯窗口不顯示。那麼我會在哪裏配置我的cmd行參數? – dsmishra1981 2012-04-04 11:40:11

+1

在Eclipse中檢查運行配置。應該有參數選項卡。提供空間分隔值。順便說一句,這是不同的問題。 – 2012-04-04 11:42:59

+0

試圖運行配置 - >參數選項卡。這裏有兩件事。程序參數和VM參數。我將如何將它設置爲空格分隔值? – dsmishra1981 2012-04-04 11:49:19

2
factory.getPerson(args[0], args[1]); 

在這裏,您使用的命令行參數,所以在運行這個應用A您使用通過命令行參數

運行

java SolutionFactory Santosh M 

Here Santosh將被分配到args [0]M將被分配到ARGS [1]

如果不經過任何命令行參數,運行該程序,然後長度ARGS將是和內部主()您呼叫args [0]其中導致ArrayIndexOutOfBounds異常

+0

是的錢德拉,thas正確。但我正在使用eclipse。正如Hardik所說,我需要配置一下eclipse。 – dsmishra1981 2012-04-04 11:50:51

+0

當然可以。您需要配置eclipse IDE的運行環境。 – 2012-04-04 11:56:23

0

我已嘗試相同的示例,並嘗試此處後解決方案。創建此代碼。

String []pin =new String[4]; 
    pin[0]="M"; 
    pin[1]="F"; 
    Factory factory = new Factory(); 
    factory.getPerson(pin[0],pin[1]); 

這將工作

和你放出來應該是 「女」。

0

在使用它們之前,您必須檢查null或對象。只需添加該行

if (args.length >= 2) 
    factory.getPerson(args[0], args[1]); 
/* else 
    Add reminder to provide at least 2 arguments. */