2016-05-04 3 views
-1

Я почти закончил с моей программой, но мне нужно сделать мой код более удобным для пользователя.Создание удобного базового калькулятора java

Как я могу заставить его только просить пользователя ввести операцию и только одну цифру, когда речь идет о журналах, cos, sin, tan и square root? Пока он просит пользователя ввести две цифры и операцию, первая цифра никогда не имеет значения.

package calculator2; 
import java.util.Scanner; 
public class Calculator2 { 
    public static void main(String[] args) { 
     System.out.println("Addition"); 
     System.out.println("Subtraction"); 
     System.out.println("Division"); 
     System.out.println("Multiplication"); 
     System.out.println("Natural Log"); 
     System.out.println("Exponent"); 
     System.out.println("cos"); 
     System.out.println("sin"); 
     System.out.println("tan"); 
     System.out.println("root"); 
     System.out.println("pactorial"); 
     System.out.println("compitation"); 
     System.out.println("-------------------------"); 

     Scanner scan = new Scanner(System.in); 
     String userInput ; 

     do{ 
      calculator(); 
      System.out.println("Would you like to do another calculation. Enter Y for yes or N for no"); 
      userInput = scan.nextLine(); 
     }while (userInput.equalsIgnoreCase("y")); 
     System.out.println("Goodbye"); 

     } 

    public static void calculator(){ 

     Scanner user = new Scanner(System.in); 

     System.out.println("Enter a calculation. With a space in between digit and opertation. "); 
     System.out.println("Like 1 + 1 . For log, first press 0, then operator 'log' follow by digit you wish to calculate."); 

     double value1 = user.nextDouble(); 
     String op = user.next(); 
     double value2 = user.nextDouble(); 

     if (op.equals("+")){ 
      Addition(value1,value2); 

     }if (op.equals("-")){ 
      Subtraction(value1,value2); 

     }if(op.equals("/")){ 
      Division(value1,value2); 

     }if(op.equals("*")){ 
      Multiplication(value1,value2); 

     }if(op.equals("^")){ 
      Exponent(value1,value2); 

     }if(op.equals("log")){ 
      NaturalLog(value1); 

     }if(op.equals("cos")){ 
      cos(value2); 

     }if(op.equals("sin")){ 
      sin(value2); 
     }if(op.equals("tan")){ 
      tan(value2); 

     }if(op.equals("root")){ 
      root(value2); 
     }if(op.equals("patory")){ 
      patory(value1, value2); 
     }if(op.equals("comb")){ 
      comb(value1 , value2); 
     }else{ 
     } 
    } 
    public static void Addition (double value1, double value2){ 
     double Sum= value1 + value2; 
     System.out.println(Sum); 
    } 
    public static void Subtraction (double value1 , double value2){ 
     double diff = value1 - value2; 
     System.out.println(diff); 
    } 
    public static void Division(double value1 , double value2){ 
     double div = value1/value2; 
     System.out.println(div); 
    } 
    public static void Multiplication(double value1, double value2){ 
     double mult = value1 * value2; 
     System.out.println(mult); 
    } 
    public static void Exponent(double value1 , double value2){ 
     double exp = Math.pow(value1, value2); 
     System.out.println(exp); 
    } 
    public static void NaturalLog(double value2){ 
     double logs = Math.log(value2); 
     System.out.println(logs); 
    } 
     public static void cos(double value2){ 
      double cas = Math.cos(value2); 
      System.out.println(cas); 
     } 
     public static void sin(double value2){ 
      double sins = Math.sin(value2); 
      System.out.println(sins); 

     } 
     public static void tan(double value2){ 
      double tans = Math.tan(value2); 
      System.out.println(tans); 
     } 
    public static void root(double value2){ 
     double sqroot = Math.sqrt(value2); 
     System.out.println(sqroot); 

    } 
    public static void patory(double value1 , double value2){ 
     double denominator =1; 
     double numarator = 1; 
     for(double i = value1; i>=1; i--){ 
      numarator *= i; 

     } 
     for(double j = value1 - value2; j>= 1; j--){ 
      denominator *= j; 
     } 
     System.out.println(numarator/denominator); 

    } 
    public static void comb(double value1, double value2){ 
     double denominator1 = 1; 
     double denominator2 = 1; 
     double numarator = 1; 

     for(double i =value1; i >=1; i--){ 
      numarator *= i; 

     } 
     for(double j = value2; j>=1; j--){ 
      denominator1 *= j; 
     } 
     for(double j = value1 - value2; j>=1; j--){ 
      denominator2 *= j; 

     } 
     System.out.println(numarator/(denominator1*denominator2)); 
    } 
} 
+0

Я не знаю, почему я проголосовал. это то, что вопрос немой или что. по крайней мере, объясните. – adonis

+1

Вероятно, это сочетание того факта, что ваше форматирование было испорчено, и тот факт, что большинство вашего кода не имеет отношения к проблеме. См. [Mvce] (http://stackoverflow.com/help/mcve) – Laurel

+0

, что вы делаете «Сканирование сканирование = новый сканер (System.in);' дважды, что не нужно. Кроме того, вызов '.next()' не внутри блока try/catch может привести к сбою вашей программы. – alfasin

ответ

0

Простой условный запрос необходимо добавить.

if(function ==log||function == sin||etc.) 
//Something like this in conditional 
{ 
value2 = user.nextDouble(); 
//get user input only once for special cases that satisfy conditional 
} 
else 
{ 
    value1 = user.nextDouble(); //get user input normally. 
    String op = user.next(); 
    value2 = user.nextDouble(); 
} 

LOGIC Если функция не один из этих специальных функций, а затем попросить 2 номера и получить работу ... Иначе, если условный выполняются, когда пользователь хочет греховный тангенс и т.д. ... то только сканирование на один номер.

+0

@adonis Вот решение. Просто измените условие на операции, которым нужен только один вход – DarkV1

0

Вы должны разделить свой код на два случая: унарные функции (например, root/log/cos/etc) и би-функции (например: + -/*).

Поэтому я хотел бы изменить код calculator() быть что-то вроде:

public static void calculator() { 

    Scanner user = new Scanner(System.in); 

    System.out.println("Enter a calculation. With a space in between digit and opertation. "); 
    System.out.println("Like 1 + 1 . For log, first press 0, then operator 'log' follow by digit you wish to calculate."); 

    String command = user.nextLine(); 
    String[] ops = command.split("\\s+"); 
    if (ops.length == 2) { 
     biFunction(ops); 
    } else { 
     unaryFunction(ops); 
    } 
} 

и осуществлять biFunction(ops) и unaryFunction(ops) соответственно.

+0

извините, что это biFunction и unaryFunction, im новое для кодирования – adonis

+0

прочитайте [this] (https://en.wikipedia.org/wiki/Unary_operation) и [this] (https : //en.wikipedia.org/wiki/Binary_operation) – alfasin

Смежные вопросы