0

ネットで調べたのですが、よくわからないのでこちらで質問させていただきます。

以下の小さなプログラムでは、2 つのツアー インスタンスを作成しました。やりたいことは、"Tour tour[]=new Tour[2];" を変更せずに tour[2] を挿入することだけです。

多くの人が ArrayList を推奨していますが、このコードでそれを行う方法がわかりません。

class Test{
public static void main(String args[]){

    class Tour{
        private String tourId;
        private String tourDescription;
        private double tourFee;
        private int numOfBooking;

        public Tour(String tourId,String tourDescription,double tourFee){
            this.tourId=tourId;
            this.tourDescription=tourDescription;
            this.tourFee=tourFee;
        }

        public void print(){
            System.out.println("ID:"+this.tourId);
            System.out.println("Desc:"+this.tourDescription);
            System.out.println("Fee:"+this.tourFee);
        }
    }


    Tour tour[]=new Tour[2];
    tour[0]=new Tour("AB001","TOUR1",100);
    tour[1]=new Tour("AB002","TOUR2",200);
}
}
4

8 に答える 8

1

When you create an array in java like Tour tour[] = new Tour[2] this means you can only add 2 elements to it.

To implement this using an ArrayList you would:

In you import statements add

import java.util.ArrayList

Then replace your array code with this

ArrayList<Tour> tour = new ArrayList<Tour>();
tour.add(new Tour("AB001", "TOUR1", 100);
tour.add(new Tour("AB002", "TOUR2", 200);
tour.add(new Tour("AB003", "TOUR3", 300);
于 2012-05-26T07:41:58.677 に答える
1

あなたが発見したように、配列は実際には固定長であるため、ArrayList. こんな感じで使って…

ArrayList<Tour> tours = new ArrayList<Tour>();
tours.add(new Tour("AB001","TOUR1",100));
tours.add(new Tour("AB002","TOUR2",200));

新しいツアーを追加するたびに、tours.add()もう一度呼び出すだけです。

于 2012-05-26T07:41:25.770 に答える
0

配列シナリオは不可能なので、配列リストを使用して同じプロセスを実行する方法は次のとおりです。

ArrayList<Tour> tours = new ArrayList<Tour>();
tours.add(new Tour("AB001","TOUR1",100));
tours.add(new Tour("AB002","TOUR2",200));
tours.add(/*another tour, and so forth*/);
// to convert to a Tour[], use the following:
Tour[] tourArray = tours.toArray(new Tour[tours.size()]);

ArrayListは、データセットのサイズが不明な場合に非常に役立ちます。

于 2012-05-26T07:41:33.320 に答える
0

配列リストの使用は簡単です、あなたはこのコードを持っています:

Tour tour[]=new Tour[2];
tour[0]=new Tour("AB001","TOUR1",100);
tour[1]=new Tour("AB002","TOUR2",200);

これに置き換えてください:

ArrayList<Tour> tours = new ArrayList<Tour>();
tours.add(new Tour("AB001","TOUR1",100));
tours.add(new Tour("AB002","TOUR2",200));

要素arrayListを取得するには、tour.get(index);を使用します。

于 2012-05-26T07:41:47.453 に答える
0

They are right about the ArrayList; use it like this:

List<Tour> tours = new ArrayList<Tour>();
tours.add(new Tour("AB001","TOUR1",100));
tours.add(new Tour("AB002","TOUR2",200));

you will need to import java.util.*

于 2012-05-26T07:42:36.057 に答える
0

This is not possible unless assigned new. Because primitive arrays are not expandable.
Alternatively you can use collections to dynamically add a new object to the list.
An example is shown below:

List<Tour> tourList = new ArrayList<Tour>( 10 );  
tourList.add( 0, new Tour( "AB001", "TOUR1", 100 ) ); // add at first    
tourList.add( 1, new Tour( "AB002", "TOUR2", 200 ) ); // add next to first   

This way you can add any number of Tour instances at any position of the list.
And you may want to convert the tourList back to a primitive array of Tour
For that you need following code:

Tour [] toursArray = new Tour[ tourList.size() ];
tourList.toArray( toursArray );
于 2012-05-26T07:46:24.443 に答える
0

tour[2] を追加しようとしている場合、配列には 3 つの要素が必要ですよね?

さもないと:

List<Tour> tour = new ArrayList<Tour>();
tour.add(new Tour("AB001", "TOUR1", 100);
tour.add(new Tour("AB002", "TOUR2", 200);
tour.add(new Tour("AB003", "TOUR3", 300);
于 2012-05-26T07:40:33.553 に答える
0

長さが固定されているため、配列では実行できません。
あなたの質問は、すでに代替案をほとんど示しています:

  1. ArrayListを使用する
  2. アレイの新しいインスタンスを作成します

ArrayList は、実際には Java での動的配列の実装であり、これはおそらく実際に必要なものです。

デフォルトのコンストラクターでインスタンス化し、要素ArrayList.add(index,element)を追加して特定の場所に要素を追加するか、ArrayList.add(element)要素を追加します。

コードスナップ:

List<Tour> tours = new ArrayList<Tour>();
tours.add(new Tour("AB001","TOUR1",100));
tours.add(new Tour("AB001","TOUR1",100));

を使用して要素を追加し続けることができますArrayList.add(element)

于 2012-05-26T07:40:56.953 に答える