为了账号安全,请及时绑定邮箱和手机立即绑定

对象堆栈Albahari

对象堆栈Albahari

C#
宝慕林4294392 2021-04-09 17:14:51
这是阿尔巴哈里(Albarhari)的例子public class Stack{int position;object[] data = new object[10]; // Why 10 nor 1? public void Push (object obj) { data[position++] = obj; } //do not understood; Why there is no looppublic object Pop() { return data[--position]; } //do not understood Why there is no loop}Stack stack = new Stack();stack.Push ("sausage");string s = (string) stack.Pop(); // Downcast, so explicit cast is neededConsole.WriteLine (s); // sausage我重写了这里听过的代码public class Stack{    object[] data = new object[1];    public void Push(object obj) { data[0] = obj; }    public object Pop() { return data[0]; }}        Stack stack = new Stack();        stack.Push("abigale ff");        string s = (string)stack.Pop();         Console.WriteLine(s); // abigale ff为什么用10 in new object[10];而不是1或100 in为何在数据位置使用增量?我不了解数据位置的工作原理。{ data[position++] = obj; }以及 { return data[--position]; }它如何工作而没有循环?我尝试在弹出之前推送2个值,然后在弹出之前写入它,但它仅显示第二个值
查看完整描述

1 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

忽略此堆栈类的所有问题,您的重构显然会破坏它。正如评论所暗示的那样,您缺少的关键信息实际上是++and--运算符所做的,这似乎使您相信该position字段是多余的。


++运算符(C#参考)


增量运算符(++)将其操作数加1。增量运算符可以出现在其操作数之前或之后:++ variable和variable ++。


评论


第一种形式是前缀递增操作。运算的结果是将操作数递增后的值。


第二种形式是后缀递增操作。运算的结果是操作数在增加之前的值


public class Stack

{

    int position;

    object[] data = new object[10]; // Why 10 nor 1? 

    public void Push (object obj) { data[position++] = obj; }

    public object Pop() { return data[--position]; }

}

例如


当您调用Push它时,它将值从data数组中移出,position然后递增position


当您调用Pop它减量position时,将值从data数组中取出position


增量页面上还有一个很好的小例子,向您展示了它是如何工作的


class MainClass

{

    static void Main()

    {

        double x;

        x = 1.5;

        Console.WriteLine(++x);

        x = 1.5;

        Console.WriteLine(x++);

        Console.WriteLine(x);

    }

}

输出


2.5

1.5

2.5

*/


查看完整回答
反对 回复 2021-04-17
  • 1 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信