繁体   English   中英

从堆栈Java返回数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM