数据结构—java堆栈大小不返回堆栈中的项数

ioekq8ef  于 2021-07-11  发布在  Java
关注(0)|答案(2)|浏览(447)

一般来说,我对数据结构和编程都是新手,我通过实现字符串反转器来学习堆栈的概念。当我想使用堆栈大小作为计数器来弹出堆栈中的所有项目时,我注意到堆栈大小并不返回堆栈中的项目数。例子:

public String reverse(String string) {
    StringBuffer stringBuffer = new StringBuffer();
    //Use a stack to reverse this string.As a stack is a LIFO collection, it goes by last in first out.

    Stack<Character> characters = new Stack<>();
    char[] characterArray = string.toCharArray();
    for(char ch : characterArray) {
        characters.push(ch);
    }
    for(int i=0; i < characterArray.length; i++) {
        stringBuffer.append(characters.pop());
    }
    return stringBuffer.toString();

}

输入“helloworldz”按预期返回“zdlrowolleh”。但是当使用堆栈大小作为计数器时。。。。

public String reverse(String string) {
    StringBuffer stringBuffer = new StringBuffer();
    Stack<Character> characters = new Stack<>();
    char[] characterArray = string.toCharArray();
    for(char ch : characterArray) {
        characters.push(ch);
    }
    for(int i=0; i < characters.size(); i++) {
        stringBuffer.append(characters.pop());
    }
    return stringBuffer.toString();

}

它返回“zdlrow”,
这意味着堆栈大小没有返回堆栈中的项数。我遗漏了什么重要的东西吗?任何帮助都将不胜感激。

jbose2ul

jbose2ul1#

堆栈的大小减少了 1pop 在下面的代码块中,

for(int i=0; i < characters.size(); i++) {
    stringBuffer.append(characters.pop());
}

与下面的代码块相比,循环将只执行一半的次数

for(int i=0; i < characterArray.length; i++) {
    stringBuffer.append(characters.pop());
}
hjzp0vay

hjzp0vay2#

如果你想根据 characters 堆栈本身,正确的选择是:

while (!characters.isEmpty()) {
        stringBuffer.append(characters.pop());
    }

相关问题