【发布时间】:2018-11-06 09:35:07
【问题描述】:
我正在做一个解决表达式的程序。我已经让它工作了,但是当代码通过除号“/”读取时,它显示为index out of bounds,我不知道如何修复它。可能会问你伟大的Java头脑来看看并给我一些关于做什么的提示?我不希望答案只是提示,以便我可以学习。
谢谢!
我的程序的主类:
import java.util.ArrayList;
import java.util.Scanner;
import static java.lang.Integer.*;
import static java.lang.System.*;
public class ExpressionSolver
{
int answer;
String expString;
ArrayList<String> exp;
public ExpressionSolver(String s)
{
setExpression(s);
}
public void setExpression(String s)
{
expString = s;
exp = new ArrayList<String>();
for(String temp: s.split(" "))
{
exp.add(temp);
}
}
public void solveExpression()
{
int index1, index2, num1, num2;
while(exp.contains("*") || exp.contains("/"))
{
index1 = exp.indexOf("*");
index2 = 0;
if(index1 <= 0)
{
index1 = exp.indexOf("/");
index2 = 1;
}
num1 = Integer.parseInt(exp.get(index1-1));
num2 = Integer.parseInt(exp.get(index1+1));
if(index2 == 0)
{
answer = num1 * num2;
}
else
{
answer = num1 / num2;
}
exp.remove(index1 - 1);
exp.remove(index1 - 1);
exp.set(index1 - 1, Integer.toString(answer));
}
while(exp.contains("+") || exp.contains("-"))
{
index1 = exp.indexOf("+");
index2 = 0;
if(index1 <= 0)
{
index1 = exp.indexOf("-");
index2 = 1;
}
num1 = Integer.parseInt(exp.get(index1-1));
num2 = Integer.parseInt(exp.get(index1+1));
if(index2 == 0)
{
answer = num1 + num2;
}
else
{
answer = num1 - num2;
}
exp.remove(index1 - 1);
exp.remove(index1 - 1);
exp.set(index1 - 1, Integer.toString(answer));
}
}
public String toString()
{
return expString + " = " + answer;
}
}
我的跑步者课
import java.util.ArrayList;
import java.util.Scanner;
import static java.lang.Integer.*;
import static java.lang.System.*;
public class ExpressionSolverRunner
{
public static void main( String args[] )
{
ExpressionSolver test = new ExpressionSolver("3 + 3");
test.solveExpression();
System.out.println(test);
test.setExpression("3 * 5");
test.solveExpression();
System.out.println(test);
test.setExpression("3 - 5");
test.solveExpression();
System.out.println(test);
test.setExpression("3 / 5");
test.solveExpression();
System.out.println(test);
}
}
我的输出
----jGRASP exec: java ExpressionSolverRunner
3 + 3 = 6
3 * 5 = 15
3 - 5 = -2
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 99, Size: 1
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.set(ArrayList.java:444)
at ExpressionSolver.solveExpression(ExpressionSolver.java:60)
at ExpressionSolverRunner.main(ExpressionSolverRunner.java:29)
----jGRASP wedge2: exit code for process is 1.
----jGRASP: operation complete.
每当程序读取3 / 5 时,就会出现越界错误。答案应该是 0。
【问题讨论】:
-
什么语句对应'solveExpression'中的第60行
标签: java arrays indexoutofboundsexception