プログラム悪戦苦闘日記

はてなダイアリーからの移行(遺物)

Java New I/O -part3-

 かのサイトにある第2回の実習問題1というのをやってみた。折角なのでなるべくBuffer操作メソッドを使ってみた。

import java.nio.*;
import java.util.*;

/**
 * 第2回目 実習課題1
 * 次の仕様を満たすプログラムを作成してください。
 *
 *       - 要素数10000のint型配列を明示的に作成し、その配列を補助配列とするIntBufferを作成する。
 *       - バッファの先頭から順番に1〜10の乱数を書き込む。
 *       - 書き込んだ値の合計が10000を超えた時点で書き込みを終了する。
 *       - バッファへの書き込みが終了したあと、バッファに蓄積したデータすべてと要素数を標準出力に出力する。
 */
public class Main1 {
    public static void main(String[] args) {
        // int配列を生成し、IntBufferでwarpする
        int[]         arr = new int[10000];
        IntBuffer     buf = IntBuffer.wrap(arr);
        
        // バッファの先頭から順番に 1〜10の値をランダムに書き込む
        Random        rand = new Random();
        rand.setSeed((int) new Date().getTime());
        
        int sum = 0;     // バッファに書き込んだ値の合計値
        
        while(sum <= 10000) {
            int n = rand.nextInt(10) + 1;
            buf.put(n);  // 乱数をバッファに書き込む
            sum += n;    // 合計値にも加算する
        }
        
        buf.flip();      // 現在位置までを限界値にして、最初に戻る
        
        // 出力
        System.out.println("要素数:" + buf.limit());     // 限界値が要素数になっている
        while( buf.position() < buf.limit() )
            System.out.print("" + buf.get() + ", ");     // 要素を出力する
        System.out.println();                            // 改行…
    }
}