2012-04-26 4 views
0

StringTokenizerを使用して電卓(コードのみ)を作成しようとしていますが、私は失われています。簡単な数学(+ - *)とそれ以外の基本的な操作(ログ、罪、タン、指数関数)を行う可能性を持って計算機を作成しなければなりません。このコードは、基本的な数式を使った例です。まずは基礎から始め、次にメソッドを使って他の関数を追加したいと思っていました。StringTokenizerを使用したJavaコンソール計算機

しかし、私はどのように操作を行うのかわかりません、私はスイッチが仕事をするかもしれないと考えていましたが、BEMDASでは複雑になりました。上のコードは、オペランドをchar配列に置き、数値をdouble配列に入れて、次に続ける方法を知らなかった。もし私がこのことをやり続ける方法を教えたり、私を導く人がいれば、感謝します。

import java.util.StringTokenizer; 
import java.io.*; 

public class Calculator { 
    public static void main (String[] args) {  
    int i=0; 
    int j=0; 
    int n=0; 
    int o=0; 
    double num []= new double [100]; 
    char op[]=new char [100]; 
    String ops[]=new String [100]; 

    String x = "5*10+15/12"; 
    StringTokenizer st = new StringTokenizer(x, "*/-+", true); 
    while(st.hasMoreTokens()){ 
     ops[j] =st.nextToken(); 
     j++; 
    } 

    for(i=0; i<j;i++){ 
     if(i%2==0){ 
     num[n]=Double.parseDouble(ops[i]); 
     n++; 
     } 
     else{ 
     op[o]=ops[i].charAt(0); 
     o++; 
     } 
    } 

    for(i=0; i<n;i++) 
     System.out.println(num[i]); 

    for(i=0; i<o;i++) 
     System.out.println(op[i]); 
    } 
} 

答えて

0

まず、抽象的に考える必要があります。問題を解決するプロセスを考える必要があります。あなたは "5 * 10 + 15/12"をどうやって解決しますか?小学校で問題を解決するためにどのように教えられましたか?どのように問題を自分の頭の中で簡単なステップに分けるかを考えてみましょう。このプロセスを頭に入れてループ、構造、if文、ツリー、アルゴリズムに翻訳することができます。

まず、 "ops"変数は何にも割り当てられないので、whileループは何もしません。あなたが考えなければならないのは、この場合、アスタリスク(+)をどのように取得し、この文字列から "5 * 10 + 15/12"をそのopts変数に分割するかである。

+0

私は、[+、 - 、/、+]のようなBEMDASを持つために、別の配列にオペランドの位置を保存する必要があります。このようにする必要があります[ 2,0,1,3]ですが、if文でポジションを保存しようとすると、操作に同じ演算子が2つ以上ある場合、2をどのように順番に含めるかわかりません。何かアドバイス? – Luna

+0

私のアドバイスは、まずあなたが何をしたいのかを正確に定義することです。文字列 "5 * 10"を評価するコードをどのように記述しますか?どのように文字列「5」を評価しますか?私のアドバイスは、あなたの隣に座ってこの問題を小さな塊に分解する複雑なプロセスを歩み、COSの教師または専門家を見つけることです。これは、これらの問題を解決するための一般的な手引書を保持するサイトではありません。私がこれをしなければならない場合、私はこれを行うための機能やライブラリを組み込みましたが、それは宿題には受け入れられません。この問題は、車輪を再発明するというカテゴリーに分類されます。 –

+0

@EricLeschinskiあなたはそのようなことをするライブラリを知っていますか?私は同じタイプの電卓を作ることにも興味があります。 – helsont

関連する問題