カスタム方程式評価器を機能させるのに苦労しています。テキスト ファイルから読み取った文字列 (文字列の単語間以外はスペースなし) を方程式として渡し、キーワードが表す値にリンクするキーワードのマップを渡します。私はそれをテストしましたが、すべてのマップが適切に機能しています。以下は、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]) から分離しようとしましたが、何も変わりませんでした。どんな助けでも大歓迎です!