old « 紅白歌合戦 司会者決定 | メイン | マイルチャンピオンシップ » new

Java 1901 1902 1903 1904

2006年11月18日

何か、学校のPCからGoogleさん経由でこのBlogに来た人がいらっしゃる模様。

その時の検索ワードは、「Java alarmclock 解除」と「AlarmClock」。
2台のPCから来たみたいですね。

まー、別に良いですけど。

以下今週分。

package j2.lesson06;

public class HogeMartReceipt extends AbstractReceipt {

//店員名
String clerk;
//加算ポイント
int point;

//コンストラクタ
public HogeMartReceipt(String clerk){
this.clerk = clerk;
}

//ヘッダー表示部
protected void showHeader(){
System.out.println("ほげマート");
System.out.println("東京店");
System.out.println("=============");

}

//フッター表示部
protected void showFooter(){
System.out.println("=============");
System.out.println("加算ポイント:" + getPoint(getTotalAmount()));
System.out.println("担当者: " + clerk);

}

//加算ポイントを計算する
protected int getPoint(int x){
return x/100;
}

//メインメソッド(サンプルプログラム)
public static void main(String[] args){

HogeMartReceipt r = new HogeMartReceipt("ほげ");
r.addItem("書籍1", 1580);
r.addItem("書籍2", 480);
r.addItem("書籍3", 3200);
r.show();



}
}
package j2.lesson06;

public class HogeBooksAcquittance implements Acquittance {

//支払人
private String payer;
//合計金額
private int amount;
//但し書き
private String finePrint;

//コンストラクタ
public HogeBooksAcquittance(){
this.payer = "上";
this.amount = 0;
this.finePrint = "お品代";
}

//支払人の名前を取得する。
public String getPayerName() {
return payer;
}

//支払人の名前を設定する。設定した値は getPayerName() で取得できる。
public void setPayerName(String payer) {
this.payer = payer;
}

//発行者の名前を取得する。このクラスでは常に "ほげ書店"。
public String getIssuerName() {
return "ほげ書店";
}

//合計金額を取得する。
public int getTotalAmount() {
return amount;
}

//合計金額を設定する。設定した値は getTotalAmount() で取得できる。
public void setTotalAmount(int totalAmount){
this.amount = totalAmount;
}

public String getFinePrint() {
return finePrint;
}

//但し書きを設定する。設定した値は getFinePrint() で取得できる。
public void setFinePrint(String finePrint){
this.finePrint = finePrint;
}

//この領収書全体を表示する。
public void show() {
// print "領収書", 改行
System.out.println("領収書");
// print (支払人) + "様", 改行
System.out.println(getPayerName() + "様");
// print "¥" + (合計金額) + ".-", 改行
System.out.println("¥" + getTotalAmount() + ".-");
// print "(但し、" + (但し書き) + "として)", 改行
System.out.println("(但し、" + getFinePrint() + "として)");
// print "確かに領収いたしました。", 改行
System.out.println("確かに領収いたしました。");
// print " " + (発行者), 改行
System.out.println(" " + getIssuerName());
}

//メインメソッド(サンプルプログラム)
public static void main(String[] args){

HogeBooksAcquittance r = new HogeBooksAcquittance();
r.setFinePrint("○○");
r.setPayerName("ほげー");
r.setTotalAmount(32568);
r.show();

}

}
package j2.lesson06;

public class HogeBooksHybridReceipt extends HogeBooksAcquittance implements Receipt, Acquittance {

//部品として持たせる
private HogeBooksAcquittance a;
private HogeBooksReceipt r;

//コンストラクタ
public HogeBooksHybridReceipt(){
this.a = new HogeBooksAcquittance();
this.r = new HogeBooksReceipt();
}

//購入した商品を追加する
public void addItem(String name, int cost){
r.addItem(name,cost);
}

//合計金額を取得する。
public int getTotalAmount(){
return r.getTotalAmount();
}

//支払人の名前を設定する。設定した値は getPayerName() で取得できる。
public void setPayerName(String name){
a.setPayerName(name);
}

//但し書きを設定する。設定した値は getFinePrint() で取得できる。
public void setFinePrint(String finePrint) {
a.setFinePrint(finePrint);
}

//この領収書兼レシートを表示する。
public void show() {
//領収書部分
a.setTotalAmount(r.getTotalAmount());
a.show();
//仕切り
System.out.println("================");
//レシート部分
r.show();

}


//メインメソッド(サンプルプログラム)
public static void main(String[] args){

HogeBooksHybridReceipt r = new HogeBooksHybridReceipt();
r.addItem("a", 5000);
r.setPayerName("b");
r.setFinePrint("c");
r.show();

}
}
package j2.lesson06;

