首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java语言中,如何将Stack.pop()强制作为参数?

在Java语言中,如何将Stack.pop()强制作为参数?
EN

Stack Overflow用户
提问于 2017-02-11 10:30:48
回答 2查看 150关注 0票数 -2

我有两个堆栈。我希望能够将任何元素推送到一个元素上,但前提是它是从另一个元素上弹出的。

而不是我当前的函数,如下所示:

代码语言:javascript
复制
public void pushValue(int poppedValue) {
  Stack.push(value)
}

我希望函数看起来像这样:

代码语言:javascript
复制
public void pushValue(pop() poppedValue) {
  Stack.push(value)
}

如何将pop()函数设置为参数,而不是整型?换句话说,我如何将参数设置为只接受从某处弹出的值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-11 10:49:41

在Java中没有方法来表达这种约束。(或任何其他语言的AFAIK)

(IMO)最多只能将第二个Stack作为参数传递给第一个参数,并让第一个参数负责弹出一个值;

代码语言:javascript
复制
public class Stack { 
    ...
    public int transferValue(Stack source) {
        int res = source.pop();  // throws exception if source is empty
        this.push(value);
        return res;
    }
}

这就给您留下了关于push的问题

  • 是否将其从Stack应用编程接口中完全删除?如果是,元素是如何进入source堆栈的?
  • 您是否将Stack API拆分为StackStackWithoutPush?如果是,哪个是超类/超接口?这两种选择都不是完美的。无论哪种方式,子类在某种意义上都违反了超类的约定。(C.f.ListUnmodifiableList API的问题。)
票数 2
EN

Stack Overflow用户

发布于 2017-02-11 10:42:01

您的语法是不可能的,但是您可以使第二个堆栈成为成员字段,然后当您在第二个堆栈(通过该字段)执行peek操作时,push 该值就会出现。

代码语言:javascript
复制
private Stack otherStack = null; // <-- set this somehow (constructor?), or pass it.

public void pushValue(int newValue) {
  if (otherStack != null && otherStack.peek() == newValue) {
    Stack.push(newValue); // <-- please observe naming conventions (stack)
  }
}

,然后pop()值。基本上,先是peekpush ,然后是pop

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42171539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档