0

ArrayListdouble の2 つの異なる配列と文字列の配列があります

 public class tester {

        private final static String TIME[]={ "8:00", "9:00", "10:00", "11:00", 
            "12:00", "13:00", "14:00", "15:00", "16:00", "17:00", "18:00", "19:00"  };


        public static void main(String[] args){
            ArrayList<Double> stat = new ArrayList<>();
            stat.add(1.0);
            stat.add(2.0);
            stat.add(3.0);
            stat.add(4.0);
            stat.add(5.0);
            stat.add(6.0);
            stat.add(7.0);
            stat.add(8.0);
            stat.add(9.0);
            stat.add(10.0);
            stat.add(11.0);
            stat.add(12.0);
            int i = 0;
            for (String time : TIME) {
                System.out.println(time+" "+stat.get(i));
                i++;
            }

私の質問は非常に簡単です。各配列の同じ位置を一致させたい場合、これが各配列をループする最良の方法ですか? それでstat.get(0) ==TIME.get(0)

アップデート

まず第一に、迅速な対応に感謝します。クラスを作成するというアイデアは気に入っていますが、知っておくべきことがあります。

あなたが見たのは、私が自分のデータをテストするために使用するテスト クラスでした。

通常、stat ArrayList は次のように定義されているため、2 つの配列は常に同じサイズになることがわかっています。

stat は、データベースから取得したデータの計算値です。stat の値は時間に基づいており、GUI に送り返されてグラフと表に表示されます。

これは、TIME ごとに既存の値が存在するため、stat.get(0) は常に TIME.get(0) == "8:00" と等しいことを意味します。

これを念頭に置いて、クラスを作成する必要があると思いますか、それとも以下に示すクラスを保持してから、データを含む HashMap を追加し、そのマップを反復処理して GUI にデータを挿入する必要がありますか?

public class Statistics {
    private ArrayList<CallQueue> queues = new ArrayList<CallQueue>();
    private ArrayList<Double> averageData = new ArrayList<Double>();
    private Provider p;

    public Statistics(){
         try {
            this.p = new Provider();
        } catch (DopeDBException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    /**
     * This recursive method calculates the average of each time table and then adds its to the arrayList in the following order:
     * 8.00  = 0
     * 9.00  = 1
     * 10.00 = 2
     * 11.00 = 3
     * 12.00 = 4
     * 13.00 = 5
     * 14.00 = 6
     * ect.
     * @param time
     */
    public void calculateAverage(){
        int data = 0;
        for (int i = 8; i < 20; i++) {
            for (CallQueue cq : queues) {
                data += cq.getCallsByTime(i);
            }
            if (data == 0) {
                Main.createErrorMessage("Fejl i dataen! \r\n kontakt venligst ansvarlige i Dope");
            }
            averageData.add((double) data/11);
        }
    }
    /**
     * @author MRCR
     * This method recives the object list from the database and sets the currentlist to the list recived.
     */
    public void setQueues(Calendar start, Calendar end){
        try {
            queues = p.getInformation(start, end, queues);
        } catch (DopeDBException e) {
            // TODO Auto-generated catch block
            Main.createErrorMessage("Message");
        } catch (DopeResultSetException e) {
            // TODO Auto-generated catch block
            Main.createErrorMessage("Message");
        }

    }
    /**
     * This method returns the calculated DataList list.
     * @author MRCR
     * @return averageData
     */
    public ArrayList<Double>getData(Calendar start, Calendar end){
        setQueues(start, end);
        calculateAverage();
        return averageData;
    }



}


import java.util.HashMap;


public class CallQueue {
    private String type;
    private HashMap<Integer, Integer> data = new HashMap<Integer,Integer>();
    public CallQueue(String type){
        this.type = type;
    }
    public String getType(){
        return type;
    }
    public int getCallsByTime(int time){
        return data.get(time);

    }
    public void addCallsByTime(int hourOfDay, int callAmount) {
        data.put(hourOfDay, callAmount);

    }

}
4

4 に答える 4

4

まず、2つの配列の長さが同じであることを確認します。次に、forループを使用して繰り返します。

final int timeLength = TIME.length;
if (timeLength != stat.size()) {
    //something may not be right
}
for (int i = 0; i < timeLength; i++) {
    System.out.println(time[i]+" "+stat.get(i));
}
于 2012-11-23T13:13:47.907 に答える
2

長さの部分も考慮する必要があります。配列とリストの両方をカバーする可能な最大長まで繰り返す必要があるだけです。

したがって、最初にそれらの間のより短い長さを見つけることができます。そして、その長さまで繰り返します:-

int lower = TIME.length < stat.size()? TIME.length: stat.size();

for (int i = 0; i < lower; i++) {
    System.out.println(TIME[i] + " : " + stat.get(i);
}

これが、2つの配列を反復処理する部分でした。

ここで、2つの配列を同時に繰り返す必要がある場合はclass、属性を使用してを作成するだけで、の配列が作成されます。

したがって、次の属性を持つクラスを作成します:- time、およびstats。そして、を作成しList<YourClass>ます。そして、クラスインスタンスのリストを繰り返し処理します。

于 2012-11-23T13:14:32.830 に答える
2
for (int i = 0; i < TIME.length; i++) {
  // use i to access TIME[i] and stat.get(i)
}

ただし、これらの配列が同じ長さであることを確認する必要があります

于 2012-11-23T13:12:10.423 に答える
1
if (TIME.length!=stat.size()) {
    // handle error
}

int count = stat.size();
for (int i=0; i<count; ++i) {
    double d = stat.get(i);
    String s = TIME[i];
}

でも

コメントで指摘されているように、両方の配列の情報を収集するクラスを定義する必要があります。

例えば:

パブリッククラスMyTime{プライベートダブル値; プライベート文字列ラベル。}

または

その特定のケースでは、時間フォーマット関数を使用して文字列配列を置き換えることができると思います。

String.format("%1$d:00", (int) myDouble);
于 2012-11-23T13:13:00.907 に答える