コマンドライン引数から1つ以上の数値を受け取り、この1つ1つの数値を購入した商品の定価としたとき、
合計金額(税込)を求め、更に割引を利かせた金額を表示するプログラムを作りたいです。また、希望としてはmainメソッドの内容は書き換えずに処理が通るようにしたいです、つまり、書き換えるのはcalcTaxPaymentメソッドとdiscountメソッドのみ変更してプログラムが通るようにしたいです。
まずcalcTaxPaymentメソッドでしたいことは、割引後の総額に税金を付加した金額を計算したいです。引数として受け取った値の税込価格(消費税は8%)を計算して返したいのと、税込み価格は整数で表示されるようにキャストを使って表示させたいです。
また、discountメソッドでは、引数として受け取った値(割引前の総額)が1000以上5000以下の場合、1000より大きい商品については10%割引にし、引数として受け取った値が5000より大きい場合、1000より大きく5000円以下の商品については10%OFF、5000円より大きい商品については20%割引にしたいです。値引き額は、calcTaxPaymentメソッドと同様に、小数点以下切り捨てで計算したいです。また、できれば割引金額の上限は5000円としたいのですが、これは私の能力の限界のため以下に示す私が書いたコードの中には示されていません...。
上記の事柄を目的として私が書いたコードを以下に示します。
Java
1public static void main (String[] args) { 2 3 int totalPrice = 0 ; //購入した商品の合計金額 4 5 //コマンドライン引数から購入した商品の合計金額(定価)を取得 6 for(int i = 0 ; i < args.length ; i++ ){ 7 totalPrice += Integer.parseInt( args[i] ); 8 } 9 10 //discountメソッドを使って割引を適用し、割引後の金額を取得 11 int discountedPrice = discount( totalPrice ); //割引後の金額 12 13 //calcTaxPaymentメソッドを使って支払金額(税込)を取得 14 int taxPayment = calcTaxPayment( discountedPrice ); //支払金額(税込) 15 16 //支払金額(税込)を表示 17 System.out.println("割引後の支払金額:" + taxPayment + "円" ); 18 19 } 20 21 /* 22 **以下の仕様を持つメソッドcalcTaxPaymentを作成する。 23 ** - 引数として受け取った値の税込価格(消費税は8%とする)を計算して返す 24 ** - 税込価格は小数点以下切り捨てで返す 25 */ 26 static int calcTaxPayment( int dprice ){ 27 28 int calcResult1 = (int)(dprice * 1.08) ; 29 30 return calcResult1 ; 31 } 32 33 /* 34 **以下の仕様を持つメソッドdiscountを作成する。 35 ** - 引数として受け取った値が1000以上5000以下の場合、1000より大きい分について10%割引にする 36 ** - 引数として受け取った値が5000より大きい場合、1000より大きく5000円以下の分について10%OFF、5000円より大きい分について20%割引にする 37 ** - 値引き額は小数点以下切り捨てで返す 38 ** - 割引金額の上限は5000円とする 39 */ 40 static int discount( int total ){ 41 42 if((total>=1000)&&(total<5000)){ 43 44 if(args[i] > 1000){ 45 46 args[i] = (int)(args[i] * 0.9) ; 47 48 } 49 int calcResult2 += Integer.parseInt( args[i] ); 50 51 52 }else if(total > 5000){ 53 54 if((args[i]>1000)&&(args[i]<=5000)){ 55 56 args[i] = (int)(args[i] * 0.9) ; 57 58 }else if(args[i] > 5000){ 59 60 args[i] = (int)(args[i] * 0.8) ; 61 } 62 63 int calcResult2 += Integer.parseInt( args[i] ); 64 65 } 66 67 return calcResult2 ; 68 69 } 70 71} 72 73
このコードをコンパイルした時になぜか、「calcResult2の後に;を入れたら?」みたいなエラーが出てきますが、そんな馬鹿な…と思っています。そんなところに;を入れてしまっては計算が途中で終わってしまうし、そんなコード見たこともないし...。エラーのアドバイスがあてにならないのでみなさんの力添えお願いしたいです。どなたか教えて頂ければ大変嬉しく思います。お願いいたします!!
【追記】
理解しにくい質問内容を投稿してしまい申し訳ないです。
自分的には、例えばコマンドライン引数で6000, 2000, 1000を受け取って合計金額が9000円だった場合、9000は5000より上なので、1000より大きく5000円以下の商品については10%OFF、5000円より大きい商品については20%割引にしたいから、6000は60000.8(小数点以下切り捨て), 2000は20000.9(小数点以下切り捨て), で1000はそのままで、もう一度和を算出する。というのが、discountメソッドでしたいことです。そのためにはコマンドライン引数で受取った各値が5000より大きいのか、1000より大きく5000以下なのかを評価しないといけないため、args[i]を使ってint calcResult2 += Integer.parseInt( args[i] )と表示してしまいました。どうすればメインメソッド内のコマンドライン引数で受取った各値をdiscountメソッドで評価できますでしょうか。 変数のスコープを考えればエラーが出ることは承知しておりますが、どのように表現すればよいかわからなかったためint calcResult2 += Integer.parseInt( args[i] );という意味不明なコードを書いてしまいました...。
回答3件
あなたの回答
tips
プレビュー