Javaプログラムについて - 四則演算と計算できない場合の表示方法

このQ&Aのポイント
  • Javaプログラムで、コマンドライン引数から2つの数字と1つの記号を受け取り、それに応じて四則演算を行います。
  • 受け取った記号が「+」ならば、受け取った2つの数字を足し算し、結果を表示します。
  • 受け取った記号が「-」ならば、受け取った2つの数字を引き算し、結果を表示します。受け取った記号が「*」ならば掛け算を行います。しかし、なぜかこの場合だけ正しく動作しません。また、それ以外の記号が入力された場合は「計算できません。」と表示するようにしたいです。
回答を見る
  • ベストアンサー

javaプログラムについて

*/コマンドライン引数で2つの数字と1つの記号を受け取ります。 * //受け取った記号が『+』ならplusメソッドを呼び出し、 * //受け取った記号が『-』ならminusメソッドを呼び出し、 * //受け取った記号が『×』ならmultiplyメソッドを呼び出し、 * //受け取った記号が『÷』ならdivideメソッドを呼び出し、 * //それ以外が入力された場合は『計算できません。』と表示する * //プログラムを作成してください。 * */ public class MethodAdd9 { public static void main(String[] args) { int input1 = Integer.parseInt(args[0]); int input2 = Integer.parseInt(args[1]); String sign = args[2]; //ここにプログラムを追加してください if(sign.equals("+")){ plus(input1,input2);//プラスメソッドへ } if(sign.equals("-")){ minus(input1,input2);//マイナスメソッドへ } if(sign.equals("*")){ multiply(input1,input2);//掛算メソッドへ } if(sign.equals("/")){ divide(input1,input2);//割算メソッドへ } } // 四則演算を行うメソッドを追加 //プラスメソッド表示 public static void plus(int a,int b){ int c=a+b; System.out.println(a+b); } //マイナスメソッド表示 public static void minus(int d,int e){ int f=d-e; System.out.println(d-e); } //掛算メソッド表示 public static void multiply(int g, int h){ int i=g*h; System.out.println(g*h); } //割算メソッド表示 public static void divide(int j,int k){ int l=j/k; System.out.println(j/k); } } ここまで出来て、記号を認識してくれるようにはなったのですが、何故か"*"掛算の記号だけ読み込んでくれません。また、ここから「計算出来ません」と表示させるにはどうすれば良いでしょうか。知恵をお貸しください。

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

  • ベストアンサー
  • KSOH
  • ベストアンサー率93% (29/31)
回答No.2

すみません。例に余計な文字列binがくっついていました。下記のとおり読み替えてください。 NG例: java MethodAdd9 2 * 3 OK例: java MethodAdd9 2 "*" 3

chelsea00
質問者

お礼

出来ました!丁寧な回答をありがとうございました!

その他の回答 (1)

  • KSOH
  • ベストアンサー率93% (29/31)
回答No.1

例えばlinuxのシェル環境やWindowsのコマンドコンソールで実行する際、引数に*と単純に書くとカレントディレクトリにあるファイル名リストに置き換えられてしまいます。これはファイル名の一覧をパラメータとして受け取るプログラムにとっては便利な機能なのですがご質問のようなケースではかえってじゃまになってしまいますね。 mainメソッドの先頭などで次のようにするとプログラムに引き渡された実引数が確認できます。 public static void main(String[] args) { for (String arg : args) { System.out.println("argument: " + arg); } ... } 対処方法としてはエスケープ記法を用いてアスタリスク文字をエスケープしてやります。 NG例: java bin MethodAdd9 2 * 3 OK例: java bin MethodAdd9 2 "*" 3 上の「OK例」のように指定してやればWindows/linuxどちらでも期待通りになると思います。

