独習Javaゼミ第10回 セクション1~3 発表者 直江 宗紀
Javaクラスライブラリ クラスライブラリとは java.utilパッケージ 今回用いるユーティリティクラスが集約されたクラスライブラリのパッケージ 乱数、カレンダー等の日付、時間や、ベクトル、ハッシュ表、スタック等のデータ構造を扱える
10.1 Randomクラス(1) Randomクラス boolean型,double型,float型,int型,またはlong型の乱数を生成するクラス 乱数関数を用いる乱数以外に、ガウス分布に則る乱数を生成することも可能
10.1 Randomクラス(2) Randomコンストラクタ 引数無しでRandomコンストラクタを呼んだ時 コンストラクタとして、以下2つが用意されている Random() Random(long seed) (seedは乱数ジェネレータに渡される初期値) 引数無しでRandomコンストラクタを呼んだ時 現在時刻をseed(種値)とする
10.1 Randomクラス(3) boolean nextBoolean() 真または偽のどちらかを返す void nextBytes(byte buffer[]) bufferを乱数で埋める double nextDouble() double型の乱数を返す float nextFloat() float型の乱数を返す double nextGaussian() double型の乱数を返す。このメソッドを繰り返し呼び出すと、平均0と標準偏差の1のガウス分布の乱数が得られる Int nextInt() int型の乱数を返す Long nextLong() long型の乱数を返す void setSeed(long seed) 乱数ジェネレータに種値を与える
10.1 Randomクラス(4) 適当な乱数を発生させるプログラム例 import java.util.*; class RandomInts{ public static void main(String args[]){ //乱数ジェネレータを作成する Random generator=new Random() ; //10個のint型の乱数を生成する for(ing i=0;i<10;i++){ System.outo.println(generator.nextIng()) ; }
10.2 Dateクラス(1) Dateクラス Dateコンストラクタ 特定の日付と時刻に関する情報を扱える 以下の2つのコンストラクタが用意されている Date() Date(long msec) (msec:グリニッジ標準時で1970年1月1日午前0時からの経過時間をミリ秒で表した数値)
10.2 Dateクラス(2) boolean after(Date d) dが現在の日付よりも後の場合に真を返す。それ以外の場合は偽を返す boolean before(Date d) dが現在の日付よりも前の場合に真を返す。それ以外の場合は偽を返す boolean equals(Date d) dが現在の日付と同じ場合に真を返す。それ以外の場合は偽を返す long getTime() 基準時からの経過時間をミリ秒単位で返す void setTime(long msec) 基準時からmsecミリ秒経過した日付と時刻を現在のオブジェクトに設定する String toString() 日付を文字列にして返す
10.2 Dateクラス(3) Dateクラスを利用したプログラム例 import java.util.*; class DateDemo{ public static void main(String args[]){ //現在の日付/時間で初期化 Date currentDate=new Date() ; System.out.println(currentDate) ; //基準時(1970/1/1)に初期化する Date epoch=new Date(0) ; System.out.println(epoch) ; }
10.3Calendar,GregorianCalendarクラス(1) このクラスにより、日付と時刻の情報を交換可能 カレンダーの要素の取得または設定に使用できる、int型の定数がいくつか定義されている。 (例:AM,AM_PM,PM,HOUR_OF_DAY,等)
10.3Calendar,GregorianCalendarクラス(2) パブリックなコンストラクタは無い 静的メソッドgetInstance()を用いることにより現在の日付、時刻で初期化されたカレンダーを取得できる 例: Calendar now=Calendar.getInstance() ;
10.3Calendar,GregorianCalendarクラス(3) boolean after(Object calendarObj) 呼び出し元Calendarオブジェクトの日付がcalendarObjの日付よりも後の場合は真を、それ以外は偽を返す boolean before(Object calendarObj) 呼び出し元Calendarオブジェクトの日付がcalendarObjの日付よりも前の場合は真を、それ以外は偽を返す boolean equals(Object calendarObj) 呼び出し元Calendarオブジェクトの日付がcalendarObjの日付と同じ場合は真を、それ以外は偽を返す int get(int calendarField) 呼び出し元オブジェクトの要素の値を返す。目的の要素はcalendarFieldで指定する
10.3Calendar,GregorianCalendarクラス(4) static Calendar getInstance() 既定の場所とタイムゾーンに設定されたCalendarオブジェクトを返す final Date getTime() 呼び出し元オブジェクトの時刻に相当するDateオブジェクトを返す final void set(int year,int month,int date,int hour,int minite,int second) 呼び出し元オブジェクトのさまざまな日付/ 時刻要素を設定する final void setTime(Date d) 呼び出し元オブジェクトのさまざまな日付/ 時刻要素を設定する。設定する情報はDateオブジェクトdから取り出される
10.3Calendar,GregorianCalendarクラス(5) グレゴリオ暦に則って日付/時間を管理できる GregorianCalendarコンストラクタ 主なコンストラクタとして以下の物がある GregorianCalendar() GregorianCalendar(int year,int month,int date) GregorianCalendar(int year,int month,int date,int hour,int minute,int sec)
10.3Calendar,GregorianCalendarクラス(6) 追加されたメソッドもある isLeapYear(int year) 指定した年がうるう年の場合に真、そうでなければ偽を返すメソッド
演習問題 ガウス分布に従う乱数を100個生成し、それが本当にガウス分布に従うのか平均と分散それぞれの値を計算するプログラムを作成せよ。 基準時から現在までの間にうるう年が何度あったのかを調べるプログラムを作成せよ。 コマンドライン引数により、年、月、日にちが入力された時、その年月日がその年が始まって何日目なのか、そして何曜日なのかを示すプログラムを作成せよ。