调车场算法在Java中的实现,输出错误,字符串索引超出范围?
我正在实现调车场算法并评估结果这是一个基于参考的实现,使用节点(一个用于运算符,一个用于操作数)和堆栈(一个用于运算符,一个用于操作数)调车场算法在Java中的实现,输出错误,字符串索引超出范围?,java,indexing,output,shunting-yard,Java,Indexing,Output,Shunting Yard,我正在实现调车场算法并评估结果这是一个基于参考的实现,使用节点(一个用于运算符,一个用于操作数)和堆栈(一个用于运算符,一个用于操作数) 输入文件包含(仅前几行): 输出: 53 = 53 53513 = 1 535152 Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 7 at java.lang.String.charAt(String
输入文件包含(仅前几行): 输出:
53 = 53
53513 = 1
535152
Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
String index out of range: 7
at java.lang.String.charAt(String.java:646)
at LabIII.main(LabIII.java:48)
Process completed.
主要内容:
节点(也有一个用于操作数/整数):
算法如下:
初始化运算符堆栈以包含“;”(堆栈底部操作符)
获取第一个令牌
而未到达表达式的结尾
如果标记是操作数,则
打印令牌
将操作数推送到操作数堆栈上
否则,如果令牌是“'),则
而运算符堆栈的顶部不等于“(”
弹出操作符堆栈
打印操作员
弹出操作数堆栈两次
将指定的运算应用于两个操作数
将运算结果推送到操作数堆栈上
结束时
弹出“(”并丢弃它
否则
当输入优先级(令牌)时≤ stackPriority(操作员堆栈顶部)
弹出操作符堆栈
打印操作员
弹出操作数堆栈两次
将指定的运算应用于两个操作数
将运算结果推送到操作数堆栈上
结束时
将令牌推送到操作符堆栈上
获取下一个令牌
结束时
而运算符堆栈的顶部不等于“;”
弹出操作符堆栈
打印操作员
弹出操作数堆栈两次
将指定的运算应用于两个操作数
将运算结果推送到操作数堆栈上
结束时
弹出操作数堆栈并打印结果
感谢您的帮助
token = expr.charAt(count);
这应该是
token = expr.charAt(index);
我不知道你为什么要费心维护索引和计数。
这只会导致这样的麻烦
这应该是
token = expr.charAt(index);
我不知道你为什么要费心维护索引和计数。
这只会导致这样的麻烦
这应该是
token = expr.charAt(index);
我不知道你为什么要费心维护索引和计数。
这只会导致这样的麻烦
这应该是
token = expr.charAt(index);
我不知道你为什么要费心维护索引和计数。
这只会导致这样的麻烦。我解决了问题。还有两个问题:
首先,输入文件末尾有两个额外的空行,这导致了异常
其次,tokenI=expr.charAt(index)
将ASCII值分配给tokenI(例如,5的输入值导致tokenI为53),因此我只需减去48(0的ASCII值)来纠正这个问题。tokenI=expr.charAt(index)-48
之后所有的事情都安排妥当了
另外,正如@EJP所说,不需要“index”和“count”变量,所以我删除了“count”而只使用了“index”。我解决了问题。还有两个问题:
首先,输入文件末尾有两个额外的空行,这导致了异常
其次,tokenI=expr.charAt(index)
将ASCII值分配给tokenI(例如,5的输入值导致tokenI为53),因此我只需减去48(0的ASCII值)来纠正这个问题。tokenI=expr.charAt(index)-48
之后所有的事情都安排妥当了
另外,正如@EJP所说,不需要“index”和“count”变量,所以我删除了“count”而只使用了“index”。我解决了问题。还有两个问题:
首先,输入文件末尾有两个额外的空行,这导致了异常
其次,tokenI=expr.charAt(index)
将ASCII值分配给tokenI(例如,5的输入值导致tokenI为53),因此我只需减去48(0的ASCII值)来纠正这个问题。tokenI=expr.charAt(index)-48
之后所有的事情都安排妥当了
另外,正如@EJP所说,不需要“index”和“count”变量,所以我删除了“count”而只使用了“index”。我解决了问题。还有两个问题:
首先,输入文件末尾有两个额外的空行,这导致了异常
其次,tokenI=expr.charAt(index)
将ASCII值分配给tokenI(例如,5的输入值导致tokenI为53),因此我只需减去48(0的ASCII值)来纠正这个问题。tokenI=expr.charAt(index)-48
之后所有的事情都安排妥当了
另外,正如@EJP所说,不需要“index”和“count”变量,所以我删除了“count”而只使用了“index”
token = expr.charAt(index);