0

カスタム方程式評価器を機能させるのに苦労しています。テキスト ファイルから読み取った文字列 (文字列の単語間以外はスペースなし) を方程式として渡し、キーワードが表す値にリンクするキーワードのマップを渡します。私はそれをテストしましたが、すべてのマップが適切に機能しています。以下は、int または文字列に関係なく、結果を処理する私の試みです。許可されるエントリ タイプはこれら 2 つだけです。方程式の各辺には、プラスまたはマイナスで区切られた 1 つまたは 2 つの要素を含めることができます。両側を評価できる演算子は、<、>、= の 3 つだけです。サイドはキーワードのみまたは整数のみのいずれかに制限されているため、器用さ + 1 = 強さ + 2 のようなものを持つことはできません。

このクラスをコンパイルしようとしたときに現在発生しているエラーは、「parseint に適したメソッドが見つかりません」「メソッド Integer.parseInt(String,int) は適用されません」です。メインクラスではなく、このクラスを直接コンパイルしているため、間違っていなければ、そのような判断を行うためのマップさえありません。これは問題ですか?メインクラスを再コンパイルしてもセカンダリクラスファイルが再コンパイルされず、問題が発生するという問題があったため、この方法でコンパイルしています。

方程式の例: 器用さ > 3 または背景 = Ex Legionary

import java.lang.String;
import java.util.HashMap;
import java.util.Map;

public class Equation {
private String[] sides = new String[2];
private String[] rawEquation = new String[3];
private String[] parts = new String[2];
private String type;
private int[] tempInt = new int[2];
private int[] finalSide = new int[2];
private String[] finalStride = new String[2];

public boolean solve(String equation, Map gladMap) {
    if (equation.indexOf("<") > -1) {
        sides = equation.split("<");
        rawEquation[1] = "<";   
    } else if (equation.indexOf(">") > -1) {
        sides = equation.split(">");
        rawEquation[1] = ">";
    } else if (equation.indexOf("=") > -1) {
        sides = equation.split("=");
        rawEquation[1] = "=";
    }
    rawEquation[0] = sides[0];
    rawEquation[2] = sides[1];
    for (int d = 0; d < 2; d++) {
        if (sides[d].indexOf("+") > -1) {
            parts = rawEquation[0].split("\\+");
            for (int a = 0; a < 2; a++) {
                if (isInteger(parts[a])){
                    tempInt[a] = Integer.parseInt(parts[a]);
                } else {
                    tempInt[a] = Integer.parseInt(gladMap.get(parts[a]));               
                }
            }       
            finalSide[d] = tempInt[0]+tempInt[1];
            type = "Int";   
        } else if (rawEquation[0].indexOf("-") > -1) {
            parts = rawEquation[0].split("\\-");
            for (int a = 0; a < 2; a++) {
                if (isInteger(parts[a])){
                    tempInt[a] = Integer.parseInt(parts[a]);        
                } else {
                    tempInt[a] = Integer.parseInt(gladMap.get(parts[a]));       
                }
            }       
            finalSide[d] = tempInt[0]-tempInt[1];
            type = "Int";   
        } else {
            if (isInteger(sides[0])){
                finalSide[d] = Integer.parseInt(sides[0]);      
            } else {
                if (isInteger(gladMap.get(sides[0]))) {
                    finalSide[d] = Integer.parseInt(gladMap.get(sides[0])); 
                    type = "Int";
                } else {
                finalStride[d] = gladMap.get(sides[0]);
                type = "Str";
                }
            }       


        }
    }
    if (rawEquation[1].equals("<")) {
        if (type.equals("Int")) {
            if (finalSide[0] < finalSide[1]) {
                return true;
            }
        } 
    } else if (rawEquation[1].equals(">")) {
        if (type.equals("Int")) {
            if (finalSide[0] > finalSide[1]) {
                return true;
            }
        } 
    } else {
        if (type.equals("Int")) {
            if (finalSide[0] == finalSide[1]) {
                return true;
            }
        } else if (type.equals("Str")) {
            if (finalStride[0].equals(finalStride[1])) {
                return true;
            }
        }   
    }

return false;
} 
public boolean isInteger( String input ) {
    try {
        Integer.parseInt( input );
        return true;
    }
    catch( Exception NumberFormatException ) {
        return false;
    }
}   




}

一時的な文字列変数を作成することで、 Integer.parseInt() をladyMap.get(sides[0]) から分離しようとしましたが、何も変わりませんでした。どんな助けでも大歓迎です!

4

2 に答える 2

1

ここで、渡すマップはジェネリック型ではありません。したがって、get() は常にオブジェクトを返しますが、これは parseInt() メソッドの適切な引数ではありません。メソッド シグネチャを public boolean に変更する solve(String equation, Map< String ,String >ladyMap) {

エラーを解決する必要があります。

于 2013-06-13T14:49:13.103 に答える
0

gladMap.get(sides[0])次の問題が考えられます: マップが型指定されていないため、 return Objectのような呼び出しを行います。Integer.parseInt文字列を期待します。に変更できます
gladMap.get(sides[0]).toString()

それはうまくいくはずだと思います。値が実際の文字列の場合toString、それ自体が返さIntegerれます。文字列に変換されて解析されます。

于 2013-06-13T14:52:19.150 に答える