複数の数字を計算する方法

このQ&Aのポイント
  • 複数の数字を一気に計算する方法を教えてください。
  • 必ず5つの値を入力しなくてはいけないのではなく、5つ以下でもOKです。
  • コマンドプロンプト上で自ら入力し動くプログラムを作成中です。
回答を見る
  • ベストアンサー

複数の数字を計算

下記のプログラムだと、 1 tasu 1 tasu 1 tasu 1 tasu 1 をしても答えは2となります。 入力された数字を一気に計算できる方法を教えて下さい。 また、必ず5の値を入力しなくては、いけないのでは無くて、5つ以下ならOKにしたいです。 コマンドプロンプト上で自ら入力し動くプログラムを作成中です。 例: 1 tasu 1 tasu 1 tasu 1 tasu 1  答え5      1 tasu 1 tasu 1 答え3 /*演算子チェックと演算実行*/ if (args[1].equals("tasu")){ /*演算子チェック*/ ans1 = num1 + num2; }else if (args[1].equals("hiku")){ /*演算子チェック*/ ans1 = num1 - num2; /* hiku 演算実行*/ }else if (args[1].equals("kake")){ /*演算子チェック*/ ans1 = num1 * num2; /* kake 演算実行*/ }else if (args[1].equals("waru")){ /*演算子チェック*/ if(num2 == 0){ /*0算チェック*/ System.out.println("0で割ろうとしました"); }else{ BigDecimal bd1 = new BigDecimal(num1); /* waru 演算実行*/ BigDecimal bd2 = new BigDecimal(num2); BigDecimal bd3 = bd1.divide(bd2, 2, BigDecimal.ROUND_HALF_UP);/*小数点第3位四捨五入、小数点第2位まで表示の割り算*/ } }else{ System.out.println("演算子1: kake waru tasu hiku の中から入力して下さい"); } /*演算子チェックと演算実行*/ if (args[3].equals("tasu")){ /*演算子チェック*/ ans1 = num2 + num3; }else if (args[3].equals("hiku")){ /*演算子チェック*/ ans1 = num2 - num3; /* hiku 演算実行*/ }else if (args[3].equals("kake")){ /*演算子チェック*/ ans1 = num2 * num3; /* kake 演算実行*/ }else if (args[3].equals("waru")){ /*演算子チェック*/ if(num3 == 0){ /*0算チェック*/ System.out.println("0で割ろうとしました"); }else{ BigDecimal bd1 = new BigDecimal(num2); /* waru 演算実行*/ BigDecimal bd2 = new BigDecimal(num3); BigDecimal bd3 = bd1.divide(bd2, 2, BigDecimal.ROUND_HALF_UP);/*小数点第3位四捨五入、小数点第2位まで表示の割り算*/ } }else{ System.out.println("演算子2: kake waru tasu hiku の中から入力して下さい"); } /*演算子チェックと演算実行*/ if (args[5].equals("tasu")){ /*演算子チェック*/ ans1 = num3 + num4; }else if (args[5].equals("hiku")){ /*演算子チェック*/ ans1 = num3 - num4; /* hiku 演算実行*/ }else if (args[5].equals("kake")){ /*演算子チェック*/ ans1 = num3 * num4; /* kake 演算実行*/ }else if (args[5].equals("waru")){ /*演算子チェック*/ if(num4 == 0){ /*0算チェック*/ System.out.println("0で割ろうとしました"); }else{ BigDecimal bd1 = new BigDecimal(num3); /* waru 演算実行*/ BigDecimal bd2 = new BigDecimal(num4); BigDecimal bd3 = bd1.divide(bd2, 2, BigDecimal.ROUND_HALF_UP);/*小数点第3位四捨五入、小数点第2位まで表示の割り算*/ } }else{ System.out.println("演算子3: kake waru tasu hiku の中から入力して下さい"); } /*演算子チェックと演算実行*/ if (args[7].equals("tasu")){ /*演算子チェック*/ ans1 = num4 + num5; }else if (args[7].equals("hiku")){ /*演算子チェック*/ ans1 = num4 - num5; /* hiku 演算実行*/ }else if (args[7].equals("kake")){ /*演算子チェック*/ ans1 = num4 * num5; /* kake 演算実行*/ }else if (args[7].equals("waru")){ /*演算子チェック*/ if(num5 == 0){ /*0算チェック*/ System.out.println("0で割ろうとしました"); }else{ BigDecimal bd1 = new BigDecimal(num4); /* waru 演算実行*/ BigDecimal bd2 = new BigDecimal(num5); BigDecimal bd3 = bd1.divide(bd2, 2, BigDecimal.ROUND_HALF_UP);/*小数点第3位四捨五入、小数点第2位まで表示の割り算*/ } }else{ System.out.println("演算子4: kake waru tasu hiku の中から入力して下さい"); }

