LinkedList弹出和推送



有人能理解这个错误的原因吗?我想我把书堆和单子弄混了。我可以用什么代替"pop"?你的建议是什么?

Exception in thread "main" java.lang.IndexOutOfBoundsException:
at java.util.LinkedList.checkElementIndex(LinkedList.java:555)
at java.util.LinkedList.remove(

代码:

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();
} 

如果您想推送和弹出,最好使用Stack。然而,我认为你的问题是remove(i)。您可能想使用pop(或removeLast?(。

如果使用LinkedList,请使用addLast/removeLast或addFirst/removeFirst。

试试这个。添加LinkedList声明并使用removeLast((:

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();

您的问题来自第二次删除(i(。您试图从同一位置移除对象两次(注意:i没有递减。它具有相同的值(。您应该使用remove(i-1(进行第二次删除。当前代码段:

int val1 = list1.remove(i); 
int val2 = list1.remove(i); 

应该是:

int val1 = list1.remove(i); 
int val2 = list1.remove(i-1); 

相关内容

  • 没有找到相关文章

最新更新