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

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

0

レミ

javaを勉強中です
ステータスと機械や材料のクラスを作り
機械を買う場合機械のクラスで機械を買うメソッドを作るなど、関係するクラスでメソッドを作り
メインでメソッドを呼び出して各クラスの数値を変更していくという事を考えながら作っています。

メインで数値を代入させて変数を準備して、メソッドの呼び出しをして数字を変えようとし
数字が変わらなかったので、リターンでメインの変数に返して数値を変えましたが、次は1つずつしか返せない事を知り、同じ処理のメソッドを返す数だけ用意し、それぞれ順番に実行しましたが
帰ってきた数値でまた送る事になり同じ処理をする事で矛盾が発生するのがわかり、手詰まりになりました。
ご教示いただけると幸いです。

class status //ステータス
    {
    int Money;        //所持金
    int Researchlevel;//研究開発
    int Saleslevel;   //営業
    int loan;         //借金
        status(int Money,int Researchlevel,int Saleslevel,int loan)
        {
            this.Money = Money;
            this.Researchlevel = Researchlevel;
            this.Saleslevel = Saleslevel;
            this.loan = loan;
        }
    }
    
    class worker   //従業員
    {
        int workID; //従業員数
        String job; //配属先
        int salary;//給料
        int years; //勤続年数
        
        worker(int workID, String job, int salary, int years)
        {
            this.workID = workID;
            this.job = job;
            this.salary = salary;
            this.years = years;
        }
    }
    
    class machine 
    
    {
        int cost;    //価格
        int capacity;//製造能力
        
        machine(int cost,int capacity)
        {
            this.cost = cost;
            this.capacity= capacity;

        }
        
        int buymachine(int Money, int cost) //機械購入 バイマシン
        {        
            s("機械を購入します。");
            s(" 購入前の所持金は:"+ Money);
            s(" 機械価格は:"+cost);
            if(Money >= cost)
            {
                
                Money = Money - cost;
                s(" 機械を購入しました。");
                s(" 購入後の所持金は:"+ Money);
            }
            else
            {
                s(" 機械を購入出来ませんでした。");
            }
            return Money;
        }
    }
    
    class material extends MG//倉庫 材料 システムアウトの省略のメソッドを継承するためにMGを継承
    {
        int materialprice;   //材料価格
        int materialstock;   //材料在庫
        int Purchasingmaterials; //購入材料の数
        int Workinprogress;   //仕掛品の数
        int Workinprogresscost; //仕掛コスト
        int stock; //製品在庫
        
        material(int materialprice,int materialstock,int Purchasingmaterials, int Workinprogress,int Workinprogresscost, int stock)
        {
            this.materialprice = materialprice;
            this.materialstock = materialstock;
            this.Purchasingmaterials = Purchasingmaterials;
            this.Workinprogress = Workinprogress;
            this.Workinprogresscost = Workinprogresscost;
            this.stock = stock;
        }
        
        
        int buymaterial(int Money, int materialprice ,int Purchasingmaterials,int materialstock) 
        {
            if(Money >= materialprice)
            {
                Money = Money - materialprice;
                s("材料を購入しました。");
                s(" 購入後の所持金は:"+ Money);
                s(" 購入後の材料の個数は"+materialstock);
            }
            else
            {
                s(" 材料を購入出来ませんでした。");
            }
            return Money;
        }
        int buymaterialstock(int Money, int materialprice ,int Purchasingmaterials,int materialstock) 
        {        
            s("材料を購入します。");
            s(" 購入前の在庫は"+materialstock);
            s(" 購入前の所持金は"+Money);
            s(" 材料価格:"+materialprice+" 購入数:"+Purchasingmaterials+" 合計金額:"+materialprice*Purchasingmaterials);
            if(Money >= materialprice)
            {
                materialstock = materialstock+Purchasingmaterials;
            }
            return materialstock;
        }
        
        int Machiningstart2(int Money, int materialstock, int Workinprogress , int capacity, int Workinprogresscost)
        {
            if(Money >= Workinprogresscost && materialstock > 0)
            {
                s("材料を加工します。");
                s(" 加工前の所持金は:"+ Money +" 加工可能数:"+capacity+" 加工価格:"+Workinprogresscost*capacity);
                int i =0;
                s(" 在庫数:"+materialstock+" 仕掛品数:"+Workinprogress);
                for(;materialstock > 0 &&  capacity > i ; i++)
                {
                    materialstock --;
                    Workinprogress++;
                }
                Money = Money-i*Workinprogresscost;
                System.out.println(" 加工後の所持金は:"+ Money + " 在庫数:"+materialstock+" 仕掛品数:"+Workinprogress);
                }
                return Workinprogress;
        }
        int Machiningstart(int Money, int materialstock, int Workinprogress , int capacity, int Workinprogresscost)
        {
            if(Money >= Workinprogresscost && materialstock > 0)
            {
                
                int i =0;
                for(;materialstock > 0 &&  capacity > i ; i++)
                {
                    materialstock --;
                    Workinprogress++;
                }
                }
                return materialstock;
        }
        int Machiningstart3(int Money, int materialstock, int Workinprogress , int capacity, int Workinprogresscost)
        {
            if(Money >= Workinprogresscost && materialstock > 0)
            {
                
                int i =0;
                for(;materialstock > 0 &&  capacity > i ; i++)
                {
                    materialstock --;
                    Workinprogress++;
                }
                Money = Money-i*Workinprogresscost;
                }
                
                return Money;
        }
        int Workgstart2(int Money, int stock, int Workinprogress , int capacity, int Workinprogresscost)
        {
            if(Money >= Workinprogresscost && Workinprogress > 0)
            {
                s("仕掛品を加工します。");
                s(" 加工前の所持金は:"+ Money +" 加工可能数:"+capacity+" 加工価格:"+Workinprogresscost*capacity);
                int i =0;
                s(" 製品在庫数:"+stock+" 仕掛品数:"+Workinprogress);
                for(;Workinprogress > 0 &&  capacity > i ; i++)
                {
                    stock ++;
                    Workinprogress--;
                }
                Money = Money-i*Workinprogresscost;
                s(" 加工後の所持金は:"+ Money + " 製品数:"+stock+" 仕掛品数:"+Workinprogress);
                }
                return stock;
        }
        int Workgstart(int Money, int stock, int Workinprogress , int capacity, int Workinprogresscost)
        {
            if(Money >= Workinprogresscost && Workinprogress > 0)
            {
                int i =0;
                //仕掛品数が0より多くて製造能力がiよりも多い場合繰り返し
                for(;Workinprogress > 0 &&  capacity > i ; i++)
                {
                    //製品数を1増やして仕掛品を1減らす
                    stock ++;
                    Workinprogress--;
                }
                }
                //仕掛品の数を返す
                return Workinprogress;
        }
        int Workgstart3(int Money, int materialstock, int Workinprogress , int capacity, int Workinprogresscost)
        {
            if(Money >= Workinprogresscost && Workinprogress > 0)
            {
                
                int i =0;
                for(;Workinprogress > 0 &&  capacity > i ; i++)
                {
                    stock ++;
                    Workinprogress--;
                }
                Money = Money-i*Workinprogresscost;
                }
                
                return Money;
        }
}
    
    
public class MG
{
    status status= new status(30000000,0,0,0);
    int Money = status.Money;
    public static void main(String[] args) 
    {
        status status= new status(30000000,0,0,0);     //資本金.研究.広告.借金の値を設定
        machine machineA = new machine(10000000,20);   //機械価格.機械性能の値を設定
        material material = new material(200000,0,500,0,1000,0); //材料価格.在庫数.購入数.仕掛品数
        worker worker1 = new worker(1,"機械OP",200000,0);
        worker worker2 = new worker(2,"加工OP",200000,0);
        worker worker3 = new worker(3,"営業",200000,0);
        
        int Money = status.Money; //status.MoneyをMoney変数に入れる
        int cost = machineA.cost; //machine.costをcost変数に入れる
        int materialprice = material.materialprice; //material.materialpriceをmaterialprice変数に入れる
        int Purchasingmaterials = material.Purchasingmaterials; //material.PurchasingmaterialsをPurchasingmaterials変数に入れる
        int materialstock = material.materialstock; //material.materialstockをmaterialstock変数に入れる
        int Workinprogresscost = material.Workinprogresscost;
        int capacity = machineA.capacity;
        int Workinprogress =material. Workinprogress;
        String machineOP = worker2.job;
        int stock = material.stock;  //在庫
        
        //機械を購入
        Money = machineA.buymachine(Money,cost);//機械購入 後ほどボタンが押されたらを追加
        
        //材料購入
        //材料在庫変更 所持金変更
        materialstock = material.buymaterialstock(Money, materialprice,Purchasingmaterials ,materialstock); //在庫数変更
        Money = material.buymaterial(Money, materialprice,Purchasingmaterials ,materialstock); //材料購入 
        
        //製造開始:在庫→仕掛品 上限は製造能力分 所持金→製造コスト×製造数で計算 製造数→機械のキャパ
        //材料加工開始 材料在庫変更 仕掛品数変更 所持金変更
        Workinprogress = material.Machiningstart2(Money, materialstock, Workinprogress , capacity, Workinprogresscost);
        Money = material.Machiningstart3(Money, materialstock, Workinprogress , capacity, Workinprogresscost);
        materialstock = material.Machiningstart(Money, materialstock, Workinprogress , capacity, Workinprogresscost);
        
        //製品完成:仕掛品→製品在庫 上限は仕掛品で作業者の数×製造能力で数を決定 所持金→製造コスト×製造数で計算
        //材料完成 製品在庫変更 仕掛品数変更 所持金変更 
        Workinprogress = material.Workgstart2(Money, stock, Workinprogress , capacity, Workinprogresscost);
        Money = material.Workgstart3(Money, stock, Workinprogress , capacity, Workinprogresscost);
        stock = material.Workgstart(Money, stock, Workinprogress , capacity, Workinprogresscost);
        
        //販売 販売数→製品在庫を上限にして営業の数+広告宣伝レベル 
        //売り上げ単価 価値+研究開発レベル 基本150000 研究開発レベル1の場合 10000上乗せ
        //製品在庫変更 所持金変更
    }
    public static void s(String str)
    {
        System.out.println(str);
    }
}

1

回答

5493

閲覧

1件の回答

評価

0

>メインで数値を代入させて
ここから
>矛盾が発生するのがわかり
ここまでが、うまく伝わってない気がする。
無理して文章で説明するよりも、単純化したコードを書いた方が伝わると思う。
最初はこんな感じで書いて、次がこんな感じで、とね。

考え方として、購入「される」側にメソッドを作るのが、うまくない。
購入「する」という主体(つまり人)で考えよう。
そして、ステータスというのも人の持ち物(プロパティ)として考えよう。何しろ「(人が)所持(してる)金」なんだから。
人クラスに機械クラスを渡すと、人クラスの中で機械クラスの価格を取って、その分所持金を減らすと考えるんだ。
そして同じく人クラスが持っている「所持機械リスト」に追加する。

回答する

ログインしていません。

ログインしなくても回答はできますが、ログインすると、質問・回答の管理、更新があった場合のメールでの通知を受けることができます。 アカウントをお持ちでない方は会員登録を行ってください。

ユーザ名匿名