質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

2729閲覧

for文を上書きさせない方法について

ashura

総合スコア17

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2021/07/09 16:25

編集2021/07/16 16:45

前提・実現したいこと

注文を受け(コマンドライン引数で受ける)、会計額を表示するプログラムを作りたいです。
(要件)
・商品は以下の五種類とする。
消しゴム :320円
鉛筆 :350円
定規:370円
のり :400円
ハサミ :300円
・「文房具名」「個数」を注文情報として、これをコマンドライン引数で受ける
・合計金額が1000円以上である場合は2割引きをする。
・消費税は8%とし、小数点以下で切り捨てで会計学を算出する。

発生している問題・エラーメッセージ

以下のようにプログラムを書きました。受け取る文房具名が一つの時は、しっかりと値段表記されます。ですが、文房具名が二つ以上の時は正常に計算がされません。原因として、一つの値(文房具名*個数)を受け取っても、次の値を受け取るとtotalPriceが上書きされていると予想しました。上書き処理をしないためにはどのように対処すればよいのでしょうか?

エラーメッセージ
コンバイルできているためなし

JAVA
ソースコード

class CalcThingSum { public static void main (String[] args) { int thing= 0 ; int sum = 0 ; int totalPrice = 0 ; double tax=1.08; for( int i=0 ; i<args.length ; i+=2 ){ if( args[i].equals("消しゴム")){ thing= 320 ; }else if( args[i].equals("鉛筆")){ thing = 350 ; }else if( args[i].equals("定規")){ thing= 370 ; }else if( args[i].equals("のり")){ thing= 400 ; }else{ thing= 300 ; } totalPrice = thing* Integer.parseInt(args[i+1]) ; } if(totalPrice>=1000){ sum=totalPrice- (int)(totalPrice*0.2); } sum =(int)(totalPrice*tax); System.out.println( "合計金額は" + sum + "円です。" ) ; }

試したこと

文房具名を5つに分け(thing~thing5という風に)そしてそれらの値をまとめて加える処理をしましたが、正しい計算結果が得られませんでした。

thing* Integer.parseInt(args[i+1])+thing* Integer.parseInt(args[i+1])...

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2021/07/09 17:08

えっと、コードの提示がありませんが、まったく手も足も出ない状態、と言うことなのでしょうか。また、 > java file 消しゴム 1 鉛筆 2 > 合計金額は800円です。 ... > 商品名と数は、その時によって変わる とありますが、商品の金額は決まっているのでしょうか。 商品名が可変であるならば、入力が想定される商品と金額は全て書いておかないとダメなのは分かりますか?
m.ts10806

2021/07/09 20:40

過去質問で得た回答を理解していれば何も手を出せないということはないでしょうね。 >アプローチの方法がいまいち思いつきません。 過去にご自身で投稿した質問でベストアンサーに選んだ回答が何も役に立たないとは思えないですけど、無反応のままだから勢いでつけてしまったとか? https://teratail.com/questions/347332#reply-476495 質問は編集できるし 「解決済み」は「受付中」に戻せるし(いわゆる「ベストアンサーの解除」) 理解できてないなら解決済みとしないことです。 ポンポン投げて動くコードだけもらっても「できた気」になるだけで自身の実にはなってませんから。
ashura

2021/07/10 04:48

おっしゃる通り、手も足も出せないという意味で投稿をしました。商品名と値段は、ソースコード内で定義。購入する商品と数は、コマンドライン引数で受け取るといった形です。商品名に関しては、5つほど要素を用意してそこから選び引数として受け取るという形です。(消しゴム 200円、鉛筆 300円、定規 100円、ハサミ 500円、のり 300円)ここから商品名と個数を選び、コマンドライン引数で受け取りたいということです。
ashura

2021/07/10 04:50

過去に、ベストアンサーにさせていただいた内容については、非常にわかりやすく理解できました。また、その後自分でソースコードを考え解決もしました。今回に、関しては今まで学習してきたことのどの部分を活かせばいいのかがわからなく質問をしました。
Zuishin

2021/07/16 22:52

何がわからないのかがわからない。プログラミングじゃなく算数だと思うけど。 合計を出したいなら足せばいいじゃない。
guest

回答4

0

アプローチがわからないの部分が雑すぎるので、考えていないとか丸投げという印象を受けます。
問題(課題)の理解が足りてないのでアプローチどころか、質問もできないのでは?

とりあえず。素直な考え方なら

やりたいこと
・合計金額を求める

合計金額の求め方
・商品名と個数を引数で受け取る
・その商品の単価 * 個数 を求める
・上記を合計金額に足し合わせる
・引数すべてに対して行う

商品単価の求め方
・不明

その他気になる点
・商品名から単価が見つけられない場合、どうするのか?

で、このような手順を考える作業自体にはjavaの知識不要なんですよね・・・

投稿2021/07/10 05:34

momon-ga

総合スコア4826

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

まず、前回(?)の私の回答のようにしてみてください。

プログラミングは『こう書けばよい』ではありません。

ここも参考にしてください。

今回の場合はStep2は

[言い換え] あなたは生協(大学の売店とか)で働いています。 ただし、システム上、[タバコ屋さん](https://ja.m.wikipedia.org/wiki/煙草屋)のようになっています。 お客さんが『消しゴム一個、鉛筆2本ください』というように、あなたに言います。 あなたはその合計を計算する係です。 計算お願いします。

と言った感じでしょうか。

さて、質問者さんはどうしますか?

私なら

まず商品とその金額をExcelとかみたいにリストアップする。

そして、『消しゴム一個、鉛筆2本ください』と言われたら、

まず消しゴムの項目を探す。(リストアップしたものから)

そうすると単価 200円で、それの1個。

よって、

200×1=200円。

この200をノートかなんかに一旦書いておく。
(私は数字が苦手なので丸暗記できない…)

次に鉛筆の項目を探す。

単価 300円で、それの2本なので、

300×2=600円。

先程の消しゴム分(200円)もあるので、
先程のノートから読み取って、
すべて(消しゴムと鉛筆)の合計を計算する。

200+600=800円。

これ以上の購入はないので、ここで計算終了。

つまり800円が答え。

…と言うようなことをJavaならJavaの書き方で書き下すだけです。

リストアップする作業は一番最初に、一回やれば良いですね。

Javaとかなら2種類思い浮かびますね。

一つはC言語で言う『構造体』のようなもので定義し、その配列(もしくはリスト等)で用意する。

つまり、『商品名』と『単価』をフィールドにしたクラスを用意する。

もう一つの方法はMapとして『商品名』と『単価』で一つとみなして…とか。

リストアップしたやつから探すのは、

上記の配列やMap等から探す。とやればいい。

個別の、消しゴム分とかは単純に、
配列とかから得た単価と個数をかければいいです。

消しゴム分+鉛筆分

の合計は、

『ノートに一旦書く』の代わりに『変数』を使う。

イメージ的には『総和を求めるプログラム』かな。

ただし、『リストアップしたもの』の中にない場合はどうなんでしょうか?

投稿2021/07/10 08:18

編集2021/07/11 07:36
BeatStar

総合スコア4962

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

totalPrice=の処理で小計の加算ができていなかったため、+=を用いることで解決しました。また合計金額(sum)の表示方法についても場合分けをすることで、データの上書きを防ぎました。回答や助言いただけた方、ありがとうございました。

投稿2021/07/18 10:07

ashura

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

回答ありがとうございます。たしかにこのままでは何を質問すれば良いのかすらわからないので一度、自分なりに整理してみます!ありがとうございます。

投稿2021/07/10 06:32

ashura

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問