算法四第82页出现的问题

发布于 2022-09-05 04:33:27 字数 1010 浏览 8 评论 0

import edu.princeton.cs.algs4.*;

public class FixedCapacityStackOfStrings  
{  
    private String[] a; 
    private int N; 
    public FixedCapacityStackOfStrings(int cap)  
    { a = new String[cap]; }  
    public boolean isEmpty() { return N == 0; }  
    public int size() { return N; }  
    public void push(String item)  
    { a[N++] = item; }  
    public String pop()  
    { return a[--N]; }  
 


    public static void main(String[] args)  
    {  
        FixedCapacityStackOfStrings s;  
        s = new FixedCapacityStackOfStrings(100);  
        while (!StdIn.isEmpty())  
        {  
            String item = StdIn.readString();  
            if (!item.equals("-"))  
                s.push(item);  
            else if (!s.isEmpty()) StdOut.print(s.pop() + " ");  
        }  
        StdOut.println("(" + s.size() + " left on stack)");  
    }  
}

代码如上,实现功能就是每次输入-,就从栈中pop元素,但是我每次在eclipse中输入后,显示的都不对,如输入“tobe or-”,显示的是2个left,else if的内容没有显示,明明就是按书上敲得啊。。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一腔孤↑勇 2022-09-12 04:33:27

http://algs4.cs.princeton.edu...
我找到了书上说的网站源码的详细地址.
里面的代码好像和你写的差不多

因为我完全不知道StdIn和StdOut是什么东西,哈哈,学艺不精
说真的,我工作两年,好像都没有直接在Java控制台输入/(ㄒoㄒ)/~~

/******************************************************************************
 *  Compilation:  javac FixedCapacityStackOfStrings.java
 *  Execution:    java FixedCapacityStackOfStrings
 *  Dependencies: StdIn.java StdOut.java
 *  
 *  Stack of strings implementation with a fixed-size array.
 *
 *  % more tobe.txt 
 *  to be or not to - be - - that - - - is 
 * 
 *  % java FixedCapacityStackOfStrings 5 < tobe.txt 
 *  to be not that or be
 *
 *  Remark:  bare-bones implementation. Does not do repeated
 *  doubling or null out empty array entries to avoid loitering.
 *
 ******************************************************************************/

import java.util.Iterator;
import java.util.NoSuchElementException;

public class FixedCapacityStackOfStrings implements Iterable<String> {
    private String[] a;  // holds the items
    private int N;       // number of items in stack

    // create an empty stack with given capacity
    public FixedCapacityStackOfStrings(int capacity) {
        a = new String[capacity];
        N = 0;
    }

    public boolean isEmpty()            {  return N == 0;                    }
    public boolean isFull()             {  return N == a.length;             }
    public void push(String item)       {  a[N++] = item;                    }
    public String pop()                 {  return a[--N];                    }
    public String peek()                {  return a[N-1];                    }
    public Iterator<String> iterator()  { return new ReverseArrayIterator(); }


    public class ReverseArrayIterator implements Iterator<String> {
        private int i = N-1;

        public boolean hasNext() {
            return i >= 0;
        }

        public String next() { 
            if (!hasNext()) throw new NoSuchElementException();
            return a[i--];
        }

        public void remove() {
            throw new UnsupportedOperationException();
        }
    }


    public static void main(String[] args) {
        int max = Integer.parseInt(args[0]);
        FixedCapacityStackOfStrings stack = new FixedCapacityStackOfStrings(max);
        while (!StdIn.isEmpty()) {
            String item = StdIn.readString();
            if (!item.equals("-")) stack.push(item); 
            else if (stack.isEmpty())  StdOut.println("BAD INPUT"); 
            else                       StdOut.print(stack.pop() + " ");
        }
        StdOut.println();

        // print what's left on the stack
        StdOut.print("Left on stack: ");
        for (String s : stack) {
            StdOut.print(s + " ");
        }
        StdOut.println();
    } 
} 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文