0

これが私の問題です。複数の変数に対応するように変更する必要があったため、このメソッドからswitchステートメントを削除しましたが、switchステートメントではchar定数しか使用できません。Javaバージョン7がないと、変数に文字列を使用できませんでした。そのため、私が行ったことは、通常のif/elseステートメントに変更されます。しかし、プログラムを実行しようとすると、次のようにswitchステートメントでエラーが発生します。

何か案は?テスターからのコードを含めたい場合は、質問することができます。

java.lang.Error:未解決のコンパイルの問題:1.7未満のソースレベルのString型の値をオンに切り替えることができません。変換可能なint値または列挙型変数のみが許可されます

Project2.PostfixEvaluator.calculate(PostfixEvaluator.java:124)at Project2.PostfixEvaluator.eval(PostfixEvaluator.java:71)at Project2.ExpressionEvaluator.evaluate(ExpressionEvaluator.java:29)at Project2.ExpressionEvaluatorTester.main(ExpressionEvaluatorTester.java: 32)

public Token calculate(Token opr, Token opd1, Token opd2)
    {
        // Get the first String from opr, it is the operator: +, -, ...
        String oper = opr.getBody();

        System.out.println(opr);

        //Get the two operands by converting from String to int
        int op1 = Integer.parseInt(opd1.getBody());
        int op2 = Integer.parseInt(opd2.getBody());

        //Default return value, in case an error occurs
        int res = 0;

        /**
         * Alterations begin here
         * Performs operation and sets value for res
         */

           if(oper.equals("+")) 
           {
               res = op1+op2;
           }
           else if(oper.equals("-"))
           {
               res = op1-op2;  
           }
           else if(oper.equals("*")){
               res = op1*op2;
           }
           else if(oper.equals("/") && op2 != 0){
               res = op1/op2;
           }
           else if(oper.equals("/") && op2 == 0){
               System.out.println("Division by zero error in"+
                 " PostfixEvaluator.calculate().");
           }
           else if(oper.equals("%") && op2 != 0){
                res = op1%op2;
           }
           else if(oper.equals("%") && op2 == 0){
                System.out.println("Division by zero error in"+
                 " PostfixEvaluator.calculate().");
           }
           else if(oper.equals("<") && (op1 < op2)){
                res = 1;
           }
           else if(oper.equals("<") && (op1 >= op2)){
                res = 0;
           }
           else if(oper.equals("<=") && (op1 <= op2)){
                res = 1;
           }
           else if(oper.equals("<=") && (op1 > op2)){
                res = 0;
           }
           else if(oper.equals(">") && (op1 > op2)){
                res = 1;
           }
           else if(oper.equals(">") && (op1 <= op2)){
                res = 0;
           }
           else if(oper.equals(">=") && (op1 >= op2)){
                res = 1;
           }
           else if(oper.equals(">=") && (op1 < op2)){
                res = 0;
           }
           else if(oper.equals("==") && (op1 == op2)){
                res = 1;
           }
           else if(oper.equals("==") && (op1 != op2)){
                res = 0;
           }
           else if(oper.equals("!=") && (op1 != op2)){
                res = 1;
           }
           else if(oper.equals("!=") && (op1 == op2)){
                res = 0;
           }
           else if(oper.equals("||") && true){
                res = 1;
           }
           else if(oper.equals("&&")&& true){
                res = 1;
           }
           else
               res = 0;





        //Convert res into a Token and return it.
        return new Token(""+res);

}
4

2 に答える 2

6

これはコンパイラエラーではなく、ランタイムエラーであるため、ソースコードを変更したが、再コンパイルに失敗したか、少なくとも再コンパイルされたコードの実行に失敗したことを意味します。

エラーは間違いなくソースコードのステートメントの問題に関係してswitchいますが、ソースコードファイルからそれを削除しました。したがって、古いバージョンの.classファイルをロードしている必要があります。[自動的にビルド]オプションがアクティブになっているかどうかを確認するか、プロジェクト全体をクリーンアップして再構築します。

于 2012-11-04T20:13:11.987 に答える
0

クリーン ビルドを実行してから、プログラムを実行します。

掃除: Menu --> Project --> clean

建てる: Menu --> Project --> Build Automatically

また Menu --> Project -->Build All which is same as: ctrl+B

走る: Right Click(Your PostfixEvaluator.java) -> Run As -> Java Application

于 2012-11-04T20:26:41.453 に答える