Java 1603,1604
2006年10月20日
同学校の人向け。
16週の課題出来たので参考にどうぞ。
課題3は無駄がありそうな気もしますが一応テスト通ってるのでOKと言うことで。
ちなみに難易度は課題3>課題4です。
課題4はヒントを参考にしてboolean型配列を使ってます。
int型を使う場合は全く参考にならないので自力でどうぞ。
int型でやるよりboolean型でやった方が多分遥かに簡単かと。
AlarmClock
package j2.lesson03;
import java.io.*;
public class AlarmClock {
//現在の時刻(秒)
private int time;
//アラーム設定時間(秒)
private int atime;
//アラームの状態 セットor解除
private boolean aset;
public AlarmClock(int hour, int minute, int second){
this.time = (hour * 3600 + minute * 60 + second)%86400;
this.aset = false;
}
public void setAlarmFor(int hour, int minute, int second){
this.aset = true;
//秒に変換してアラームセット
this.atime = (hour * 3600 + minute * 60 + second)%86400;
//丁度現在の時刻と同じならばアラーム発動
if(this.time == atime && this.aset)
alarm();
}
public void tick(int n){
//時間を進めるか戻すか
boolean plus;
if(n >= 0)plus = true;
else plus = false;
//現時刻よりアラーム時刻が前ならば、アラーム時刻に1日分加算する
int timebefore = this.time;
if(timebefore > this.atime)
this.atime += 86400;
this.time += n;
//アラームがセットされていれば
if(this.aset){
//進める場合
if(this.time >= atime && plus && timebefore < this.atime)
alarm();
//戻す場合
else if(this.time <= atime && !plus && timebefore > this.atime)
alarm();
}
//1日(86400秒)以上の秒数を除去
this.time %= 86400;
}
public void show(){
int h = this.time / 3600;
int m = (this.time / 60) % 60;
int s = this.time % 60;
System.out.println(h + "時" + m + "分" + s + "秒");
}
public void alarm(){
System.out.println("アラーム");
//アラーム解除
this.aset = false;
}
public static void main(String[] args) throws IOException {
}
}
IntegerSet
package j2.lesson03;
public class IntegerSet {
//boolean配列
private boolean[] a;
//0から100までの値を格納できる整数の集合を作成する
public IntegerSet(){
a = new boolean[101];
for(int i =0; i<=a.length-1; i++){
a[i] = false;
}
}
//この集合に値を追加する。すでに指定した値が存在する場合は何もしない。
public void add(int n){
a[n] = true;
}
//この集合から値を取り除く。指定した値が存在しない場合は何もしない。
public void remove(int n){
a[n] = false;
}
//この集合に指定した値が存在するかどうか調べる。
public boolean contains(int n){
return a[n];
}
//この集合に格納されている値の個数を返す。初期状態では 0, 最大で101
public int size(){
int count = 0;
for(int i=0; i<=a.length-1; i++){
if(a[i])count++;
}
return count;
}
//この集合と引数に与えられた集合の和集合(*1)を新しく作成する。この操作によってもとの集合に副作用はない。
public IntegerSet union(IntegerSet other){
IntegerSet b = new IntegerSet();
for(int i=0; i<=other.a.length-1; i++){
if(this.a[i] || other.a[i])
b.a[i] = true;
}
return b;
}
//この集合と引数に与えられた集合の積集合(*1)を新しく作成する。この操作によってもとの集合に副作用はない。
public IntegerSet intersection(IntegerSet other){
IntegerSet b = new IntegerSet();
for(int i=0; i<=other.a.length-1; i++){
if(this.a[i] && other.a[i])
b.a[i] = true;
}
return b;
}
//この集合を整数型の配列に変換して返す。この集合に含まれる値が返される配列に昇順に格納される。返される配列の長さは this.size() に等しい。
public int[] toIntArray(){
int[] x = new int[this.size()];
int index = 0;
for(int i=0; i<=this.a.length-1; i++){
if(this.a[i]){
x[index] = i;
index++;
}
}
return x;
}
}
old « Java 1525 | メイン | テイルズの広告 » new