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
コメント
それ面白いねw
Posted by: 特使 | 2006年11月19日 01:14
授業中にググルとか何やってんだか…(笑
Posted by: 祐介 | 2006年11月19日 01:40