関連するQ&A

  • 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と表示されるのですが、合っているのか分かりません。 お時間のある方で、手直しをして頂ける方お願い致します。

  • javaのプログラムに関する質問

    * 入力された数値の数だけ、"*"を表示するメソッド * displayAsterメソッドを作成して下さい。 */ public class MethodAdd3 { public static void main(String[] args){ // 入力された数字をint型の数値に変換 int iInput = Integer.parseInt(args[0]); // displayAsterメソッドの呼び出し displayAster(iInput); } // ここにdisplayAsterメソッドを作成 public static void displayAster(int iInput1){ for(i=0; i<iInput1; i++){ System.out.print("*"); } System.out.println(""); } ここまで出来たのですが、コンパイルエラーになってしまいます。 考え方かヒントなど、知恵をお貸しください。

  • プログラムの合体。

    jump7799_4836さん 2018/7/2103:34:44 public class Test2 { public static int メソッド () { System.out.println("メソッド()が呼ばれました"); return 0; } public static int メソッド (int i) { System.out.println("メソッド(int i)が呼ばれました"); return i; } public static int メソッド (int i, int j) { System.out.println("メソッド(int i, int j)が呼ばれました"); return i; } public static int メソッド (short s) { System.out.println("メソッド(short s)が呼ばれました"); return s; } public static int メソッド (double d) { System.out.println("メソッド(double d)が呼ばれました"); return (int) d; } } public メソッド class Test2 { public メソッド static void main(String[] args) { Test2.メソッド (); Test2.メソッド (1); Test2.メソッド (1,2); Test2.メソッド (1.1); Test2.メソッド ((short) 1); Test2.メソッド ((double)1); } } kouzou@GD348ZZD9:/WORK$ javac Test2.java Test2.java:29: エラー: class、interfaceまたはenumがありません public メソッド class Test2 { ^ Test2.java:30: エラー: <identifier>がありません public メソッド static void main(String[] args) { ^ エラー2個 2つのプログラムが合体することってあるのですか? いつもすみません。 解説のほど、宜しくお願い申し上げます。

    • ベストアンサー
    • Java
  • Javaのプログラムに関する質問です。

     以下のプログラムはコマンドライン引数で複数の数字を  受け取り、int型配列arrayに受け取った値を代入して  arrayの先頭から順番に表示しています。    変換クラスと、表示クラスを作成し  (1)の部分を変換クラスで、  (2)の部分を表示クラスで行うように修正してください。 */ class ClassAdd08{  public static void main(String[] args){   HenkanClass subA = new HenkanClass();//HenkanClassのインスタンス化   subA.henkan(len,array);//変換メソッドの呼び出し   HyoujiClass subB = new HyoujiClass();//HyoujiClassのインスタンス化   subB.hyouji();//表示メソッドの呼び出し  } }   //****************************     (1)     ********************************** class HenkanClass{//変換クラスを新規作成  public void henkan(){//変換メソッド   int len = args.length;   int[] array = new int[len];   for(int i = 0; i < len; i++){    array[i] = Integer.parseInt(args[i]);   }  } }    //****************************     (1)     **********************************    //****************************     (2)     ********************************** class HyoujiClass{//表示クラスを新規作成  public void hyouji(){//表示メソッド   System.out.println("受け取った引数:" + len + "個");      for(int i = 0; i < len; i++){    System.out.println((i + 1) + "個目の数:" + array[i]);   }  }   //****************************     (2)     ********************************** } クラスのインスタンス化と、対応するメソッドまでは作成したのですが、その後どうすればいいか分かりません。考え方やヒントなど、皆様の知恵をどうかお貸しください。お願い致します。

  • javaのプログラムについて

    java始めたばかりの者です。 class sample1 { public static void main(String[] args) { for(int i=1; i<=5; i++){ for(int j=0; j<i; j++){ System.out.println("*"); } System.out.println("\n"); } } } これを実行すると * * * * * * * * * * * * * * * こうなってしまい * ** *** **** ***** このようにするにはどうしたらいいのでしょうか??

    • ベストアンサー
    • Java
  • javaのプログラムで・・・

    以下に示すプログラムの出力結果がなぜこうなるのか教えてください。メソッドaction1()あたりからどういう風に処理されているのか分かりません・・・。 class AA{ int fa,fb; AA(int a,int b){ fa=a; fb=b; } void action1(){ fa++; int fb=fa; } void action2(int fa){ fa=fa*100; } } class workg2{ public static void main(String[] args){ AA a1=new AA(10,200); System.out.println(a1.fa+","+a1.fb); a1.action1(); System.out.println(a1.fa+","+a1.fb); a1.action2(a1.fb); System.out.println(a1.fa+","+a1.fb); } } 出力結果: 10,200 11,200 11,200

    • ベストアンサー
    • Java
  • java iを1づつ増やすプログラムと2づつ増やすプログラム

    次のようにすればiを1づつ増やして表示されます。 class Calc{   int i=1;   int add(){     return i++;   } } class Count{   public static void main(String[] args){     Calc calc = new Calc();     System.out.println("i = " + calc.add());     System.out.println("i = " + calc.add());     System.out.println("i = " + calc.add());   } } 実行結果 i = 1 i = 2 i = 3 しかし次のように2づつ増やそうとすると、 class Calc{   int i=1;   int add(){     return i+2;   } } class Count{   public static void main(String[] args){     Calc calc = new Calc();     System.out.println("i = " + calc.add());     System.out.println("i = " + calc.add());     System.out.println("i = " + calc.add());   } } 実行結果 i = 3 i = 3 i = 3 このようになってしまいます。どこがおかしいのでしょうか?

    • ベストアンサー
    • Java
  • javaプログラムについて

    クラスの出席番号順にString型配列nameに名前が、 * int型配列scoreにテストの点数が格納されています。 * * 出席番号1 大悟 74点 * 出席番号2 琴音 70点 * 出席番号3 勇輝 88点 *       ・ *       ・ *       ・ *       ・ *       ・ * * このクラスの最高得点者の名前と、最低得点者の名前を * 表示するメソッドを作成してください。 * */ public class MethodAdd8 { public static void main(String[] args){ String[] name = {"大悟", "琴音","勇輝","葵","綾乃","和樹","凛","愛花","結愛","孝太郎"}; int[] score = {74,70,88,82,96,64,80,61,72,79}; //メソッドの呼び出し score("綾乃",1); score("愛花",2); } //ここにメソッドを追加してください public static void score(String name,int score){ if(score==1){ System.out.println("綾乃"); }else{ System.out.println("愛花"); } } } この配列から、最高得点者と最低得点者は分かるので上記のようにしたところ、 score配列の中から最高得点者と最低得点者を探すように、と言われました。 考え方やヒントなどをお願いします。

  • javaプログラム 合ってるかお願いします

    プログラムは非常に苦手なため合ってないと思いますが、合ってないのは何が正解かを教えてください。 よろしくお願いします 1 ローカル変数を全て答えよ args,num 2 インスタンス変数を全て答えよ num 3 インスタンスメソッド名を答えよ Example2 4インスタンスメソッドを呼び出している行 public class Example2{ int num; public static viod main(String[] args){ Example2 ex2 = new Example2(5); int a = ex2.getNum(); System.out.println(a); } Example2(int num){ this.num=num; } int getNum(){ return this.num; } }

    • ベストアンサー
    • Java
  • javaプログラムについて

    * クラスの出席番号順にString型配列nameに名前が、 * int型配列scoreにテストの点数が格納されています。 * * 出席番号1 大悟 74点 * 出席番号2 琴音 70点 * 出席番号3 勇輝 88点 *       ・ *       ・ *       ・ *       ・ *       ・ * * このクラスの最高得点者の名前と、最低得点者の名前を * 表示するメソッドを作成してください。 * */ public class MethodAdd8 { public static void main(String[] args){ String[] name = {"大悟", "琴音","勇輝","葵","綾乃","和樹","凛","愛花","結愛","孝太郎"}; int[] score = {74,70,88,82,96,64,80,61,72,79}; //メソッドの呼び出し int max=saikou(score); //最高得点メソッドへ System.out.println(max); int min=saitei(score); //最低得点メソッドへ System.out.println(min); } //ここにメソッドを追加してください public static int saikou(int[] score){ //最高得点者メソッド int max=score[0]; for(int i=1; i<score.length; i++){ if(score[i]>max) max=score[i]; } return max;//値を返す } public static int saitei(int[] score){ //最低得点メソッド int min=score[0]; for(int i=1; i<score.length; i++){ if(score[i]<min) min=score[i]; } return min;//値を返す } } これで最高得点と最低得点は表示されるのですが、ここからどうやって最高得点者「綾乃」と最低得点者「愛花」を表示するのか分かりません。どなたか御教授お願い致します。

    • ベストアンサー
    • Java

専門家に質問してみよう