0

入力したデータが 1 つではなくリスト内のすべての要素に書き込まれているという問題があり、その理由を理解するのに本当に苦労しています。

public class Courts implements Serializable {

private static final long serialVersionUID = 1;
List<String[][]> allCourts = new ArrayList<String[][]>(10);

}

そして、これが私がこのリストを変更するために使用している方法です

public String bookCourt(int courtNo,int day,int time) throws RemoteException{
    String [][] tmp = court.allCourts.get(courtNo - 1);

    if(tmp[day-1][time-1].equals("Available")){

        tmp[day-1][time-1] = logged.name;

        court.allCourts.set(courtNo - 1,tmp);
        return "Your booking has been accepted, booking is on (" + court.courtNames[courtNo - 1] + 
                                                               "),(" + court.days[day - 1] + ") at ("
                                                               + court.times[time - 1]  + ").\n";
    }

    return "Court already taken by " + tmp[day-1][time-1] + ".\n";
}

フォーマットが少しおかしくなりました。申し訳ありません..

これがすべきことは、courtNo-1 インデックスの allCourts リストから 2D 配列を取得し、指定された位置の文字列が「使用可能」であるかどうか、およびそれが Logged.name に設定されているかどうかを確認することです。

次に、この更新された 2D 配列を取得し、リスト内の配列を上書きする必要があります。唯一の問題は、allCourts リスト内のすべての要素に名前または配列を書き込むことです。理由はわかりません。また、あなたが提供できる助けに感謝します。自分。

4

1 に答える 1

0

なぜそれがあなたが言及した特定の振る舞いをしているのかわかりません。なぜなら、私には、初期化がないためにNullPointerExceptionsをスローするだけのように見えるからです。どこかで、allCourtsすべての要素が同じ配列になるように初期化していると思います。

ただし、覚えておくべきことがいくつかあります。Javaでは、配列は他のものと同じように単なるオブジェクトです。tmpは、の位置に格納されている参照によっても参照される配列オブジェクトへの参照です。setを呼び出すと、配列が上書きされるのではなく、すでに等しい配列参照が上書きされます。したがって、何もしません。courtNo-1allCourtstmpcourt.allCourts.set(courtNo - 1,tmp);

于 2012-08-19T21:54:57.013 に答える