我在使自定义方程式求值器工作时遇到了一些困难。我传递一个从文本文件读取的字符串(除了字符串之间没有空格)作为方程式,并传递一个关键字的映射,链接到它们所代表的值。我测试了一下,我的所有地图都正常运行。以下是我尝试处理结果,无论它是int还是字符串。这些将是唯一允许的两种条目类型。等式的每一边都可以有一个或两个元素,用加号或减号分隔。允许评估双方的唯一三个运营商是<,>,=。侧面被限制为只有关键字或只有整数,所以你不能有像灵巧+ 1 =力量+ 2的东西。
当我尝试编译此类时,我目前得到的错误是“没有为parseint找到合适的方法”“方法Integer.parseInt(String,int)不适用”。如果我没有弄错,因为我直接编译这个类而不是主类,它甚至没有地图来做出那种判断。这是一个问题吗?我正在以这种方式编译,因为我遇到了重新编译主类没有重新编译导致问题的二级类文件的问题。
任何示例等式:dexterity> 3或background = 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;
}
}
}
我尝试通过创建临时字符串变量将gladger.parseInt()与gladMap.get(sides [0])分开,但它没有改变任何东西。任何帮助将不胜感激!
答案 0 :(得分:1)
此处,您传递的地图不是通用类型。因此,get()将始终返回一个对象,该对象不是parseInt()方法的适当参数。 将方法签名更改为 public boolean solve(String equation,Map&lt; String,String&gt; gladMap){
应该解决错误。
答案 1 :(得分:0)
问题可能如下:您的地图是无类型的,因此gladMap.get(sides[0])
之类的调用会返回Object。 Integer.parseInt
期望String。您可以将其更改为
gladMap.get(sides[0]).toString()
。
它认为应该有效。如果value是实际String,那么toString
将返回它自己,它是Integer
它将被转换为字符串并被解析回来。