noname#89508
noname#89508
  • Java
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

public static void main(String[] args){ int kekka = 0; int num = 0; String enzanshi = null; for ( int i = 0 ; i < args.length ; i ++ ){ if ( args[i].equalsIgnoreCase("tasu") ){ kekka += num; enzanshi = args[i]; } else { num = Integer.parseInt(args[i]); } } if ( enzanshi.equalsIgnoreCase("tasu") ){ kekka += num; } System.out.println(kekka); } 足し算だけ。

noname#89508
質問者

お礼

ありがとうございます。 ただ、わたくしが知識がないもので…理解が難しいですが、参考にさせて頂き調べながら、行っていきます。

その他の回答 (1)

回答No.2

電卓っぽいものを実装するならば、逆ポーランド記法で計算できるようなやつだと勉強にはいいんじゃないかと思ったり。 慣れればあっちのほうが直感的にわかりやすいし、スタックのお勉強もできます。

関連するQ&A

  • double を すべて bigdecimal

    big decimalに直したいのですが・・・ doubleのところをbigdecimalに変えるだけじゃ動かないんですね。 当方、プログラムを勉強し始めて1か月の者です。 BigDecimal(double val)を使うのですか・・・? よろしくお願い致します。 class dentaku{ public static void main(String args[]){ double val1 = 0; /* 最初の数字 */ double val2 = 0; /* 次の数字 */ String ope; /* 演算子 */ double kekka; /* 結果を格納 */ if (args.length != 3){ errDisp("引数は3個入力して下さい"); } try{ val1 = Double.parseDouble(args[0]); val2 = Double.parseDouble(args[2]); }catch(NumberFormatException e){ errDisp("数値でない値が入力されています"); } ope = args[1]; String opeStr[] = {"kake", "waru", "tasu", "hiku"}; boolean errFlag = true; for (int i = 0 ; i < 4 ; i++){ if (ope.equals(opeStr[i])){ errFlag = false; } } if (errFlag == true){ errDisp("演算子は kake waru tasu hiku の4つです"); } if (ope.equals("kake")){ kekka = val1 * val2; }else if (ope.equals("tasu")){ kekka = val1 + val2; }else if (ope.equals("hiku")){ kekka = val1 - val2; }else{ if (val2 == 0){ errDisp("0 で割ろうとしました"); } kekka = val1 / val2; } System.out.println("入力された式は " + val1 + " " + ope + " " + val2 + " です"); System.out.println("計算結果は " + kekka + " です"); } private static void errDisp(String errStr){ System.out.println("Usage : java dentaku 数値 演算子 数値"); System.out.println(errStr); System.exit(0); /* プログラムを終了する */ } }

    • ベストアンサー
    • Java
  • 研修生です。

    class dentaku{ public static void main(String args[]){ int val1 = 0; int val2 = 0; String ope; int kekka; if (args.length != 3){ System.out.println("引数は3個入力して下さい"); System.exit(0); } try{ val1 = Integer.parseInt(args[0]); val2 = Integer.parseInt(args[2]); }catch(NumberFormatException e){ System.out.println("数値でない値が入力されています"); System.exit(0); } ope = args[1]; String opeStr[] = {"kake", "waru", "tasu", "hiku"}; boolean errFlag = true; for (int i = 0 ; i < 4 ; i++){ if (ope.equals(opeStr[i])){ errFlag = false; } } if (errFlag == true){ System.out.println("演算子は kake waru tasu hiku の4つです"); System.exit(0); } if (ope.equals("kake")){ kekka = val1 * val2; }else if (ope.equals("tasu")){ kekka = val1 + val2; }else if (ope.equals("hiku")){ kekka = val1 - val2; }else{ if (val2 == 0){ System.out.println("0で割ろうとしています。"); System.exit(0); } kekka = val1 / val2; } System.out.println("入力された式は " + val1 + " " + ope + " " + val2 + " です"); System.out.println("計算結果は " + kekka + " です"); } }  上記のプログラムを全行網羅するために、引数のパターンを洗い出して表にしたいのです。 どうすればいいのですか?

  • 数値⇒漢数字変換 java

    こんにちは。java初心者の学生です。 実行時引数で得た数値を漢数字に変換するコードを書いているのですがif構文の&&のところで実行時エラーが出てしまいます。 原因としては1200001234と入力した時に”args[0].length()-12が存在しない”などがあげられると思いますが、下に載せたコード以外で兆、億、万桁が0の場合の対処方がわかりません。 御享受いただけると助かります。よろしくお願いします! public class Question14 { /** * 実行時引数で得た数字の漢数字変換 * @param args 数字 */ public static void main(String[] args) { StringBuffer num = new StringBuffer(args[0]); if(num.length()>20){ System.out.println("0~99999999999999999999の数値で入力してください。"); } else{ StringBuffer sb = new StringBuffer(); if(num.equals("0")){ System.out.println("零"); } else{ for(int keta = num.length()-1; keta>=0; keta--){ if(keta==args[0].length()-5 && !((num.substring(args[0].length()-8,args[0].length()-4).equals("0000")))){ sb.insert(0,'万'); } else if(keta==args[0].length()-9 && !((num.substring(args[0].length()-12,args[0].length()-8).equals("0000")))){ sb.insert(0,'億'); } else if(keta==args[0].length()-13 && !((num.substring(args[0].length()-16,args[0].length()-12).equals("0000")))){ sb.insert(0,'兆'); } else if(keta==args[0].length()-17){ sb.insert(0,'京'); } switch(num.charAt(keta)){ case'1': sb.insert(0,"一"); break; case'2': sb.insert(0,"二"); break; case'3': sb.insert(0,"三"); break; case'4': sb.insert(0,"四"); break; case'5': sb.insert(0,"五"); break; case'6': sb.insert(0,"六"); break; case'7': sb.insert(0,"七"); break; case'8': sb.insert(0,"八"); break; case'9': sb.insert(0,"九"); break; case'0': continue; default: System.out.println("数値を入力してください"); break; } if(keta==num.length()-2||keta==num.length()-6||keta==num.length()-10||keta==num.length()-14||keta==num.length()-18){ sb.insert(1,"十"); } else if(keta==num.length()-3||keta==num.length()-7||keta==num.length()-11||keta==num.length()-15||keta==num.length()-19){ sb.insert(1,"百"); } else if(keta==num.length()-4||keta==num.length()-8||keta==num.length()-12||keta==num.length()-16||keta==num.length()-20){ sb.insert(1,"千"); } } } System.out.println(sb); } } }

  • BigDecimal小数計算について

    プログラミングに関する知識が皆無の初心者です。 「はじめてのandroidアプリプログラミング」という本に従って電卓のアプリを作っているのですが、小数点を含む計算ができず、困っております。 演算記号前の数字が小数で、演算記号後の数字が整数であるならば 1.5*2=3 と正しく計算ができますが、 演算記号後が小数点を含む数だと、計算されず演算記号後に入力した数字が 2*1.5=1.5 と、そのまま表示されてしまいます。 小数の表示は if (mOp == R.id.button_decimal || mCalcValue.scale() != 0) {  // 小数点を含む場合  BigDecimal bd = new BigDecimal(BigInteger.valueOf(value),mCalcValue.scale() + 1);  mCalcValue = mCalcValue.add(bd); } else {  // それ以外の場合  // 10倍  mCalcValue = mCalcValue.multiply(BigDecimal.TEN);  // 足す  mCalcValue = mCalcValue.add(new BigDecimal(value)); } で、 イコールを押したときの動作は public void onEqualClick(View view) {  switch (mOp) {   case R.id.button_plus:   // 足し算   mCalcValue = mPreValue.add(mCalcValue);   break;   case R.id.button_subtract:   // 引き算   mCalcValue = mPreValue.subtract(mCalcValue);   break;   case R.id.button_multiply:   // かけ算   mCalcValue = mPreValue.multiply(mCalcValue);   break;   case R.id.button_divide:   // 現在の値が0ではないかチェック   if (!BigDecimal.ZERO.equals(mCalcValue)) {    // 割り算    mCalcValue = mPreValue.divide(mCalcValue, 11,    BigDecimal.ROUND_HALF_UP);   }  break; } です。 どこのコードが原因かもわからず、どこを質問文に掲示すればアドバイスいただきやすいかもわからなかったため、質問文に不足あるかもしれません。 すみませんがよろしくお願いします。

    • ベストアンサー
    • Java
  • 関数による四則演算でのエラー

    expected ')' before 'kakeru' とエラーが出ます。インデントも)も同じ数にしているのですが 30~1時間くらいやってるのですがわかりません 後ろから演算させるようにしたほうがいいのでしょうか。 ((3+4)*3)/7-2 の計算をするようにプログラムを関数を使用し書け。 include <stdio.h> int tasu(int,int); int kakeru(int,int); int waru(int,int); int hiku(int,int); int main() { /* ((3+4)*3)/7-2 */ printf("%d = 1\n",(tasu(3,4)kakeru(1,3)waru(21,7)hiku(3,2))); return 0; } int tasu(int x, int y) { return x+y; } int kakeru(int x, int y) { return x*y; } int waru(int x, int y) { return x/y; } int hiku(int x, int y) { return x-y; }

  • for文を使った累乗の計算方法について

    質問させてください。 for文を使った累乗の計算プログラムを作っています。 数値はコマンドライン引数から取得し、0番目の数字を i番目の数字分累乗するというものです。 ソースを途中まで作成したのですが、0乗した場合のプログラムが よく分かりません。どなたか教えていただけないでしょうか? public class Mondai { public static void main(String[] args) { //変数の初期化 int k = 0; if ( 2 <= args.length && args.length < 3) { //コマンドライン引数の数だけ配列を用意する int[] num = new int[args.length]; //0,1番目のコマンドライン引数を整数に変換してnumに代入する num[0] = Integer.parseInt(args[0]); k = num[0]; k *= k; num[1] = Integer.parseInt(args[1]); //num[1]の掛け算をnum[1]回繰り返す for (int i = 0; i < num[1] -2; i++) { k *= num[0]; } System.out.println("\"" + num[0] +"の" + num[1] + "乗は"+ k + "\""); if(num[1] == 0) { System.out.println("\"" + num[0] +"の" + num[1] + "乗は1\""); } //args.length <= 1の条件の時 } else if(args.length <= 1) { System.out.println("引数が足りないため累乗の計算ができません。"); //指定された条件以外の時 } else { System.out.println("引数が多すぎるため累乗の計算ができません。"); } } }

    • ベストアンサー
    • Java
  • 電卓アプリで%キーの計算プログラムについて

    現在、Androidのアプリ作成の勉強に励んでいます。 まず、手始めに電卓アプリを作りながら学んでいますが、 電卓キーの「%キー」をClickした時の計算プログラムがどうしても考えつきません。 できれば、BigDecimalメソッドを使って「%キー」の計算をさせることができればと 思っています。 doCalcというメソッドを作ってその中に計算プログラムを書いていて doCalcメソッドの中身(足し算、引き算、乗算、除算についての計算プログラム)についての計算プログラム)は下記のとおりです。 是非、ご教授いただければ助かります。 またBigDecimalメソッドを使わず他のやりかたでも結構ですので、参考にご教授いただければ幸いです。 宜しくお願いいたします。 //strResult=入力中の数値 //strTemp=入力が完了した数値と計算結果で共有 private String doCalc() { BigDecimal bd1=new BigDecimal(strResult); BigDecimal bd2=new BigDecimal(strTemp); BigDecimal result=BigDecimal.ZERO; switch(operator) { case R.id.KeypadAdd: result=bd1.add(bd2); break; case R.id.KeypadSub: result=bd1.subtract(bd2); break; case R.id.KeypadMulti: result=bd1.multiply(bd2); break; case R.id.KeypadDiv: if(!bd2.equals(BigDecimal.ZERO)){ result=bd1.divide(bd2, 12, 3); }else{ Toast toast=Toast.makeText(this,R.string.toast_div_by_zero,1000); toast.show(); } break; } if(result.toString().indexOf(".")>=0){ return result.toString().replaceAll("\\.0+$|0+$",""); }else{ return result.toString(); } }

  • 小数点表示とvoidについて

    こんにちは。 C言語初級者になります。 参考書を片手に勉強しているのですが いくつか不明な点があり、投稿させて頂きました。 参考書記載の、下記サンプルソースなのですが実行すると 「waru」が正しく表示されません。 どうやら計算結果が小数点の場合、「0」となるようです。 質問(1) 「waru」の結果を小数点表示で出力したい場合、どう修正すれば宜しいのでしょうか? 「int waru」宣言をdoubleやfloat宣言に修正しても駄目でした。。。 質問(2) このサンプルソースは「void keisan( int a, int b )」が 2回記述されていますが、1回目の意味が分かりません。 2回目の記述はkeisan関数で、計算させている部分だとは思うのですが。。。 また、このkeisan関数が何故void型なのか分かりません。 上級者の方から見れば簡単かとは思いますが どうぞ分かりやすい説明をお願いいたします。 ~~~~~~~~ ここから ~~~~~~~~~~ #include <stdio.h> void keisan( int a, int b ); int main( int argc, char* argv[] ) { int a, b; scanf( "%d", &a ); scanf( "%d", &b ); keisan( a, b ); return 0; } void keisan( int a, int b ) { int tasu, hiku, kakeru; int waru; tasu = a + b; hiku = a - b; kakeru = a * b; waru = a / b; printf( "tasu:%d\n", tasu ); printf( "hiku:%d\n", hiku ); printf( "kakeru:%d\n", kakeru ); printf( "waru:%d\n", waru ); return; }

  • 有効数字

    import java.lang.Math; public class NewtonMethod { public static void main(String args[]){ double x = 0.785; while (true){ double x2 = x * 2; double xN = x - (Math.cos(x2) - x2 + 1)/(- 2 * Math.sin(x2) - 2); if (xN >= x){ break; } x = xN; } System.out.println(x); } } このソースコードの求められたxを有効数字6桁で求めたいのですがどうすればいいのでしょうか? BigDecimal bi = new BigDecimal(String.valueOf(x)); x =bi.setScale(5,BigDecimal.ROUND_HALF_UP).doubleValue(); というのをどこかに入れればいいというところまではわかりましたが、さっきから実行してもうまくいきません; どなたか助けてください。よろしくお願いします。

  • javaプログラムについて

    mainメソッド内の指定された部分の処理を、 別のメソッドに分けてください。 mainメソッド内から作成した別メソッドを呼び出して 実行できるようにしてください。 ※分ける前と分けた後で処理結果が変わらないこと (入力された文字が"A"の場合true, それ以外の場合falseを返すように) */ class MethodAdd1{ public static void main(String[] args){ /* // ★ここから if("A".equals(args[0])){ judge = true; }else{ judge = false; } // ★ここまで */ boolean judge; if("A".equals(args[0])){ System.out.println("true"); }else{ System.out.println("false"); } } /* **戻り値:boolean **引数:String */ //ここにメソッドを作成 public static boolean equals(String a){ String str="A"; if("A".equals(str)){ return true; }else{ return false; } } } これで一応trueかfalseと表示されるのですが、合っているのか分かりません。 お時間のある方で、手直しをして頂ける方お願い致します。

専門家に質問してみよう