Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

クラス定義

下記問題の回答を宜しくお願い致します。

問題:財布クラスを定義する

1、メンバ変数に残額をもっている
2、引き出しメソッドと、入金メソッドがある
3、引き出しメソッドは、引数の金額ぶん、残額を減らす
4、入金メソッドは、引数の金額ぶん、残額を増やす
5、現在の残高をコンソールに出力するメソッドもある
6、mainから2つ財布を生成する。片方は200円、片方は500円
7、片方から片方に100円移し替え
8、両方の残高を出力

7

回答

92663

閲覧

7件の回答

評価

0

質問前に、ガイドラインは読もう。

評価

0

public class Saifu {

  int zan;

  public Saifu(int kin) {
     zan = kin;
  }

  public void printZan() {
     System.out.println("ZANDAKA="+zan);
  }
  public int hiki(int kin) {
     zan -= kin;
     return zan;
  }
  public int nyu(int kin) {
     zan += kin;
     return zan;
  }

  public static void main(String[] args) {
     Saifu w1 = new Saifu(200);
     Saifu w2 = new Saifu(500);
     w1.nyu(100);
     w2.hiki(100);

     w1.printZan();
     w2.printZan();
  }
}

評価

0

w1.nyu(100);

w2.hiki(100);

この2行の間でエラーが発生した場合にも不整合が発生し
ないようにできませんか。100円が異空間に飲み込まれて
は困ります。

評価

0

おお、そういえば確かに。異空間に飲み込まれますね;;

「困ります」って?誰が困るの?

評価

0

銀行屋さんが困るって言ってました。
先にw1さんに入金したのに、
w2さんがばっくれて引き出せなかったそうです。

評価

0

1. 既に指摘済みだが、ガイドラインを読め
http://www.javaroad.jp/bbs/bbs_rule.htm

2. 異空間に飲み込まれて困る訳では無い。
異空間から100円が生まれてた後に、
別の100円が異空間に戻ってるのだから。

3. そもそも、それは財布クラスの責務では無い。
財布を使う側の責務。

4. そこまでやりたきゃ、DB使え、その方が楽。
Javaだけでやるならトランザクション機能を実装しろ。
参考文献はJava Transaction APIをググれ。

しかし、この質問を丸投げしてるレベルじゃ
相当苦労するのは覚悟の上でがんばってね。

評価

0

public class Saifu {

  int zan;

  public Saifu(int kin) {
     zan = kin;
  }

  public void printZan() {
     System.out.println("ZANDAKA="+zan);
  }
  public int hiki(int kin) {
     zan -= kin;
     return zan;
  }
  public int nyu(int kin) {
     zan += kin;
     return zan;
  }

  public static void main(String[] args) {
     Saifu w1 = new Saifu(200);
     Saifu w2 = new Saifu(500);
     w1.nyu(100);
     w2.hiki(100);

     w1.printZan();
     w2.printZan();
  }
  
  public Saifu clone() {
      return new Saifu(zan);
  }
}

public class SafeSaifu {

    Saifu me;
    Saifu yo;
    
    public SafeSaifu(Saifu me, Saifu yo) {
        this.me = me;
        this.yo = yo;
    }
    
    public nyu(int kin, Sagyo sagyo) {
    
        Saifu me2 = me.clone();
        Saifu yo2 = yo.clone();
        
        try {
            sagyo.pre(kin, me2);
            me2.nyu(kin);
            sagyo.cur(kin, me2, yo2);
            yo2.hiki(kin);
            sagyo.aft(kin, yo2);
            me = me2;
            yo = yo2;
        } catch (Throwable t) {
            // rollback
        }
    }

    public hiki(int kin, Sagyo sagyo) {
    
        Saifu me2 = me.clone();
        Saifu yo2 = yo.clone();
        
        try {
            sagyo.pre(kin, me2);
            me2.hiki(kin);
            sagyo.cur(kin, me2, yo2);
            yo2.nyu(kin);
            sagyo.aft(kin, yo2);
            me = me2;
            yo = yo2;
        } catch (Throwable t) {
            // rollback
        }
    }
    
    public static interface Sagyo {
        
        void pre(int kin, Saifu x) throws 
SaifuException;
        void cur(int kin, Saifu x, Saifu 
y) throws SaifuException;
        void aft(int kin, Saifu y) throws 
SaifuException;
    }
    
    public static class SagyoAdapta implements 
Sagyo {
        void pre(Saifu x) throws 
SaifuException {
        
        }
        void cur(int kin, Saifu x, Saifu 
y) throws SaifuException {
        
        }
        void aft(int kin, Saifu y) throws 
SaifuException {
        
        }
        
    }
    
    public static class SaifuException extends 
RuntimeException {
        public SaifuException(String m) {
            super(m);
        }
    }
    
    public static class CurrentWorker extends 
SagyoAdapta {
        @override
        public void cur(int kin, Saifu x, 
Saifu y) throws SaifuException {
            if (x.zan < 80)
                throw new 
SaifuException("(:-");
                
            if (y.zan > 800)
                throw new 
SaifuException("^^;;");
        }
        
    }
    
    public static void main(String[] args) {
    
    
        SafeSaifu ss = new SafeSaifu(new 
Saifu(100), new Saifu(500));
        
        ss.nyu(150, new CurrentWorker());
    
    }
}

こんなのでどうでしょうか。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。