2016-05-04 22 views
-1

私のプログラムはほとんど終わっていますが、コードをより使いやすくする必要があります。ユーザーフレンドリーな基本的な電卓の作成Java

ログ、コサイン、sin、tan、平方根については、操作を入力するようにユーザーに尋ねることができますか?これまでのところ、2桁の数字を入力するようにユーザーに求めていましたが、最初の数字は決して問題にはなりません。

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

おそらく、あなたの書式がすべて乱れていることと、コードの大部分が問題に無関係であるという事実の組み合わせでしょう。あなたは 'Scanner scan = new Scanner(System.in);を2回実行していますが、これは不要です([mvce](http://stackoverflow.com/help/mcve) – Laurel

+0

参照)。さらに、try/catchブロック内にない '.next() 'を呼び出すと、プログラムがクラッシュする可能性があります。 – 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つの番号を尋ねて、操作を取得... 1つの番号だけをスキャンします。

+0

@adonisここに解決策があります。ただ1つの入力を必要とする操作に条件を変更してください – DarkV1

0

単項機能(root/log/cos/etcなど)とバイ機能(+ -/*など)の2つのケースをサポートするようにコードを分割する必要があります。

だから私のようなものであることを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は何ですか、 – adonis

+0

を新しくしました。[this](https://en.wikipedia.org/wiki/Unary_operation)と[this](https ://en.wikipedia.org/wiki/Binary_operation) – alfasin

関連する問題