プロが教える店舗&オフィスのセキュリティ対策術

下記のプログラムだと、 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 の中から入力して下さい");
}

A 回答 (2件)

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);
}

足し算だけ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/07/14 15:01

電卓っぽいものを実装するならば、逆ポーランド記法で計算できるようなやつだと勉強にはいいんじゃないかと思ったり。



慣れればあっちのほうが直感的にわかりやすいし、スタックのお勉強もできます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!