我遇到问题,我在下面的代码第22行收到IndexOutOfBoundsException。该程序的目的是充当具有以下优先顺序的表达式评估程序:
Operator| Description | Level | Associativity
--------+-------------+-------+---------------
& | Bitwise AND | 1 | left to right
^ | Bitwise XOR | 2 | left to right
| | Bitwise OR | 3 | left to right
如果程序被赋予输入表达式,如" 1 | 8& 3"使用scanner类,程序应解析此输入并将结果输出为1。
示例输出:
Enter the expression: 1 | 8 & 3
Result of the given expression: 1
说明:
评估的方式是:
8& 3 = 1000& 0011 = 0000 = 0
1 | 0 = 0001 | 0000 = 1
我一直在努力让程序正常运行。以下是我的最新代码:
import java.util.ArrayList;
import java.util.Scanner;
public class Problem1 {
public static void main(String[] args) throws Exception {
try {
ArrayList<String> inputarray = new ArrayList<String>();
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
System.out.print("Enter an expression with single digit integers (example: \"1 | 8 & 3\"): ");
if(input.hasNextLine()) {
inputarray.add(input.nextLine());
}
int j = 1;
j = 1;
for(int i = 0; i < inputarray.size(); i++) {
if(inputarray.get(j) == "&") {
inputarray.add((j+1), Integer.toString(Integer.parseInt(inputarray.get(j-1)) & Integer.parseInt(inputarray.get(j+1))));
System.out.println(" Result of the given expression: " + inputarray);
inputarray.remove((j-1));
inputarray.remove((j));
}
if(j <= (inputarray.size() - 3)) {
j += 2;
}
else if(j == (inputarray.size() - 2)) {
break;
}
}
j = 1;
for(int i = 0; i < inputarray.size(); i++) {
if(inputarray.get(j) == "^") {
inputarray.remove(j);
inputarray.add(j, Integer.toString(Integer.parseInt(inputarray.get(j-1)) ^ Integer.parseInt(inputarray.get(j+1))));
inputarray.remove((j-1));
inputarray.remove((j+1));
}
if(j <= (inputarray.size() - 3)) {
j += 2;
}
else if(j == (inputarray.size() - 2)) {
break;
}
}
j = 1;
for(int i = 0; i < inputarray.size(); i++) {
if(inputarray.get(j) == "|") {
inputarray.remove(j);
inputarray.add(j, Integer.toString(Integer.parseInt(inputarray.get(j-1)) | Integer.parseInt(inputarray.get(j+1))));
inputarray.remove((j-1));
inputarray.remove((j+1));
}
if(j <= (inputarray.size() - 3)) {
j += 2;
}
else if(j == (inputarray.size() - 2)) {
break;
}
}
}
catch(Exception e) {
e.printStackTrace();
System.err.println("Invalid input entered, please try again");
}
finally {
System.out.println();
main(null);
}
}
}
答案 0 :(得分:1)
有几个问题。
.equals()
而不是==来比较字符串。这已在Stackoverflow上多次讨论过了。