![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
今JAVAの勉強中です。
下記の問題が与えられて、うまくできなくて、ソースを教えて頂きたいです。
問題:
与えられた金額を貨幣にした時の紙幣と硬貨の枚数を算出し、表示するプログラムを作成してください。
0枚の紙幣、硬貨に関しては表示されないように。
【ヒント】
今回のプログラムではユーザの操作により金額が与えられます。
その際にすべきエラー処理を忘れずに組み込むこと。
【引数の渡し方】
コマンドプロンプトより下記のようにコマンドを実行することにより金額をプログラム外部から渡すことができる。
java ex 1117823
No.6ベストアンサー
- 回答日時:
>while (yen >= yentype[i]) {
> yen -= yentype[i];
> count[i]++;
>}
割り算知らないの?
count[i] = yen / yentype[i]; //商
yen = yen % yentype[i]; //剰余
普通はこうやるな。
>System.out.println("金額を入力してください");
println の説明を読んだことがありますか?
「改行が付く」とあるはず。printメソッドを使う。
System.out.print("金額を入力してください>_ "); のように・・・
こっちは改行されないから、入力プロンプトが直後に出てくる。
>Integer.parseInt(br.readLine());
数字でないものが入力される、あるいは桁数が大きすぎると、例外が
発生する。try~catchで防ぎ、catchブロックでエラーメッセージを
出力し、System.exit(1); などで、処理を終了する。因みに、正常に
終わったら System.exit(0); のように終了コードを変えると、少し
気が利いているね。
>java ex 1117823
クラス名が「ex」ということだが、クラス名の先頭は大文字が原則
なので、何かの間違いでは?小文字で作っても動作するけど、気持ち
悪い。尚、実際はclasspathオプションが必要になる。下記参照
java -classpath /home/~/bin Ex 1117823
1117823 これはmainメソッドのargsに渡される引数になる。
すると、(args.length > 0)なら、args[0]を使い、 (args.length == 0)なら、
標準入力から入力しろってことじゃぁないの?
No.5
- 回答日時:
金種を1万円札、5千円札、1千円札、硬貨は500円、100円、50円、
10円、5円、1円とします。
何も工夫しないなら、以下の手順です。
(1)金額を10000で割る。商が1万円札の枚数になり、剰余が次の金額になる。
(2)金額を5000で割る。商が5千円札の枚数になり、剰余が次の金額になる。
(3)金額を1000で割る。商が1千円札の枚数になり、剰余が次の金額になる。
以下省略
人間って、普通は上のように考えてますよね。単に言葉に直し、
プログラムにし易いように計算式を書いただけです。
「教える」なんて程のものじゃないでしょう?プログラムの能力は
人(機械)に理解してもらう説明力のことです。日本語が下手で
説明のマズイ人はプログラムもダメとしたものです。
最初のうちは冗長で「あたりまえだろ」みたいなことも記述するのは
しょうがないことですが、「文書化する」を面倒がらずに続ければ
この能力は向上しますので、がんばってください。
この回答への補足
ありがとうございます。
ソースを書いてみました。
import java.io.*;
public class aa {
public static final int[] YEN_TYPES = {
10000,5000,1000,500,100,50,10,5,1
};
public static int[] getYenCount(int yen, int[] yentype) {
int[] count = new int[yentype.length];
for (int i = 0; i < yentype.length; i++) {
while (yen >= yentype[i]) {
yen -= yentype[i];
count[i]++;
}
}
return count;
}
public static void main(String[] args) throws IOException {
System.out.println("金額を入力してください");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int yen = Integer.parseInt(br.readLine());
int[] count = getYenCount(yen, YEN_TYPES);
for (int i = 0; i < YEN_TYPES.length; i++) {
if(count[i] == 0) {
i++;
}
else{
System.out.println(YEN_TYPES[i] + "円\t" + count[i] + "枚");
}
}
}
}
このソースを改善したい場所はいくつがあります。
(1)金額を入力の提示のところは画面上に”金額を入力してください>_”のように表示させ、入力した金額は“_”の右にしたいですが、どうすれば可能ですか?
(2)エラーメッセージをつくタイミングと条件は何にすればいいですか?
(3)与えられた問題で
「【引数の渡し方】
コマンドプロンプトより下記のようにコマンドを実行することにより金額をプログラム外部から渡すことができる。
java ex 1117823」 を書いてあるんですが、java ex 1117823の意味は何ですか?
No.4
- 回答日時:
【ヒント】
それは「金種表」と呼ばれてます。
給与や出張旅費の支払いなどの事務処理に使われるので解説やサンプルは検索すれば大量に見つかります。
No.3
- 回答日時:
幾つかの要素があります。
アナタに出来ないことは何でしょう?
(1)コマンドラインの文字列の取得方法が分からない。
(2)金額として正しいかのチェック方法がわからない。
A.数字以外の文字がないか
B.¥とか,(カンマ)は許すか、許さないか
(3)金額が確定したあと、金種×数量の組み合わせを求める方法が
分からない。
(3)が分からない場合、金種(例えば10万円金貨や2千円紙幣はOK?)
および、数量の限定があるかないかです。
数量に限定が無ければ300円は100円×3ですが、100円が2枚しか
ないと、100円×2+50円×2のようにしなければなりません。
数量が限られるのは、けっこう難しいんですよ。制限があるのと
ないのでは全然、方法が違いますからね。
どこがどう分からないのか開示してください。
この回答への補足
申し訳ありません、初心者なので、上記で書いてある問題は全部わからないです…
(3)は数量が限定していません。
まずアルゴリズムから教えていただけますか?よろしくお願いします。
No.1
- 回答日時:
「用いる通貨の種類」を決めておかないと問題にならないんだけど....
「うまくできない」とはどういうことでしょうか?
・アルゴリズムが想像つかない?
・アルゴリズムはわかるけどそれをどうプログラムに書けばいいのかわからない?
・プログラムはかけるけど期待する答えと一致しない?
・その他?
とりあえず「できるところ」までは自力でやってみてください.
この回答への補足
通貨の種類は日本円で、紙幣は10000、5000、1000(2000ありとなしの二パターンある)、硬貨は500、100、50、10、5、1 になります。
「うまくできない」とは
アルゴリズムが想像つかないです。
そしてjava ex 1117823の意味はわからないです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 所得・給料・お小遣い キャッシュレス社会進行するなら1万円札って必要でしょうか? 1円、5円硬貨も嫌じゃないですか? 5 2023/06/28 16:33
- 北アメリカ 米ドルはなぜ「1ドル」が未だに紙幣メイン流通なのですか?(自販機向けのコインは補助的流通) 4 2023/07/01 09:16
- その他(お金・保険・資産運用) エラー紙幣 1万円札で 壱万円の表記の万の字が半分近く(周辺を含め)消えています。 郵便局で下ろした 4 2022/08/16 22:03
- 事件・犯罪 これらの硬貨に関することは犯罪ですか? 4 2022/08/21 20:30
- 数学 【 数A 場合の数 】 問題 10円硬貨2枚,50円硬貨3枚, 100円硬貨3枚の硬貨のうち一部また 2 2022/07/05 19:57
- 数学 +5する理由をおしえてください 4 2023/04/18 17:40
- 数学 昨日聞いた質問の次の問なのですが 4 2023/04/19 12:37
- 経済学 兌換紙幣と正貨について。 兌換紙幣は正貨と同等。 例えば1万の兌換紙幣なら、1万の正貨と交換できる。 1 2022/11/11 20:17
- 財務・会計・経理 金額を入力したら自動でお金(を吐き出してくれるような機械を探しています。 4 2023/06/17 09:58
- 歴史学 兌換紙幣と正貨について。 兌換紙幣は正貨と同等。 例えば1万の兌換紙幣なら、1万の正貨と交換する必要 1 2022/11/11 19:56
このQ&Aを見た人はこんなQ&Aも見ています
-
賃貸で可能な古民家風レトロな部屋作りのコツ!改めて知る畳の高い機能性と魅力も紹介
畳の部屋を雰囲気のよい部屋に仕上げたい!賃貸住宅でもできる古民家風のレトロな部屋作りのコツを伺った。
-
プログラミングの問題です 「金額を入力させ、500円玉、100円玉、50円玉、10円玉、1円玉の組み
C言語・C++・C#
-
入力したお金の金額からお札の枚数を求めるプログラムについて質問です。
C言語・C++・C#
-
javaでカレンダー作成
Java
-
-
4
Java、2の0乗~10乗の表示
Java
-
5
Cプログラミング
C言語・C++・C#
-
6
Excel関数で休日出勤日数を計算
Excel(エクセル)
-
7
CSVファイルの特定の行だけを読み込みたいです。
Java
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
全角スペースのチェックについて
-
VB.Net Object型 空かどうか
-
VBA Evaluate関数 型が一致しま...
-
連続する「\\」をひとつの「\\...
-
文字列が数字のみで構成されて...
-
文字列比較に 比較演算子(==...
-
String型の日付(2005/11/25)の...
-
コンストラクタでの例外は不可...
-
Timestamp型への変換について(J...
-
0除算の例外処理ができない!!...
-
例外ってIf文の中に入れますか...
-
[C#][FX]DLLを利用した共有メモ...
-
数字か文字列かを判定する関数
-
C#の捕捉されない例外処理の対...
-
Excelでのエラー
-
try catchについて
-
文字列からダブルクオートの削除
-
VBA 400エラー 1004エラー
-
VB.NETで16進数が正しいかどう...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
【JAVA】与えられた金額を貨幣...
-
時間の取得
-
VB.Net Object型 空かどうか
-
連続する「\\」をひとつの「\\...
-
数字か文字列かを判定する関数
-
String型の日付(2005/11/25)の...
-
VBA Evaluate関数 型が一致しま...
-
0除算の例外処理ができない!!...
-
VB.NETで16進数が正しいかどう...
-
文字列が数字のみで構成されて...
-
Timestamp型への変換について(J...
-
例外ってIf文の中に入れますか...
-
全角スペースのチェックについて
-
ファイルダイアログを開いた時...
-
C# マルチスレッドにおける例外...
-
VBA 400エラー 1004エラー
-
nullで、return出来るのはどん...
-
C#の捕捉されない例外処理の対...
-
C# UriFormatExceptionの回避
おすすめ情報