• ベストアンサー

足し算するプログラム

タイトルの通りですが足し算をするプログラムを書いてみました。 第一引数を第二引数を足し算するのですが引数に「001」や「002」などの数字が入力された時に足し算した結果として素直に「00*」と足し算が出来ません。何かいい方法は無いでしょうか?教えてください。 import java.text.*; class Tashizan { public static void main(String[] args) { try { if(args.length == 0) { System.out.println("引数を整数値で入力して下さい。"); } else if(args.length == 1) { System.out.println("引数を整数値で2つ入力して下さい。"); } else if(args.length == 2) { int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); if(a <= 999999999 && b <= 999999999) { int wa = a + b; System.out.println(a + "+" + b + "の和は" + wa + "です。"); } else { System.out.println("入力した桁数を9桁以下か確認してください。"); } } else { System.out.println("引数は整数値で2つ入力して下さい。"); } } catch(NumberFormatException nfe) { System.out.println("整数値を2つ入力して下さい。"); } catch(Exception e) { System.out.println(e + "エラー発生!処理を終了します。"); } } }

  • Java
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • osumitan
  • ベストアンサー率33% (102/307)
回答No.2

たとえば、"001"と"002"という「文字列」を指定した場合に、 それをparseIntで、「数値」である1と2に変換しているわけなので、 (足し算をするためには当然そうしなければならないのですが) 「素直な結果」ということなら、「数値」の3ということになるでしょう。 そこを"003"という結果がほしいのであれば、「数値」である3から "003"という「文字列」を作って返さねばなりません。 頭をゼロ埋めして桁数をそろえるのはもちろん可能ですが、 ここで問題となってくるのは、それを何桁にするかということです。 たしかに"001"と"002"なら直感的に"003"かな?と思いますが、  ・"001"と"0002"だったらどう返せばいいのか?   (2つのパラメータが同じ桁数とはかぎっていない)  ・"888"と"999"だったらどう返せばいいのか?   (同じ桁数だからといって答えも同じ桁数とはかぎらない) こういったパターンを洗い出し、何桁にするかルールを決めて、 桁数をそろえる処理はそのあとということになりますね。

wish_kazu23
質問者

お礼

回答ありがとうございます。 何桁にするか・・・ってことで DecimalFormatクラスを利用して 桁数を10桁にすることで出来ました。 DecimalFormat df = new DecimalFormat("0000000000"); こんな感じで。

その他の回答 (2)

  • neuron-x
  • ベストアンサー率52% (139/266)
回答No.3

簡単なテストケースを作ってみました。 add() メソッドが実際の計算を行っているメソッドです。これにargs[0]、args[1]などを渡して結果を取得すると良いでしょう。(当然、予期しない文字列が渡されたときは例外のハンドリングを行いましょう) ちなみに、CommonsのStringUtilsを使っています。 http://jakarta.apache.org/commons/ ソースコード(表示を見やすくするため、タブを全角スペースで置き換えています) ---------------------------------------------------------------------- import junit.framework.TestCase; import org.apache.commons.lang.StringUtils; public class AddTest extends TestCase {   /** 桁数 */   public static final int  FIGURE  = 3;   /** テストケース */   public void testAddString() throws Exception {     AddTest at = new AddTest();     assertEquals(at.add("000", "000"), "000");     assertEquals(at.add("010", "000"), "010");     assertEquals(at.add("000", "010"), "010");     assertEquals(at.add("001", "002"), "003");     assertEquals(at.add("100", "200"), "300");     try {       at.add("abc", "xyz");       fail(); // 例外が発生しないと失敗.     } catch (Exception e) {       // Success.     }   }   /**    * 文字列で渡された値の足し算を行い、結果を返す。    *    * @param lhs 値1 (e.g. "001")    * @param rhs 値2 (e.g. "002")    * @return 足し算した結果. FIGUREの桁数で0埋め.    */   public String add(String lhs, String rhs) {     // 左の0を取り除く (e.g. "001" to "1")     String strLhs = StringUtils.stripStart(lhs, "0");     String strRhs = StringUtils.stripStart(rhs, "0");     int nLhs = 0;     int nRhs = 0;     // 0を取り除いた文字列を数字に変換 (e.g. "1" to 1)     // ただし、全てが0の場合は処理を行わない。     if (!StringUtils.isBlank(strLhs)) nLhs = Integer.parseInt(strLhs);     if (!StringUtils.isBlank(strRhs)) nRhs = Integer.parseInt(strRhs);     int nAns = nLhs + nRhs;     // 足し算結果の左に0を入れて返す. (e.g. 3 to "003")     String strAns = Integer.toString(nAns);     return StringUtils.leftPad(strAns, FIGURE, "0");   } }

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

