0

このフォーム [1+2/3*5-4] でユーザー入力を受け入れる電卓を作成する必要がある宿題があります。文字列からの値を格納するために配列を使用することは想定されていません。代わりに、一度に 3 つの数字と 2 つの演算子を使用することになっています。私の質問は、数値と演算子をどのように保存し、それらを保存して値を計算すると、元の文字列から新しい数値と新しい演算子を取得するかです。これは私がこれまでのところ正しい方向にあるかどうかわからないものです。

public class ExpresionEvaluation {

    private static String expresion;
    static double o1;
    static double o2;
    private static double o3;
    private static char operator1;
    private static char operator2;

    public static double getO1(String s){
        s=s.trim();
        String r ="";
        while (s.length()>0 && s.charAt(0)>='0' && s.charAt(0)<='9'){

            r = r + s.charAt(0);
            s = s.substring(1);


        }
        o1 = Double.parseDouble(r);
        return(o1);
    }

    public static char getOperator1(String s){
        s=s.trim();
        char r;
        while (s.length()>0 && s.charAt(0)>='0' && s.charAt(0)<='9'){

            r = s.charAt(1);
            s = s.substring(2);


        }
        r = operator1;
        return(r);
    }

    public static double getO2(String s){


        s=s.trim();
        String r ="";
        while (s.length()>0 && s.charAt(0)>='0' && s.charAt(0)<='9'){

            r = r + s.charAt(2);
            s = s.substring(3);


        }
        o2 = Double.parseDouble(r);

        return(o2);
    }


    public static char getOperator2(String s){
        s=s.trim();
        char r;
        while (s.length()>0 && s.charAt(0)>='0' && s.charAt(0)<='9'){

            r = s.charAt(3);
            s = s.substring(4);


        }
        r = operator2;
        return(operator2);
    }

    public static double getO3(String s){


        s=s.trim();
        String r ="";
        while (s.length()>0 && s.charAt(0)>='0' && s.charAt(0)<='9'){

            r = r + s.charAt(4);
            s = s.substring(5);


        }
        o3 = Double.parseDouble(r);

        return(o3);
    }
}
4

1 に答える 1

0

技術的には、コレクション クラスを使用して回避できます。java.util パッケージには、配列の動作をエミュレートする多くのクラスがありますが、サイズ変更可能で、より多くの機能を提供します。これらには、java.util.ArrayList、java.util.LinkedList、java.util.Vector (これは使用しないでください)、および java.util.Stack が含まれます。Java コレクション フレームワークは非常に広範囲に及ぶため、次のドキュメントを読むことをお勧めします。

http://docs.oracle.com/javase/tutorial/collections/implementations/index.html

コレクションの使用も許可されていない場合、私が考えることができる唯一のことは、1 つの大きな文字列を使用し、いくつかの特殊文字またはシーケンスを別々のセクションの間に挿入してから、indexOf(char, fromIndex) と部分文字列を使用することですセクションを反復するには、次のようにします。

   final int maxwords = 5;
   String strlist = "this@should@be@an@array@";
   int lastindex = 0, index = 0;
   for(int n= 0; n < maxwords; n ++){

             index = strlist.indexOf("@",lastindex);
             String substr = strlist.substring(lastindex,index);
             //process substring here
             System.out.println(substr);
             lastindex = index + 1;
      }

これは非常に醜い方法ですが、私が考えることができる唯一の方法です。お役に立てれば。

于 2012-11-06T19:01:12.953 に答える