[英]returning data from a stack Java
我正在尝试平衡括号。 当我尝试执行类似stack.peek()=='{'的操作时,遇到了“无法将对象与基元进行比较”的错误,将其转换为字符。 编译器接受了它,但是警告不安全的操作。 有谁知道一种更好的方法可以执行此操作,为什么我可以将堆栈中的字符作为基元推送和弹出,但是当我窥视时它不是基元?
import java.util.*;
class Solution {
public int solution(String S) {
// write your code in Java SE 8
char[] C = S.toCharArray();
LinkedList stack = new LinkedList();
for(int i = 0; i< C.length; i++){
if(C[i] == '(' || C[i] == '[' || C[i] == '{'){
stack.push(C[i]);
}
if(C[i] == ')' && (char)stack.peek() == '('){
stack.pop();
}
else if (C[i] == ']' && (char)stack.peek() == '['){
stack.pop();
}
else if (C[i] == '}' && (char)stack.peek() == '{'){
stack.pop();
}
}
if(stack.size() == 0){
return 1;
}
else{
return 0;
}
}
}
您正在使用LinkedList
的原始形式,该形式将存储Object
。 您不能将Object
转换为char
。
使用通用的LinkedList<Character>
。 然后peek()
将返回Character
,而Java与==
进行比较时,Java将把它们拆箱为char
。
LinkedList<Character> stack = new LinkedList<Character>();
然后,您会发现甚至不需要将peek()
的返回值peek()
为char
。
如果正确使用LinkedList<T>
原始类型,就不会有此问题。 将您的列表声明为LinkedList<Character>
,它应该可以工作。
这是一篇不错的文章-http: //www.informit.com/articles/article.aspx? p=1932926&seqNum =5它讨论了允许和不允许的类型转换,例如,它说
在任何情况下,您都无法做的一件事是从对象转换为原始数据类型,反之亦然。原始类型和对象在Java中是非常不同的事情,您无法在两者之间自动进行转换。”
仅供以后参考,以防万一链表无法设置为特定类型(因为在某些情况下可能会发生),代码只需要执行.equals,除了== for stack.peek()是一个对象,并且需要对象.equals进行比较。 铸件也被取出了。
public static void main(String[] args)
{
System.out.println(solution("{"));
}
public static int solution(String s) {
char[] C = s.toCharArray();
LinkedList stack = new LinkedList();
System.out.println("Length:" + C.length);
for(int i = 0; i< C.length; i++){
if(C[i] == '(' || C[i] == '[' || C[i] == '{'){
stack.push(C[i]);
}
System.out.println("Peek" + (C[i] == '}'));
if(C[i] == ')' && stack.peek().equals('(')){
stack.pop();
}
else if (C[i] == ']' && stack.peek().equals('[')){
stack.pop();
}
else if (C[i] =='}' && stack.peek().equals('{')){
System.out.println("POPPED");
stack.pop();
}
}
if(stack.size() == 0){
return 1;
}
else{
return 0;
}
}
但是更好的方法将是Character类型的LinkedList
两种解决方案都不需要铸造
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.