意味がもう一つわからないんですが、3桁にするために0を補うということでしょうか? 例えば、 System.out.println(a + "+" + b + "の和は" + zeroFormat(wa,3) + "です。"); … static String zeroFormat(int x, int size){ String v=Integer.toString(x); int len=v.length(); for(int i=0;i<size-len;i++) v="0"+v; return v; } とかしたらどうでしょう

wish_kazu23
質問者

補足

説明不足で申し訳ありません。 例で言いますと・・・ >java Tashizan 001 001 001+001の和は002です。 というプログラムにしたいのですが。

関連するQ&A

  • 引数について教えてください。

    誰か教えてください。 今、このプログラム自体は引数に整数を2個入れたら加算されるように出来ていますがこれを何個入れても足せるようにしたいのですが、どのように変更したらいいのか分かりません。 すみませんが、お願いします。 public class Sample20 { public static void main(String[] argv) { if(argv.length != 1) { if(argv.length>=2) { int a,b; try { if(argv[0].indexOf(".") == -1 && argv[1].indexOf(".") == -1) { try { a=Integer.parseInt(argv[0].replaceAll("\\+" , "")); b=Integer.parseInt(argv[1].replaceAll("\\+" , "")); System.out.println(a+b); } catch(NumberFormatException e) { System.out.println("最大9桁までしか実行できません"); } } else { System.out.println("小数点は整数ではないので実行できません"); } } catch(Exception e) { System.out.println ("エラー:2個整数のみ入力して下さい"); } } else { System.out.println("エラー:何も入力されていません"); } } else { System.out.println("エラー:引数が一つしか入力されていません"); } } }

    • ベストアンサー
    • Java
  • プログラムの平均値の出し方。

    プログラムの平均値の出し方。 public class pazu{ public static void main(String[] args){ int sum =0,saidai; System.out.println("コマンドラインパラメータは"+args.length+"個です"); for(int i=0;i<args.length;i++){ int x=Integer.parseInt(args[i]); if(pazu.is_even(x)) System.out.println(args[i]+"は偶数です"); else System.out.println(args[i]+"は奇数です"); sum+=x; } saidai=pazu.max(args); System.out.println("合計:"+sum); System.out.println("最大:"+saidai); } static boolean is_even(int number){ return number%2==0; } static int max(String[] number){ int max =0; for(int i=0;i<number.length;i++){ if(max<Integer.parseInt(number[i])){ max=Integer.parseInt(number[i]); } } return max; } } このプログラムで数値の奇遇、合計値、最大値までは出せたのですが平均値の出し方がわかりません。 どこに何を入れればいいかを教えてください。お願いします。

  • 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
  • 教えてください。。。

    コマンドライン引数を2個 入力したときに加算されるプログラムを作成中なのですが、桁が大きい場合と文字を入力した場合が同じエラー処理になります。 別々に分けるエラー処理を教えて頂きたいと思います。 あと、引数一つの時もエラーになる処理をご教授お願いします。 public class Sample20 { public static void main(String[] argv) { if(argv.length>=2) { int a,b; try { if(argv[0].indexOf(".") == -1 && argv[1].indexOf(".") == -1) { try { a=Integer.parseInt(argv[0].replaceAll("\\+" , "")); b=Integer.parseInt(argv[1].replaceAll("\\+" , "")); System.out.println(a+b); } catch(NumberFormatException e) { System.out.println("整数の桁がおおき過ぎます"); } } else { System.out.println("小数点は整数ではないので実行できません"); } } catch(Exception e) { System.out.println ("エラー:2個整数のみ入力して下さい"); } } else { System.out.println("エラー:整数ではありません。"); } } }

  • 教えてほしいです。

    コマンドライン引数で2つ整数を入力する値の桁が多いときのエラー処理の書き方を教えてください。お願いします。 書き方が悪ければごめんなさい。 public class Sample20 { public static void main(String[] argv) { if(argv.length>=2) { int a,b; try { a=Integer.parseInt(argv[0].replaceAll("\\+" , "")); b=Integer.parseInt(argv[1].replaceAll("\\+" , "")); System.out.println(a+b); } catch(Exception e) { System.out.println ("エラー:2個整数のみ入力して下さい(例:java StudyA/A15_Hello 2 2)"); } } else { System.out.println("エラー:整数ではありません。2個整数を入力して下さい; } } }

    • ベストアンサー
    • 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 + " です"); } }  上記のプログラムを全行網羅するために、引数のパターンを洗い出して表にしたいのです。 どうすればいいのですか?

  • 最大値と最小値の求め方

    以下はコマンドライン引数で任意の数の整数を受け取って、合計・平均・最大・最小を求めようとしたソースです。 しかし、実行したら最大値と最小値が正しく出ませんでした。 if文が間違っているのかもしれないと思ったのですが、はっきりと『ここが間違っている』という場所が分かりません。 どうかご指摘お願いします。 class Choco { public static void main (String[] args) { int i; int sum = 0; int max; int min; for ( i=0; i<args.length; i++) sum += Integer.parseInt(args[i]); double ave = sum/args.length; max = args.length; min = args.length; if (args.length>max){ max = args.length; } if (args.length<min){ min = args.length; } System.out.println("合計は" + sum + "です。"); System.out.println("平均は" + ave + "です。"); System.out.println("最大値は" + max + "です。"); System.out.println("最小値は" + min + "です。"); } }

    • ベストアンサー
    • Java
  • Java言語のプログラムをC言語にする場合

    次の2つのJava言語のプログラムをC言語にしたいのですが、C言語でプログラムを書いたことがありません。C言語にする場合はどう書けばいいのでしょうか? import java.io.*; public class Sort { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("整数値を入力してください"); String line = reader.readLine(); int a = Integer.parseInt(line); String line2 = reader.readLine(); int b = Integer.parseInt(line2); String line3 = reader.readLine(); int c = Integer.parseInt(line3); String line4 = reader.readLine(); int d = Integer.parseInt(line4); int[] data = {a, b, c, d}; for (int i = 0; i< data.length - 1 ; i++) { for (int j = i + 1; j< data.length; j++) { if(data[i] > data[j]) { int e = data[i]; data[i] = data[j]; data[j] = e; } } } System.out.println("昇順に並べ替えると、"); for (int i = 0; i< data.length; i++) { System.out.print(data[i] + " "); } System.out.println("です。"); } catch (IOException e){ System.out.println(e); } catch (NumberFormatException e) { System.out.println("数式の形式が正しくありません。"); } } } import java.io.*; public class Yakusu { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("2つの整数値を入力してください"); System.out.print("整数A : "); String line = reader.readLine(); int a = Integer.parseInt(line); System.out.print("整数B : "); String line2 = reader.readLine(); int b = Integer.parseInt(line2); if(a%b == 0){ System.out.println("BはAの約数です"); } else { System.out.println("BはAの約数ではありません"); } } catch (IOException e){ System.out.println(e); } catch (NumberFormatException e) { System.out.println("数式の形式が正しくありません。"); } } }

  • intではなくStringで・・・

    こんなソースがあります。。 public class Check { public static void main(String[] args) { int i = Integer.parseInt(args[0]); if (i == 123) { System.out.println("あたり!"); } else if (i < 123) { System.out.println("はずれ!"); } else { System.out.println("おおはずれ!"); } } } これを、int型の文字を入力して判定させるのではなく、String型の文字で判定させたいのですが、 int i = Integer.parseInt(args[0]);をどう変えればいけるでしょうか? よろしくお願いします!

    • ベストアンサー
    • Java
  • コマンドライン引数を用いて。

    コマンドライン引数を用いて足し算をさせるプログラムです。 class goukei{ public static void main(String args[]){ int i, count; int sum = 0; int a[]; count = args.length; for(i=0; i<args.length; i++){ int arg_i = Integer.parseInt(args[i]); sum = sum + arg_i; } System.out.println("引数の数は" + count); System.out.println("合計は" + sum); } } と考えたのですが、もっとこうしたほうがいいという部分があれば教えてください。 一応これでできているとは思うのですがイマイチ自信がありません・・・。

    • ベストアンサー
    • Java

専門家に質問してみよう