Калькулятор Java консоли


package calc;

import com.sun.tools.corba.se.idl.constExpr.Equal;    //imports .equals(variable)
import java.util.Scanner;    //imports scanners

public class Calc {

    public static void main(String[] args) {
        boolean go = true;    //sets up loop

        while(go)    //creates loop to top
        {
            System.out.println("Hello this is my calculator!");
            System.out.println("To add, type a, to subtract, type s.");
            System.out.println("To multiply, type m, to divide, type d.");

            Scanner scan = new Scanner(System.in);    //sets up scanners
            Scanner scan1 = new Scanner(System.in);


            String action = scan.nextLine();    //tells comp. to take user input

            if("a".equals(action))    //addition
            {
                System.out.println("Now type in the first number you would like to add.");
                int add1 = scan.nextInt();
                System.out.println("Now type the second number.");
                int add2 = scan.nextInt();
                int add3 = add1 + add2;
                System.out.println(add1 + " added to " + add2 + " equals " + add3 + "!");          
            }
            if("s".equals(action))    //subtraction
            {
                System.out.println("Now type in the first number you would like to subtract.");
                int sub1 = scan.nextInt();
                System.out.println("Now type the second number.");
                int sub2 = scan.nextInt();
                int sub3 = sub1 - sub2;
                System.out.println(sub1 + " subtracted bye " + sub2 + " equals " + sub3 + "!"); 
            }
            if("m".equals(action))    //multiplacation
            {
                System.out.println("Now type in the first number you would like to multiply.");
                int mul1 = scan.nextInt();
                System.out.println("Now type the second number.");
                int mul2 = scan.nextInt();
                int mul3 = mul1 * mul2;
                System.out.println(mul1 + " multiplied bye " + mul2 + " equals " + mul3 + "!"); 
            }
            if("d".equals(action))    //division
            {
                System.out.println("Now type in the first number you would like to divide.");
                int div1 = scan.nextInt();
                System.out.println("Now type the second number.");
                int div2 = scan.nextInt();
                int div3 = div1 / div2;
                System.out.println(div1 + " divided bye " + div2 + " equals " + div3 + "!"); 
            }


            System.out.println("Would you like to start over? (yes,no)");           
            String startOver = scan1.nextLine();

            if("no".equals(startOver))
            {
                go = false;
                System.out.println("Bye");
            }
        }
    }                                  
}
  • Можно ли сделать это более компактно?
  • Этот код содержит мертвый код?


8279
3
задан 7 декабря 2011 в 12:12 Источник Поделиться
Комментарии
3 ответа

Вы делаете "то же" для всех четырех вариантов - времени реферат!

import java.util.Scanner;    //imports scanners

public class Calc {

enum Op {

ADD("a", "add", "added to"),
SUB("s", "subtract", "subtracted by"),
MUL("m", "multiply", "multiplied by"),
DIV("d", "divide", "divided by");
public String key;
public String command;
public String result;

Op(String key, String command, String result) {
this.key = key;
this.command = command;
this.result = result;
}

public int eval(int x, int y) {
switch (this) {
case ADD:
return x + y;
case SUB:
return x - y;
case MUL:
return x * y;
case DIV:
return x / y;
default:
throw new AssertionError();
}
}
}

public static void main(String[] args) {
while (true) //creates loop to top
{
System.out.println("Hello this is my calculator!");
System.out.println("To add, type a, to subtract, type s.");
System.out.println("To multiply, type m, to divide, type d.");

Scanner scan = new Scanner(System.in); //sets up scanners
Scanner scan1 = new Scanner(System.in);

String action = scan.nextLine(); //tells comp. to take user input

Op op = null;
for (Op operation : Op.values()) {
if (operation.key.equals(action)) {
op = operation;
break;
}
}

if (op != null) {
System.out.println("Now type in the first number you would like to " + op.command + ".");
int x = scan.nextInt();
System.out.println("Now type the second number.");
int y = scan.nextInt();
int z = op.eval(x, y);
System.out.println(x + " " + op.result + " " + x + " equals " + z + "!");
}

System.out.println("Would you like to start over? (yes,no)");
String startOver = scan1.nextLine();

if ("no".equals(startOver)) {
System.out.println("Bye");
return;
}
}
}
}

Поэтому все специфические операции регистрируются в ФП перечислений. Если вы хотите добавить другие операции, такие как min, max, и, или, исключающее ИЛИ мод, вам не придется вводить новые если-блоками, новые перечисления.

4
ответ дан 7 декабря 2011 в 08:12 Источник Поделиться

Мелочи.

Вам не нужно, пойти, переменная.

while(true) {
if("no".equals(startOver))
{
System.out.println("Bye");
break;
}
}

Кроме того, вы можете использовать системы.из.е, чтобы сделать код немного легче читать.

System.out.printf("%d divided by %d equals %d!\n", div1, div2, div1 / div2);

Новой строки char является необходимым или все выходные появится на одной линии. Выполнив деление, сложение или умножение в заявлении о выходе избавит вас от третьей переменной.

Я не знаком с, сканер, класс, я не думаю, что вы нуждаетесь в двух из них.

Важное примечание, Вы код не имеет никакой обработки ошибок, если пользователь вводить текст вы ожидали номер, программа будет завершаться с ошибкой. Вы хотите, чтобы поймать ошибки на nextInt позвонит, скажи, что пользователю только ввод числа и снова читать из входного сигнала.

1
ответ дан 7 декабря 2011 в 02:12 Источник Поделиться

Эта линия:

import com.sun.tools.corba.se.idl.constExpr.Equal;    //imports .equals(variable)

На самом деле не нужен Б/У, и, вероятно, не делать то, что вы думаете он делает. CORBA является не то, что можно было бы обычно использовать в калькулятор...

Сравнение здесь:

 if("no".equals(startOver))
{
go = false;
System.out.println("Bye");
}

Фактически использует равен метод класса String. Кстати, кайдзен-это правильно и не нужно двух объектов сканера.

1
ответ дан 7 декабря 2011 в 07:12 Источник Поделиться