-8

これは私が取り組んでいる方法です。結果の Array[] を返すか、null を返す必要があります。ただし、テストしようとすると NullPointerException エラーが発生します。ここ数時間ずっと探していたのですが、どこにも行き着きませんでした。苦しんでいる学生のための助けをいただければ幸いです。

public Item[] searchByName(String name) {

    String n = name;
    ArrayList<Item> sortName = new ArrayList<Item>();
    Item[] matchArr;
    boolean noResult = false;

    for(int j = 0; j < itemInventory.size(); j++){
        if(itemInventory.get(j).getName().equalsIgnoreCase(n) == true)
            sortName.add(itemInventory.get(j));
        else
            noResult = true;
    }
    matchArr = new Item[sortName.size()];
    for(int j = 0; j < sortName.size(); j++){
        matchArr[j] = sortName.get(j);
    }
    if(noResult == true)
        return null;

    else
        return matchArr;

}

//改訂版 //itemInventory は、インベントリおよびソートされるオブジェクトの ArrayList です。

public Item[] searchByName(String name) {

    String n = name;
    ArrayList<Item> sortName = new ArrayList<Item>();
    Item[] matchName;

    for(int j = 0; j < itemInventory.size() ; j++){
        if(itemInventory.get(j) != null){
            if(itemInventory.get(j).getName().equalsIgnoreCase(n) == true){
                sortName.add(itemInventory.get(j));
                System.out.println(j + " Is a match");
            }
        }               
    }

    if(sortName.size() == 0)
        return null;
    else{
        matchName = sortName.toArray(new Item[sortName.size()]);
        return matchName;
    }
4

1 に答える 1

2

おそらく、この行itemInventory.get(j).getName().equalsIgnoreCase(n) == trueは NPE を引き起こします。名前を取得する前に、itemInventory.get(j)そうでないことを確認してください。null

if(itemInventory.get(j)!=null) //only then get the name
    if(itemInventory.get(j).getName().equalsIgnoreCase(n))
于 2012-12-11T06:27:08.993 に答える