0

時間と数字をランダムに生成したい..ここでは、ハッシュマップを使用していくつかのレコードを生成しました。これで数字を生成できますが、それらを分離することはできません。データベースに値を設定できるように、値を分離する必要があります..

これが私のコードです...

public class DateTimePopulation {

private Random rand = new Random(); 
private Date theDay;
private String callDuration = null;
private String endDay = null;
SimpleDateFormat mytimeFormat = new SimpleDateFormat("HH:mm:ss");

public static void main(String[] args) throws ParseException {
    DateTimePopulation d = new DateTimePopulation();
    for (int i = 1; i <= 3; i++) {
        Map rec = d.getRecord();
    for (int j = 0; j < rec.size(); j++) {
            Collection c = rec.values();
            Iterator itr = c.iterator();
            int count=0;
            while (itr.hasNext()) {                 
                Object element=itr.next();
                System.out.println(element); 
            }
            System.out.println();
        }
    }
}

private Map getRecord() {
    Map<String, Object> rec = new LinkedHashMap<String, Object>();
    Date startDate;
    try {
        startDate = getRandStartDate();
        rec.put("StartTime", startDate);

        int start = 7200000, end = 0;
        int duration = getRandDuration(start, end);
        rec.put("Duration", duration);

        Date endDate = getRandEndDate(startDate, duration);
        rec.put("EndTime", endDate);

    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return rec;
}



private Date getRandEndDate(Date startDate, int duration) {
    Random r = new Random();
    int ranSec = r.nextInt(duration - 0) + 0;
    return new Date(startDate.getTime() + ranSec * 1000);
}

private int getRandDuration(int High, int Low) {
    Random r = new Random();
    return r.nextInt(High - Low) + Low;
}

private Date getRandStartDate() throws ParseException {
    Date theDay = new SimpleDateFormat("yyyyMMdd hh:mm:ss")
            .parse("20130101 00:00:00");
    int High = 60 * 60 * 24 * 30 * 6;
    Random r = new Random();
    int Low = 10;
    int R = r.nextInt(High - Low) + Low;

    return new Date(theDay.getTime() + R * 1000);
}

}

これが出力です。2セット展示しております。時間、期間などを分離する必要があります。

Tue Jan 08 11:01:57 IST 2013
6074479
Fri Jan 18 12:56:24 IST 2013   
4

2 に答える 2

1

getRecord()まず、あなたのデザインは最初から奇妙です - 呼び出しているオブジェクトのフィールドで何もしないのに、なぜインスタンスを呼び出すのですか?

さらに、マップを反復処理している場合、実際には同じマップを 3 回反復処理しています。

for (int j = 0; j < rec.size(); j++) {
    Collection c = rec.values();
    Iterator itr = c.iterator();
    int count=0;
    while (itr.hasNext()) {                 
        Object element=itr.next();
        System.out.println(element); 
    }
    System.out.println();
}

ここでは、外側のループは無意味です。結局、 を使用することはありませんj。本当に必要な場合は、おそらく値ではなくエントリを反復処理します。その後、各値に対応するキーを出力できます。

次に、マップをまったく使用しないことをお勧めします。開始時間、期間、終了時間のフィールドを持つ別のタイプを作成します。それは物事を非常に簡単に修正します。

次に、まだマップを使用したい場合は、生の型の使用をやめてください。これにより、作業がより簡単になります。

最後に、本当にマップを使用したい場合は、既にキーを知っているので、それを繰り返しても意味がありません:

System.out.println("Start: " + map.get("StartTime");
System.out.println("Duration: " + map.get("Duration");
System.out.println("End: " + map.get("EndTime");

基本的に、一歩下がってデザイン全体を見直すことを強くお勧めします。既存のコードを変更するよりも、ゼロから始める方がよいことに気付くかもしれません。

于 2013-06-28T08:20:33.860 に答える