Java LinkedList弹出和推送
有人能理解这个错误的原因吗?我想我把书堆和清单弄混了。我可以用什么来代替“pop”?你有什么建议 线程“main”java.lang.IndexOutOfBoundsException中的异常: 位于java.util.LinkedList.checkElementIndex(LinkedList.java:555) 在java.util.LinkedList.remove( 代码:Java LinkedList弹出和推送,java,linked-list,Java,Linked List,有人能理解这个错误的原因吗?我想我把书堆和清单弄混了。我可以用什么来代替“pop”?你有什么建议 线程“main”java.lang.IndexOutOfBoundsException中的异常: 位于java.util.LinkedList.checkElementIndex(LinkedList.java:555) 在java.util.LinkedList.remove( 代码: public class PostfixHesaplama { public static void
public class PostfixHesaplama {
public static void main(String[] args) {
String giris="231*+9-";
System.out.println("postfix evaluation: "+postfix(giris));
}
static int postfix(String giris)
{
//create a stack
List<Integer> list1=new LinkedList<>();
// Scan all characters one by one
for(int i=0;i<giris.length();i++)
{
char c=giris.charAt(i);
// If the scanned character is an operand (number here),
// push it to the stack.
if(Character.isDigit(c))
list1.add(c - '0');
// If the scanned character is an operator, pop two
// elements from stack apply the operator
else
{
int val1 = list1.remove(i);
int val2 = list1.remove(i);
switch(c)
{
case '+':
list1.add(val2+val1);
break;
case '-':
list1.add(val2- val1);
break;
case '/':
list1.add(val2/val1);
break;
case '*':
list1.add(val2*val1);
break;
}
}
}
return list1.pop();
}
公共类postfixesaplama{
公共静态void main(字符串[]args){
字符串giris=“231*+9-”;
System.out.println(“后缀评估:+postfix(giris));
}
静态int后缀(字符串giris)
{
//创建一个堆栈
List list1=新链接列表();
//逐个扫描所有字符
对于(int i=0;i如果您想推送和弹出,a会更好地为您服务。但是,我认为您的问题是remove(i)
。您可能想使用pop(或removeLast?)
如果您继续使用LinkedList,请使用addLast/removeLast或addFirst/removeFirst。您的问题来自第二次删除(i)。您尝试从同一位置删除对象两次(注意:i没有递减。其值相同)。第二次删除时应使用删除(i-1)。
当前代码段:
int val1 = list1.remove(i);
int val2 = list1.remove(i);
应该是:
int val1 = list1.remove(i);
int val2 = list1.remove(i-1);
尝试此操作。添加LinkedList声明并使用removeLast():
LinkedList list1=新建LinkedList();
对于(int i=0;i
也许ArrayDeque会更好。文档似乎表明它的性能优于堆栈和队列。用于堆栈的文档甚至建议在堆栈上使用Deque
LinkedList<Integer> list1 = new LinkedList<>();
for (int i = 0; i < giris.length(); i++) {
char c = giris.charAt(i);
if (Character.isDigit(c)) {
list1.add(c - '0');
} else {
int val1 = list1.removeLast();
int val2 = list1.removeLast();
switch (c) {
case '+':
list1.add(val2 + val1);
break;
case '-':
list1.add(val2 - val1);
break;
case '/':
list1.add(val2 / val1);
break;
case '*':
list1.add(val2 * val1);
break;
}
}
}
return list1.removeLast();