public class Rational extends java.lang.Number {

/**
*
*/
private static final long serialVersionUID = 1L;
private int numerator;
private int denominator;

// 既約分数インスタンスを生成する。
// numerator - 分子
// denominator - 分母
// この分数は既約分数であるが、コンストラクタに与えられる2つの引数が既約分数の形をしているとは限らない。そのため、コンストラクタ内で
// numerator と denominator を既約分数の形にしてやるとよい。
public Rational(int numerator, int denominator) {
this.numerator = numerator;
this.denominator = denominator;
kiyaku(this);

}

// この分数と他の分数を加算した結果を表す、新しい分数を返す。
// この操作によってもとの分数が変更されることはない。
// r - 加算する値
// 戻り値: 2つの分数を加算した結果の新しい分数
public Rational add(Rational r) {
int num1 = this.numerator;
int num2 = r.numerator;
int den1 = this.denominator;
int den2 = r.denominator;
Rational temp = new Rational(num1*den2 + num2*den1, den1*den2);
kiyaku(temp);
return temp;
}

// この分数から他の分数を減算した結果を表す、新しい分数を返す。
// この操作によってもとの分数が変更されることはない。
// r - 減算する値
// 戻り値: 2つの分数を減算した結果の新しい分数
public Rational sub(Rational r) {
int num1 = this.numerator;
int num2 = r.numerator;
int den1 = this.denominator;
int den2 = r.denominator;
Rational temp = new Rational(num1*den2 - num2*den1, den1*den2);
kiyaku(temp);
return temp;
}

// この分数と他の分数を乗算した結果を表す、新しい分数を返す。
// この操作によってもとの分数が変更されることはない。
// r - 乗算する値
// 戻り値: 2つの分数の積
public Rational multiply(Rational r) {
int num1 = this.numerator;
int num2 = r.numerator;
int den1 = this.denominator;
int den2 = r.denominator;
Rational temp = new Rational(num1*num2,den1*den2);
kiyaku(temp);
return temp;
}

// この分数から他の分数を割った商を表す、新しい分数を返す。
// この操作によってもとの分数が変更されることはない。
// r - 割る値
// 戻り値: 2つの分数の商
public Rational divide(Rational r) {
int num1 = this.numerator;
int num2 = r.numerator;
int den1 = this.denominator;
int den2 = r.denominator;
Rational temp = new Rational(num1*den2,den1*num2);
kiyaku(temp);
return temp;
}

// この分数を既約分数として文字列に変換する。
// 表示形式は (分子) + "/" + (分母)。 既約分数であるので、new Rational(3, 6).toString()
// は"1/2"を返す必要がある。
// 分子が0の場合は必ず"0/1"を返す。
// 約分によって分母が1になった場合も、分母は表示する ("n/1")。
// 分母の値は必ず正の値である必要がある。
// 戻り値: この分数の文字列表現
public String toString() {
//分母分子が共に負ならば両方正に。分母のみ負ならば分子を負に。
if((this.numerator < 0 && this.denominator < 0) ||
(this.numerator > 0 && this.denominator < 0)){
this.numerator = -1 * this.numerator;
this.denominator = -1 * this.denominator;
}
//分子が0なら分母を1に。
if(this.numerator == 0)
this.denominator = 1;
return this.numerator + "/" + this.denominator;
}

//この分数を int 型で表した値を返す。
//int 型で表せない範囲は切り捨てられる。
//戻り値: この分数を int 型で表した値
public int intValue() {
return this.numerator/this.denominator;
}

//この分数を long 型(*1) で表した値を返す。
//intValue() と同じ値を返す。
public long longValue() {
return this.intValue();
}

//この分数を float 型(*1) で表した値を返す。
//戻り値: return (float) doubleValue()
public float floatValue() {
return (float) this.doubleValue();
}

//double型で表せない範囲は切り捨てられる。
//int 型の値を double 型に変更するには、「(double) int型の値」とすればよい(*2)
public double doubleValue() {
return (double)this.numerator/(double)this.denominator;
}

//既約分数にする
public void kiyaku(Rational a){
int max;
if(a.numerator > a.denominator)
max = a.numerator;
else
max = a.denominator;

for(int i=1; i<=max; i++){
if(a.numerator %i ==0 && a.denominator %i ==0){
a.numerator /= i;
a.denominator /= i;
}
}
}

public static void main(String args[]){
Rational r = new Rational(100,200);
System.out.println(r);
System.out.println(r.add(new Rational(5,15)));
System.out.println(r.sub(new Rational(5,15)));
System.out.println(r.multiply(new Rational(5,15)));
System.out.println(r.divide(new Rational(5,15)));
System.out.println();
System.out.println(new Rational(-1,1));
System.out.println(new Rational(1,-1));
System.out.println(new Rational(-1,-1));
}

}
このエントリーをはてなブックマークに追加

old « 紅白歌合戦 司会者決定 | メイン | マイルチャンピオンシップ » new

トラックバックURL

このエントリーのトラックバックURL:
http://blog.hp-improve.com/mt/mt-tb.cgi/160

コメント

それ面白いねw

授業中にググルとか何やってんだか…(笑

コメントする