2

工場のパターンで一例を試していました。これにより、ArrayIndexOutOfBoundsException が発生します。誰かが説明できますか?

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);
    }

}

ありがとう開発者

4

4 に答える 4

4

これは配列を使用する唯一の行であるため:

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

2 つのコマンドライン引数を指定していないと思われます。次のようなものが必要です。

$ java com.factory.SalutationFactory Smith M
于 2012-04-04T11:36:54.327 に答える
2
factory.getPerson(args[0], args[1]);

ここではコマンド ライン引数を使用しているため、このアプリケーションの実行中にコマンド ライン引数を渡す必要があります。

を使用して実行

java SolutionFactory Santosh M

ここで、 Santoshargs[0]に割り当てられ、Margs[1]に割り当てられます。

コマンドライン引数を渡さずにこのプログラムを実行すると、args の長さゼロになり、main ()内でargs[0]を呼び出しているため、ArrayIndexOutOfBounds例外が発生します。

于 2012-04-04T11:37:59.307 に答える
0

null またはオブジェクトを使用する前に確認する必要があります。行を追加するだけです

if (args.length >= 2)
    factory.getPerson(args[0], args[1]);
/* else 
    Add reminder to provide at least 2 arguments. */
于 2014-04-03T19:14:34.060 に答える
0

私は同じ例を試しましたが、ここで試した後、解決策です.このコードを作成してください.

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

これはうまくいきます

あなたの出力は「女性」でなければなりません。

于 2012-05-29T08:28:05.263 に答える