機能のJava実装を使用して赤い封筒。
構造:
パッケージredPocket
User.java
Manager.java
Member.java
Demo.java
アイデア:
マネージャーとメンバークラスは、ユーザーを継承Managerクラスは、赤い封筒のメイングループの機能を実装して、メンバーのクラスは、グループのメンバーが赤い封筒機能を受け実装しています。デモテストコード。
コード:
パッケージredPocket。 パブリック クラスユーザー{ プライベート文字列名; プライベート フロートお金。 パブリックユーザー(){ } パブリックユーザ(文字列名、フロートお金){ この .nameの= 名前。 この .money = お金。 } パブリック文字列のgetName(){ 戻り名。 } 公共 ボイドのsetName(文字列名){ この .nameの= 名前。 } 公共 フロートgetMoney(){ 戻りお金。 } 公共 ボイド setMoney(フロートお金){ この .money = お金。 } @Override パブリック文字列のtoString(){ リターン "名:" + この .nameの+ ";" + "マネー:" + この .money + ";" 。 } }
パッケージredPocket。 輸入はjava.util.ArrayList; 輸入java.util.Randomの。 パブリック クラスマネージャは、拡張ユーザー{ パブリックマネージャ(){ } 公共マネージャー(文字列名、フロート金){ スーパー(名前、お金を)。 } 公共のArrayListは、<フロート>送信(フロート totalMoney、int型の数、ブール{isRandom)を 場合(!hasEnoughMoney(totalMoney)){ System.out.printlnは( "あなたは十分なお金を持っていません!" ); 戻り NULL ; } のArrayList <フロート> = redPockets 新しい新規のArrayList <> (); この .setMoney(この .getMoney() - totalMoney); IF (isRandom){ ランダムランダム = 新しい新しいランダム(); のArrayList <フロート> PERCENTAGE = 新しい新 ArrayList <> (); // すべてのパーセンテージを得ることができる1.0〜0.0の間の比を格納する ための(int型 ; Iは数<I ++はI = 0 ){ percentage.add(random.nextFloat())。 } //各比率の割合を算出し、次いで、パーセンテージの合計を計算 フロート totalPercentage = SUM(百分率); // これは描かどのくらい各人計算totalMoney割合を乗じて のための(int型 I = 0; Iは数<; Iは++ ){ redPockets .add(percentage.get(I) / * totalPercentage totalMoney); } } 他{ フロートの平均= totalMoney / COUNT; のための(INT I ++は; Iは数<I = 0 ){ redPockets.add(平均); } } 戻りredPockets; } プライベート ブール hasEnoughMoney(フロートtotalMoneyを){ 場合(この .getMoney()> = totalMoney){ 戻り 真。 } を返す 偽。 } 公共 フロート和(のArrayList <フロート> パーセンテージ){ フロート totalPercentage = 0.0Fを、 以下のために(int型 ; I <percentage.size()は、i ++は、I = 0 ){ totalPercentage + = percentage.get(I)と、 } 戻りtotalPercentageと、 } }
パッケージredPocket; インポートjava.util.ArrayListのの、 インポートjava.util.Randomの、 パブリック クラスメンバー延びユーザー{ パブリックメンバー(){ } パブリックメンバー(文字列名、フロートマネー){ スーパー(名前、マネー); } 公共 ボイドザ受信を(のArrayList <フロート> redPockets){ //は、リスト内のランダムな 整数の指数= 新しい新しいランダム()nextInt(redPockets.size());. フロートマネー= ; redPockets.get(インデックス) //が汲み上げられますインデックスは除きます。 redPockets.remove(インデックス)。 System.out.println(この .getName()+ "抽到了" + お金)。 この .setMoney(この .getMoney()+ お金)。 } }
パッケージredPocket。 輸入はjava.util.ArrayList; パブリック クラスデモ{ 公共 静的 ボイドメイン(文字列[]引数){ マネージャM = 新マネージャー(「マネージャ」、1000.0F )。 メンバM1 = 新メンバー( "メンバー1"、100.0F )。 メンバM2 = 新メンバー( "Member2"、45.56F )。 ArrayList <フロート> redPockets = m.send(888.88F、8、真)。 System.out.println(redPockets)。 m1.receive(redPockets)。 m2.receive(redPockets)。 System.out.println(redPockets)。 System.out.println(M)。 System.out.println(M1)。 System.out.println(M2)。 } }