• 締切済み

先入れ先出し法のプログラミングって(T-T)

ここの掲示板に初めて質問させていただきますm(_ _)m 今、大学でJavaの講義を受けてます。 文系なのに、取ったのが間違いかも、、、(T-T) 最初は「ジャンケン」とか「おみくじ」のプログラミングで、わかないながらも楽しかったのですが、徐々に手がつけれなくなって困ってます(汗 今回の御代は、 1月1日 仕入れた商品A、50個、100円 1月2日 仕入れた商品A、30個、200円 1月3日 仕入れた商品A、10個、300円 1月4日  売った商品A、50個 を簿記でいう「先入れ先出し方法」を使って算出 して、プログラミングを作らないといけません。 もう、1週間以上図書館や、参考書と睨めっこしても 全然解けません(+_+; (だって似たような例だ、どこにも見当たらないんだもん、、、。) 簿記の算出方法は勉強して理解できるようになりましたが、Javaのプログラミングはどう打っていいか検討もつきません。どなた様か参考になるサイトか、こういう風に打てばいいんだよってイメージつく方いらっしゃったら、些細な事でもいいので伝授していただければ幸いですm(_ _)m 「誰も、解けないでしょうね~~」って、笑いながら言う教授にギャフンって言わせたいんです! どうかよろしくお願いします。

  • Java
  • 回答数10
  • ありがとう数22

みんなの回答

  • ssr-y6
  • ベストアンサー率71% (5/7)
回答No.10

 以下の例は、リングバッファを使った先入れ先出し機構(FIFO:First In First Out)です。 InPointは、次にデータを入れる場所を、OutPointは次にデータを取り出す場所を示しています。 OutPoint==InPointのときは、バッファが空であり、(InPoint+1)==OutPointのときは、バッファがいっぱいであると判断します。 よってこの方法では、1000個の領域に999個のデータまでしか保存できません。 class souko extends Object { private int Tana[], InPoint, OutPoint; private static final int SoukoCap = 1000; public souko() { super(); Tana = new int[SoukoCap]; InPoint = 0; OutPoint = 0; }; public void kounyuu(int kosuu, int tanka) { int i; System.out.print("kounyuusuu(" + Integer.toString(kosuu) + ")"); for (i = 0; kosuu > 0; kosuu --, i ++) { if (((InPoint + 1) >= SoukoCap ? 0 : InPoint + 1) == OutPoint) break; else Tana[InPoint] = tanka; if ((++ InPoint) >= SoukoCap) InPoint = 0; }; System.out.println(Integer.toString(i) + " tanka:" + Integer.toString(tanka) + " kingaku:" + Integer.toString(i * tanka)); }; public int hanbai(int kosuu) { int i, j = 0; System.out.print("hanbaisuu(" + Integer.toString(kosuu) + ")"); for (i = 0; kosuu > 0; kosuu --, i ++) { if (OutPoint == InPoint) break; else j += Tana[OutPoint]; if ((++ OutPoint) >= SoukoCap) OutPoint = 0; }; System.out.println(Integer.toString(i) + " kingaku:" + Integer.toString(j)); return(j); }; } public class koubai { public static void main(String args[]) { souko Souko = new souko(); Souko.kounyuu(50, 100); Souko.kounyuu(30, 200); Souko.kounyuu(10, 300); Souko.hanbai(50); Souko.kounyuu(1000, 100); Souko.hanbai(1000); }; }

回答No.9

#8> ただ,java.util.Vector 自体はFILOでもFIFOでもなく,インターフェイス(界面仕様)だけをとってみれば単なる可変長配列に過ぎないのではないでしょうか? その通り。単なる可変長配列です。しかしそれは裏を返せば順序集合中の要素の位置によって挿入/削除にかかる時間計算量が変化することを意味しています。集合の先頭に要素を挿入/削除する際の時間計算量はΟ(N)であり、すなわちFILOとして使用するとLinkedListに比べて'遅い'ことになります。

  • aton
  • ベストアンサー率47% (160/334)
回答No.8

#6> 基本的にはjava.util.Vectorクラスを使うのが楽なんじゃないかと思います。 #7>VectorはStack(FirstIn-LastOut)なので #7>LinkedListがいいのではないかと。 たしかに,java.util.LinkedListで実装する方が直観的ですね。 ただ,java.util.Vector 自体はFILOでもFIFOでもなく,インターフェイス(界面仕様)だけをとってみれば単なる可変長配列に過ぎないのではないでしょうか? 実際,java.util.Vector#add(Object) と java.util.Vector#remove(int) を使って, 格納:java.util.Vector#add(Object) 取出:java.util.Vector#remove(0) とすればFIFOになりますし, 格納:java.util.Vector#add(Object) 取出:java.util.Vector#remove(java.util.Vector#size() - 1) とすればLIFOになります。

回答No.7

#6> 基本的にはjava.util.Vectorクラスを使うのが楽なんじゃないかと思います。 VectorはStack(FirstIn-LastOut)なので LinkedListがいいのではないかと。

  • aton
  • ベストアンサー率47% (160/334)
回答No.6

#5のatonです。 勘違いしていて恥ずかしい。 「後入れ先出し」ではなく,「先入れ先出し」ですね。 下の回答は無視してください。 ... これだけではなんですので,ついでに「先入れ先出し」に再トライ。 基本的にはjava.util.Vectorクラスを使うのが楽なんじゃないかと思います。こんな感じ。 Vector vec = new Vector(); //仕入れ処理 for (int ii=0; ii<50; ii++) { vec.add(new Integer(100)); } ...(以下同様) //販売処理 for (int ii=0; ii<50; ii++) { Integer val = (Integer) vec.remove(0); //先頭の要素を削除して戻り値として返します。 ...(何か必要な処理) } 処理速度には問題ありそうですが,やはり最も素直な実装かと。

参考URL:
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/Vector.html
  • aton
  • ベストアンサー率47% (160/334)
回答No.5

ちょっとだけアドバイスを。 「後入れ先出し」のプログラムを作るのであれば,Javaの標準ライブラリーに java.util.Stack というクラスがあるので,ArrayListや配列を使うよりこちらを使った方が楽だと思います。 pushメソッドで入れて,popメソッドで出します。 Stack stack = new Stack(); //仕入れ処理 for (int ii=0; ii<50; ii++) { stack.push(new Integer(100)); } ...(以下同様) //販売処理 for (int ii=0; ii<50; ii++) { Integer val = (Integer) stack.pop(); ...(何か必要な処理) } 型変換とjava.lang.Integerクラスの扱いが多少面倒ですが,実装としては一番素直だと思います。

参考URL:
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/Stack.html
  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.4

先入れ先出しに関しては、他の方が書いているので、 データの格納方法について少し書きます。 ArrayList等で管理するものは、単価だけにすれば楽ですよ。 1.50円で2個仕入れた。   ArrayListの中身   50 追加   50 追加 2.次に30円で3個仕入れた。   ArrayListの中身   50   50   30 追加   30 追加   30 追加 3.品物を3個売った   ArrayListの中身   50 → 削除   50 → 削除   30 → 削除   30   30 つまり、仕入れ時は個数分だけ単価の金額を追加し、 売上時は、個数分頭から削除していきます。 (在庫数を越さないためのエラーチェックを忘れずに) このためのメソッドを、ArrayListを拡張(extends)したクラスに 追加しておくといいでしょう。 //入庫(仕入れ)用 public void nyuko(int suryou, int tanka); //出庫(売上)用 public void shukko(int suryou); 繰り返しは、for文です。習いましたよね? 実際のシステムでは使えないですが、宿題程度なら これでいいんじゃないですか? (少なくても間違いではないし・・・)

  • coral0
  • ベストアンサー率92% (13/14)
回答No.3

先入れ先出し法というのは、先に入れたものが取り出す時に先に出てくれば良いので、Vectorでaddメソッドを使って追加するのではなく、insertElementAtで常に先頭に追加して行き、取り出す時に最後尾から取り出していくという方法を使えば、簡単に作成できると思います。 追加していくときに、常に配列の先頭に挿入して行き、取り出す時は、最後尾から取り出して行けば、配列の最後尾を削除するという形です。 言葉で説明しても分かり辛いかと思いますので、例を書いて見ますね 以下のソースを実行すれば、FIFO(先入れ先出し)方式で動いている事が確認できると思います。 import java.util.Vector; public class Sakiire { Vector vec; public Sakiire() { // コンストラクタ vec = new Vector(); } public void push( Object obj ) { // 追加処理 vec.insertElementAt(obj, 0); } public Object pop() { // 抽出処理 if( vec.isEmpty() ) return null; Object obj = vec.lastElement(); vec.remove(vec.size()-1); return obj; } public static void main(String[] args ) { Sakiire a = new Sakiire(); a.push("a"); // aを追加 a.push("b"); // bを追加 a.push("c"); // cを追加 System.out.println(a.pop()); // 一つ抽出 System.out.println(a.pop()); // 一つ抽出 System.out.println(a.pop()); // 一つ抽出 } }

  • gimmick
  • ベストアンサー率49% (134/270)
回答No.2

簿記の先入れ先出し法は知りませんが、おそらくキュー(待ち行列)を 使ってできると思います。ただ、JAVAの標準ライブラリにはキュー そのものはなかったはずです。配列やArrayListを使って実装する 事になります。 ArrayListを使う場合はadd()、get()、remove()、size()、isEmpty() などを使えばよいでしょう。

参考URL:
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/ArrayList.html
HitomiM
質問者

お礼

gimmick様、夜遅くにアドバイスいただき恐縮ですm(_ _)m見た事もないメソッドなのでビックリしましたけど、今一生懸命参考書&ネットで奮闘してます!おかげで、すごく勉強になります。本当にどうも、ありがとうございます。

  • uninin
  • ベストアンサー率20% (26/129)
回答No.1

データ構造につい参考書に書いてないでしょうか。 ほんと、そのまま倉庫をイメージして素直にプログラムで再現できれば…というところです。 個人的には初めての方は専用のクラスを使うよりは配列を使って表現してみるのが直感的にわかりやすいと思ってます。

参考URL:
http://www.mybrain.jp/java/DS/DS_queue.html
HitomiM
質問者

お礼

uninin様、さっそくお返事いただきありがとうございます(^-^*)参考URL非常に参考になりました。わからなくって(イメージできなくって)へこんでたので、アドバイスとても嬉しかったです!

関連するQ&A

  • 倉庫作業の先入れ先出しの置き方

    言い回しが難しいのですが、倉庫作業での先入れ先出しのための 荷の置き方を教えてください。 同一アイテムの同一数で、賞味期限が3月まで、4月まで、5月まで とある商品の倉庫での置き方です。 私は、底面に5月までの分を可能な限りおいてタワー状にして その上に4月までの分、そして一番上には3月までの分を置くのが 正しいと思っています。 もう一人の人は、3月までの分だけをタワー状、4月までの分だけを タワー状、5月までの分だけをタワー状にするという方法です。 私はこの方法だと左端からとる人、右端からとる人とで管理が乱れる と思うのですが、どうでしょうか。

  • Excel 先入れ先出し残在庫について

    Excelでの在庫管理について教えてください。 シート内容として、Sheet1に区分・商品名・入荷数・出荷数・在庫数があります。 毎月、出荷数・入荷数・在庫数が列に追記されていきます。 先入れ先出しを行い、長期滞留の在庫数を把握したいため、 sheet2に当月末(sheet2のA1セル)の在庫の入庫日が3ヵ月以上前の入庫月と、その在庫残数を表示したく、その計算式をお教え頂きたくお願い致します。(添付、黄色部分が求めたい入庫月と在庫数量となります。)

  • JAVAでの動く波のプログラミング

     Javaのプログラミングに関する質問です。  Javaを勉強中なのですが、sin波を動かす式がどうにも出来ません。以下は私が現状で考えたプログラミングです。 int x1, x2, y1, y2; x2 = getWidth()/5;  y2 = getHeight()/2; for (int i = 1; i <= 90; i++){ x1 = x2; y1 = y2; x2 = x0+(int)(i/30.0*200); y2 =getHeight()/2 -(int)(a*Math.sin(i/30.0*2*Math.PI/T*t)); g.drawLine(x1, y1, x2, y2); }  なんとか独学でこのようなものを考えたのですがまるでダメです。よろしければ止まっている波ではなく動く波のプログラミングの仕方をJavaで教えて頂けると幸いです。

  • プログラミングについて

    プログラミングを今年の四月にはじめたばかりなのでまったくプログラミングの知識がない状態で、大学の3年の授業でJSPをやっているのですが、ほとんどわかりません。(大学には3年次編入で入りました) ちなみにJSPは授業をとらないといけません。 しかし今、一年の授業でC言語を習っていますが、JSPで使うのはJavaなので、C言語をこのまま勉強するべきなのか、それともJavaをやったほうがいいのか迷ってます。プログラミングに関してもっている参考書はやさしいC、明解C言語入門編、 JSP業務アプリケーション短期開発入門です。 何かいい教科書や勉強法、アドバイスがありましたら教えてください。

  • 在庫評価について初歩的質問

    初級シスアドの勉強をしています。質問カテゴリーをどこにしようか迷いましたが,お分かりの方,教えてください。商業系の勉強をきちんとしたことが無いので,困っています。 期首の在庫量,期間中の入庫量および期末の在庫量が与えられたとき,在庫(金額)の評価法として, 1.先入れ先出し法 2.後入れ先出し法 3.平均原価法 4.個別法 とがあるそうですが, 平均原価法の説明を見ると, 「仕入れた商品の平均原価にもとづいて期末棚卸商品の在庫評価を計算する。」とあります。 期間中に仕入れた商品について平均値を計算すればよいのですか? 期首在庫分と期末在庫分は計算に入れるのでか? その商品が期末に在庫になっているか否かに関係なく計算するのですか? たとえば,次の数値例でご説明おねがいします。      個数  単価 期首在庫 3個 10円 4月仕入 1個 11円 6月仕入 2個 12円 7月仕入 3個 13円 9月仕入 4個 14円 期末在庫 8個 

  • 購入価格が違う株式の1つを売却した時の譲渡益の計算

    購入時期が古い順に単価A500円、B600円、C700円の株式、計3,000株のうち、1,000株だけ1,000円で売却した時、譲渡益の計算はA、B、Cどれでも任意の購入単価を使って計算して良いのですか?それとも「先入れ先出し」で単価Aを売却したとみなして計算しないといけないのでしょうか? 任意なら単価Cを使った方が譲渡益が少なくなりますから税金も少なくて済みます。

  • プログラミングについて困っています

    プログラミングについて困っています 1年単利金利0.2%のA銀行と 1年複利金利0.19%のB銀行にそれぞれ100万円を預けた時の各年の預金高をB銀行の預金高が多くなるまで一覧表にする といったプログラムを作成しなければならないのですが全くわかりません どのようなプログラムを作成すればいいのでしょうか? 参考などがあると助かります

  • 建設業で経理されてる方

    私は日商簿記3級を持ってます。 以前、勤めてた会社は建設業で言う「電気通信業」と営んでたんですが そこでは、現金の入出金や簡単な伝票の記票、会計ソフトがあったので 仕分けを入力すれば、月次が出てくるし、あとは税理士任せでした。 転職してきた会社も業種は異なるのですが、建設業で来年法人化するにあたり、今は材料の在庫管理など、きちっと出来てない状態です。 まずは材料の在庫管理からしようと思うのですが 私には在庫管理は初めてで、簿記で言う先入れ先出しとか 色々な記帳方法があると思うのですが、我社にはどんな方法が適用してるのかいまいちつかめず、どう仕事を進めていくべきか悩みます。 それに、会計ソフトもないので、どーやって月次の利益や、 キャッシュフローの作成の仕方もわかりません 建設業税理士も目指したいのですが、書店で参考書もないし・・・ どうか先輩方よいアドバイスをお願いします

  • プログラミング全般(Java.C言語等)について。初歩的な質問です。

    始めまして。最近プログラミングに興味があるのですが、技術的な事以前の事をお伺いしたいのでよろしくお願いします。 素人が自分なりの言葉で長々と質問してしまうかもしれませんので、そういったことを不快に思われる方はスルーして下さい。逆に、厳しく、鋭くツッコミながらも的確なアドバイスをいただける方よろしくお願いします。 上記にもございますが、仕事にしたいとか抜きで、単純にプログラミングという作業に興味があります。そこで、過去ログ等を見ていたところ今後はjavaが更に伸びてくるのでは?という方の意見がチラホラ見れましたのでWebで検索してみたり、本日、本屋さんに行って参考書を読んでみました。 プログラミングで作ったプログラムは具体的にどのような製品で使われていますでしょうか?これが大きな質問です。 私がプログラミングやプログラマーと聞いてまず思い浮かべるのがゲームソフトなのですが、例えば過去にドラクエIIIと言うファミコンソフトがありました。この様なソフトの中には長方形の形をしていて、左右からムカデの用に足が生えたチップ?という物が入っていると思うのですが、この中にプログラマーの方がプログラミングしたデータが入っているという認識で間違いないでしょうか?パチンコ、パチスロ等でもメインのコンピュータ的な物があると思うのですが、そちらも全てプログラミングされた物でしょうか? あと、javaのどの入門書を読んでも、始めは冷蔵庫などの家庭用の製品等の為にプログラミングしていたと書いてあったのですが、これは電化製品のどのような場所に使われているのでしょうか?そう考えると、デジタル表記のある電化製品はやはり中にチップの様な物等があって、指示された仕事をするようプログラムされているのでしょうか?もしそれらも含めて全てプログラミングによって形成されているとなると、世の中のかなりの物がそれぞれの言語でプログラミングにて中枢を作られているということですよね? ちなみに、javaのHP上でコンパイラーという物をダウンロードし、そこに言語ファイルを製作していくことによってコマンドプロンプトという画面に結果等を表示させると思うのですが、(この辺は浅知恵なので間違っていたらすいません)ヤフオクなどで説明文をHTMLで製作し、出品確認ページに行くと実際にHTMLに応じた画面(改行、空白、枠等)になります。ということは商品説明をつくっている時に使用した説明文のソースがヤフオクで言うプログラミングという認識見たいな形でよろしいのでしょうか? あと、java用にプログラミングしたソースはどのようにしてその商品やWeb上に組み込まれるのでしょうか? かなりわかりにくい説明だと思うのですが、わかる部分だけでも良いので(もしくはURL)アドバイスいただけるとありがたいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • エクセル 先出先入 (最古日付を表示)

    エクセルでの在庫管理について教えて下さい。 シート内容として、商品名・出荷数・入庫数・在庫数があります。 毎月の、出荷数・入庫数・在庫数が列に追加で記載されていきます。 先入れ先出しを行いたい為、当月末(M列)の在庫数から、その在庫の一番古い入庫月を求める計算式をお教えください。 入庫は、在庫が0になってから補充する場合と、在庫が0になる前に補充する場合がございます。 宜しくお願いします。

専門家に質問してみよう