ここの掲示板に初めて質問させていただきます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
「誰も、解けないでしょうね~~」って、笑いながら言う教授にギャフンって言わせたいんです!
どうかよろしくお願いします。
A 回答 (10件)
- 最新から表示
- 回答順に表示
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に比べて'遅い'ことになります。
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がいいのではないかと。
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 …
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 …
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文です。習いましたよね?
実際のシステムでは使えないですが、宿題程度なら
これでいいんじゃないですか?
(少なくても間違いではないし・・・)
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()); // 一つ抽出
}
}
No.2
- 回答日時:
簿記の先入れ先出し法は知りませんが、おそらくキュー(待ち行列)を
使ってできると思います。ただ、JAVAの標準ライブラリにはキュー
そのものはなかったはずです。配列やArrayListを使って実装する
事になります。
ArrayListを使う場合はadd()、get()、remove()、size()、isEmpty()
などを使えばよいでしょう。
参考URL:http://java.sun.com/j2se/1.4/ja/docs/ja/api/java …
gimmick様、夜遅くにアドバイスいただき恐縮ですm(_ _)m見た事もないメソッドなのでビックリしましたけど、今一生懸命参考書&ネットで奮闘してます!おかげで、すごく勉強になります。本当にどうも、ありがとうございます。
No.1
- 回答日時:
データ構造につい参考書に書いてないでしょうか。
ほんと、そのまま倉庫をイメージして素直にプログラムで再現できれば…というところです。
個人的には初めての方は専用のクラスを使うよりは配列を使って表現してみるのが直感的にわかりやすいと思ってます。
参考URL:http://www.mybrain.jp/java/DS/DS_queue.html
uninin様、さっそくお返事いただきありがとうございます(^-^*)参考URL非常に参考になりました。わからなくって(イメージできなくって)へこんでたので、アドバイスとても嬉しかったです!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 簿記検定・漢字検定・秘書検定 [簿記] 簿記に詳しい方や、日商簿記2級に合格した方に質問です。 学生です。 -日商簿記の2級を取り 1 2023/01/17 02:50
- 高校 日商簿記3級の勉強中なのですが 精算表が完成せず困っています。 こちらの問題の回答を教えていただきた 2 2023/03/02 09:07
- 財務・会計・経理 管理会計論 運転資金 2 2022/11/21 14:28
- Web・クリエイティブ webライターで稼ぐ方法を教えて下さい。 webライティングを始めて約半年が経ちます。現在、3000 3 2023/04/10 14:33
- その他(ビジネス・キャリア) 事業復活支援金の事前確認での売上高チェックについて 2 2022/03/26 13:47
- 営業・販売・サービス レジ打ちの仕事をしてる方 (飲食店や弁当屋等) レジ締めした時に金額が合わない場合は お釣りの渡した 1 2023/07/14 12:12
- 大学・短大 消費者問題に関する課題が出たのですが、答えが分かりません。 「 A は、インターネットを利用した通信 3 2023/07/31 22:25
- 片思い・告白 女性の心理について 2 2022/10/20 14:02
- 会社・職場 レジの打ち間違いについて お弁当屋でレジの仕事してるんですが… 1つの商品を打ち間違いして レジ締め 2 2023/07/14 14:57
- その他(ネットショッピング・通販・ECサイト) ネットショッピングに関して 6 2023/01/31 12:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#でfirefoxのウインドウを移動...
-
C++からC#のdllを参照する際、...
-
javaでcsvファイル読込時の改行...
-
identifierについて教えて下さい
-
6桁の数字を重複なしでランダム...
-
java streamでenum配列への変換
-
デスクトップのアイコンの位置...
-
【C#】フォームをなめらかに移動
-
JAVA エラー 式の開始が不正で...
-
Randomクラスを使い同じ値をも...
-
C#経過時間の求め方
-
式の型は配列型で int に解決済...
-
因数分解メソッドの改良
-
java spring でエラーが出て困...
-
JAVAのプログラムソースコード
-
Javaでポインタ的なことはでき...
-
byte[2] から int へ。
-
C#で実行時にメソッドの返り値...
-
フィボナッチ数列 java
-
画像が表示されません。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
Javaで電卓を作りたい
-
式の型は配列型で int に解決済...
-
javaでカレンダー作成
-
JAVA エラー 式の開始が不正で...
-
JAVAでCの関数ポインタのような...
-
java spring でエラーが出て困...
-
6桁の数字を重複なしでランダム...
-
c# デリゲート関連の命名について
-
C++からC#のdllを参照する際、...
-
メインが含まれていません
-
(Swing)JTextFieldを半角のみ入...
-
DataSet(DataTable)の使い方
-
JUnit4のアノテーションについて
-
三目並べ(Tick-Tack-Toe)をJav...
-
初心者ですが、今javaで簡単な...
-
javaでcsvファイル読込時の改行...
-
classを使って座標軸を求めるコ...
-
C#で実行時にメソッドの返り値...
-
Java 初心者 int型の取り扱い方
おすすめ情報