アプリ版:「スタンプのみでお礼する」機能のリリースについて

或る程度まで進みましたが、
ソースコードが分からず困っています;;

こんな問題なのですが・・・

課題1
以下の要件を満たす電卓のプログラム
Calculatorクラスを作成し、ソースコードを
示せ。

1.最初に標準入力から文字を1文字入力し
計算の種類や動作を決定する。
必要な入力文字と動作の種類の対応を下記に示す。
入力文字  動作
  +    数値a,bを受け取りa+bの結果を表示する
  -    数値a,bを受け取りa-bの結果を表示する
  *    数値a,bを受け取りa*bの結果を表示する
  /   数値a,bを受け取りa/bの結果を表示する
      ただし、b=0の時は「Infinity」と表示する
  !    数値aを受け取りaの階乗を計算し表示する
  q   終了する
2. 計算の種類が決定した後、標準入力から計算に必要な数字を入力する
3.計算が終了した後、再度、標準入力からの動作の
種類を受け付ける。

こんな感じです。

で、一応ここまで進んでいます。
import java.io.*;
public class Calculator {
public static void main(String[] args) throws IOException {
BufferedReader buf = new BufferedReader(
new InputStreamReader(System.in));
int i = 0;
int answer = 1;
System.out.println("+、-、*、/、!、qから選んで入力してください");
String s = buf.readLine();
System.out.println("数字を二つ入力してください");
int a = Integer.parseInt(buf.readLine());
int b = Integer.parseInt(buf.readLine());
if (s.equals("+")) {
System.out.println(a + b);
}
if (s.equals("-")) {
System.out.println(a - b);
}
if (s.equals("*")) {
System.out.println(a * b);
}
if (s.equals("/")) {
System.out.println(a / b);
}
if (s.equals("!")) {
System.out.println("階乗の計算をします。数字を一つ入力してください");
while (i < a) {
i++;
answer = i * answer;
System.out.println("a!=" + answer);
}
}
if (s.equals("q")) {
//終了する処理
}
}
}

とりあえず、自分でなんとか・・・。
後、残ったのは割り算で
bに0が入力された時にInfinityと表示するのと、
階乗と終了する処理・・・・。
そして、終了の命令があるまで計算を続ける
ソースを書く・・・。

ここからどのようにすればいいのでしょうか・・・
教えてください。お願いします!

A 回答 (3件)

まず標準入力から1文字取得します。



System.out.println("+、-、*、/、!、qから選んで入力してください");
String s = buf.readLine();
String answer = "";

次に入力された種類によって必要な数だけ標準入力から数字を取得します。
if( s.equals("+") ) {
int a = Integer.parseInt(buf.readLine());
int b = Integer.parseInt(buf.readLine());
answer = Integer.toString(a + b);
}
if( s.equals("-") ) {
int a = Integer.parseInt(buf.readLine());
int b = Integer.parseInt(buf.readLine());
answer = Integer.toString(a - b);
}
// 省略
if( s.equals("/") ) {
int a = Integer.parseInt(buf.readLine());
int b = Integer.parseInt(buf.readLine());
if( b == 0 ) {
answer = "Infinity";
} else {
answer = Integer.toString(a / b);
}
}
if( s.equals("!") ) {
int a = Integer.parseInt(buf.readLine());
int value = 0;
for( int i = 0; i < a; i++ ) {
value *= (i + 1);
}
answer = Integer.toString(value)
}
System.out.println(answer);

answerをStringにすることで"Infinity"も出力することができます。
ただし全ての条件でInteger.toStringを行わないといけませんが。


qを入力されたときに終了する
例えば以下のメソッドでは return int; を必ず書きます。
public int sum(int a, int b) {
return a + b;
}
ここで戻り値がvoidのメソッドのときに途中で終了したい場合は
public void ave(int a, int b) throws Exception {
if( b == 0 ) {
return; //戻り値なし
}
System.out.println(a / b);
}

return;で処理を終了します。

つまり
if( s.equals("q") ) {
System.out.println("処理を終了します。");
return;
}
となります。

最後に終了の命令があるまで計算を続けるには"q"が入力されるまで無限ループさせればいいので
while( true ) {
System.out.println("+、-、*、/、!、qから選んで入力してください");
// 省略
System.out.println(answer);
}
    • good
    • 0

3.計算が終了した後、再度、標準入力からの動作の種類を受け付ける。


つまり、終了の命令があるまで計算を続けるソースを書くには、
whileループとbreak文を使いましょう。

while(条件){
  繰り返したい処理a
  繰り返したい処理b
  ・・・・
 if(条件){
break;
}
  繰り返したい処理1
  繰り返したい処理2
  ・・・・
}
    • good
    • 0

とりあえず気がついたところ。


・「q」を入力したのに、数字を2個入力しなければいけない。
・switchをなぜ使わないのか。
・階乗の計算をするときは数字を3個入力しなければいけない。

で、割り算で「b」が0だったらは、
if (式) {
 文
} else {
 文
}
で0の時と0じゃ無いときの処理を分けて書く。
    • good
    • 0

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