池の問題(Java版)

10628 ワード

に質問
一つの池にはたくさんの種類の魚がいて、魚は食べ物を食べて、育ててから売って、売ってから魚を買うことができます.
前提条件
コード ts小練習(池問題)をもとに自分の考えを加えます.オンライン実行:http://java.jsrun.net/
構想
  • 魚類Fishを定義し、魚(種類、年齢、販売価格、購入価格、数量、最大年齢)を継承する. 
     
    イワシ匹
    草魚
    フナ匹
    買い入れる
    15
    12
    10
    売りに出す
    35
    25
    20
  • 市場類Macketを定義し、収益予測、魚販売、魚購入の3つの方法がある.予測収益:コードの実行を終了する方法として使用します.
  • 収益予測方法の具体的な考え方:【規定月数内】
  • 池に成熟した魚がいるかどうかを判断し、あれば売る、なければ踊る2
  • 残高が最も安い魚を買うことができ、池に空席がある場合は、3
  • 跳びます.
  • 予測月数がまだあれば、等魚成熟(自動判断)
  • 魚の販売方法の具体的な考え方:
  • 魚が最大年齢に達したかどうかを判断し、達したら売ると同時に残高と池の魚数を更新する.そうでなければ2
  • ジャンプ
  • 魚のみ更新年齢
  • 魚の買い方の具体的な考え方:
  • 残高が10元より大きく、池に位置している場合は、単価の高い魚を優先的に購入し、2跳びをします.さもないと何もしない
  • 残高を計算して何匹かの魚を買うことができて、しかも池がこんなに多くの位置があるかどうかを判断して、あるなら全部買って、ないなら位置の残りの数で買います.残高と池の魚数を同時に更新する
  • で魚を売買する場合は、ArrayListで魚を保存します.デフォルトでは、魚を買うときに関連する魚のインスタンスが追加され、魚を売るときにこの動的配列を遍歴し、動的配列を
  • 操作します.
    拡張可能
  • 養魚に飼料を1つ与える需要があり、飼料にも異なる価格がある.その対応の効果も違うのではないでしょうか.
  • 魚を買うアルゴリズムはどのように最適化することができますか?
  • コードはまだ最適化できますか?例えば、
  • を手動で定義するのではなく、魚の購入価格をソートします.
    Java
    package test;
    import java.util.ArrayList;
    import java.util.List;
    public class Market {
     public static Integer sum=132; //       (  java     ,   )
     public static Integer fishNum=0; //        
     public static Integer fishMaxNum=10; //         
     public static Integer monthTemp = 1;//     
     public static Integer months = 10;//        
     protected static ArrayList arr;
    
        public static void main(String []args) {
            System.out.println("   :"+sum+" ");
    
            arr=new ArrayList<>();
            
            expect(months); //   n     
            System.out.println("----------------------");
            System.out.print(months+"     :");
            System.out.println(sum);
            System.out.print("          :");
            System.out.print(fishNum); 
        }
    
        public static void expect(Integer n){
            while(n-- > 0){
                //   
                sell();
    
                //   (            ...)
                while(sum >= 10 && fishNum != fishMaxNum){
                    if(sum >= 15){
                        //   15   
                        Bighead fish = new Bighead(null, 0, null, null, 0, null);
                        purchase(fish);
                    }else if(sum >= 12){
                        //   12   
                        GrassCarp fish = new GrassCarp(null, 0, null, null, 0, null);
                        purchase(fish);
                    }else{
                        //   10   
                        CrucianCarp fish = new CrucianCarp(null, 0, null, null, 0, null);
                        purchase(fish);
                    }
                }
            }
        }
    
        //      
        public static void sell(){
            Integer money = 0;
            //     arr    0
            for(int i = 0; i < arr.size(); i++){
                Fish obj=((Fish) arr.get(i));
                if(obj.getMaxAge() <= obj.getAge()){
                    money = obj.getSellPrice() * obj.getNum();
                    sum += money;
                    arr.remove(i);
                    i--;
                    fishNum -= obj.getNum();
                }else{
                    obj.SetAge();
                }
            }
            System.out.println("----------------------");
            System.out.println(" " + monthTemp + "      " + money + "  ");
            monthTemp++;
        }
    
        //     
        public static void purchase(Fish fish){//          ,          ?
            Integer count;
            count = (sum/fish.getPurcPrice() - (fishMaxNum-fishNum)) > 0 ? (fishMaxNum-fishNum) : (sum/fish.getPurcPrice());
            System.out.println(fish.getName()+"  "+count+" ");
            fish.setNum(count);
            sum -= count * fish.getPurcPrice();
            arr.add(fish);
            fishNum += count;
        }
    }
    
    //    
    abstract class Fish{
        private String name;
        private Integer sellPrice; //    
        private Integer purcPrice; //    
        private Integer age;
        private Integer num; //     
        private Integer maxAge; //    
        //    , js construtor
        public Fish(String name, Integer age, Integer sellPrice,
            Integer purcPrice, Integer num, Integer maxAge) {
            this.name = name;
            this.age = age;
            this.sellPrice = sellPrice;
            this.purcPrice = purcPrice;
            this.num = num;
            this.maxAge = maxAge;
        }
    
        //       
        public final Integer getAge() {
            return age;
        }
    
        //         
        public final Integer getMaxAge() {
            return maxAge;
        }
    
        //       
        public final Integer getNum() {
            return num;
        }
    
        //       
        public final void setNum(Integer num) {
            this.num = num;
        }
    
        //      ,    
        public final void SetAge() {
            age++;
        }
    
        //         
        public final Integer getSellPrice() {
            return sellPrice;
        }
    
        //          
        public final Integer getPurcPrice() {
            return purcPrice;
        }
    
        //       
        public final String getName() {
            return name;
        }
    }
    
    //   
    class CrucianCarp extends Fish {
        public CrucianCarp(String name, Integer age, Integer sellPrice,
            Integer purcPrice, Integer num, Integer maxAge) {
            super(name = "  ", age, sellPrice = 20, purcPrice = 10, num, maxAge = 4);
        }
    }
    
    //  
    class GrassCarp extends Fish {
        public GrassCarp(String name, Integer age, Integer sellPrice,
            Integer purcPrice, Integer num, Integer maxAge) {
            super(name = "  ", age, sellPrice = 25, purcPrice = 12, num, maxAge = 4);
        }
    }
    
    //  
    class Bighead extends Fish {
        public Bighead(String name, Integer age, Integer sellPrice,
            Integer purcPrice, Integer num, Integer maxAge) {
            super(name = "  ", age, sellPrice = 35, purcPrice = 15, num, maxAge = 5);
        }
    }
    

    TS
    構想
  • readline-syncによるコンソールインタラクション
  • arr:Array配列要素がFishクラスである配列arr
  • を作成する
    に質問
  • コンストラクション関数で魚のインスタンスを作成する場合はnull(Java用null)は使用できません.undefined
  • を使用します.
    // index.js
    var readlineSync = require('readline-sync');
    var {Market,CrucianCarp,GrassCarp,Bighead}=require('./fish')
    
    var months = readlineSync.question('how months?');
    var fishMaxNum = readlineSync.question('fishMaxNum?');
    var sum = readlineSync.question('money?');
    
    var fi=new Market(months, fishMaxNum, sum);
    
    fi.init()
    
    // finish.ts
    let fishNum:number = 0; //     
    
    class Market{
        arr:Array = []; //  
        months:number=0;
        fishMaxNum:number=0;
        sum:number=0;
        constructor(months:number,fishMaxNum:number,sum:number){
            this.months=months;
            this.fishMaxNum = fishMaxNum;
            this.sum = sum;
        }
        init(){
            console.log(`   :${this.months} ,     :${this.fishMaxNum}, ${this.sum} `)
            this.expect(this.months)
            console.log(`${this.months}   ,   ${fishNum}  ,  ${this.sum} `)
        }
        //     
        expect(m:number):void{
            while(m-- > 0){
                //    
                this.sell();
    
                //   
                while (this.sum >= 10 && fishNum != this.fishMaxNum){
                    if(this.sum >= 15){
                        let fish:Bighead = new Bighead(undefined, 0, undefined, undefined, 0, undefined);
                        this.purchase(fish);
                    }else if(this.sum >= 12){
                        let fish:GrassCarp = new GrassCarp(undefined, 0, undefined, undefined, 0, undefined);
                        this.purchase(fish);
                    }else{
                        let fish:CrucianCarp = new CrucianCarp(undefined, 0, undefined, undefined, 0, undefined);
                        this.purchase(fish);
                    }
                }
            }
        }
        //   
        purchase(fish:Fish):void{
            let count:number;
            // console.log(fish.getPurcPrice())
            count = (this.sum/fish.getPurcPrice() - (this.fishMaxNum-fishNum) > 0 ? (this.fishMaxNum-fishNum) : Math.floor(this.sum/fish.getPurcPrice()))
            console.log(`${fish.getName()}  ${count} `)
            fish.setNum(count)
            this.sum -= count * fish.getPurcPrice();
            this.arr.push(fish)
            fishNum += count
            // console.log(count);
        }
        //   
        sell():void{
            let money:number = 0
            for(let i = 0; i < this.arr.length; i++){
                if(this.arr[i].getAge() >= this.arr[i].getMaxAge()){
                    money = this.arr[i].getSellPrice() * this.arr[i].getNum()
                    this.sum += money
                    fishNum -= this.arr[i].getNum()
                    this.arr.splice(i,1)
                    i--
                }else{
                    this.arr[i].setAge()
                }
            }
            console.log("--------------------")
            console.log(`      ${money} `)
        }
    }
    
    //    
    abstract class Fish{
        private  name:string;
        private  sellPrice:number;
        private  purcPrice:number;
        private  age:number;
        private  num:number; //     
        private  maxAge:number;
        //    
        constructor(name:string,age:number,sellPrice:number,purcPrice:number,num:number,maxAge:number) {
            this.name = name;
            this.age = age;
            this.sellPrice = sellPrice;
            this.purcPrice = purcPrice;
            this.num = num;
            this.maxAge = maxAge;
        }
        //       
        getAge():number {
            return this.age;
        }
        //         
        getMaxAge():number {
            return this.maxAge;
        }
        //       
        getNum():number {
            return this.num;
        }
        //       
        setNum(num:number):void {
            this.num=num;
        }
        //      ,    
        setAge():void {
            this.age++;
        }
        //         
        getSellPrice():number {
            return this.sellPrice;
        }
        //        
        getPurcPrice():number {
            return this.purcPrice;
        }
        //       
        getName():string {
            return this.name;
        }
    }
    // crucianCarp
    class CrucianCarp extends Fish{
        constructor(name:string='  ',age:number=0,sellPrice:number=20,purcPrice:number=10,num:number,maxAge:number=4){
            super(name,age,sellPrice,purcPrice,num,maxAge)
        }
    }
    // grassCarp
    class GrassCarp extends Fish{
        constructor(name:string="  ",age:number=0,sellPrice:number=25,purcPrice:number=12,num:number,maxAge:number=4){
            super(name,age,sellPrice,purcPrice,num,maxAge)
        }
    }
    // bighead
    class Bighead extends Fish{
        constructor(name:string="  ",age:number=0,sellPrice:number=35,purcPrice:number=15,num:number,maxAge:number=5){
            super(name,age,sellPrice,purcPrice,num,maxAge)
    
        }
    }
    export {Market,Bighead,GrassCarp,CrucianCarp}