猿问

对象堆栈Albahari

这是阿尔巴哈里(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 loop

public 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 needed

Console.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个值,然后在弹出之前写入它,但它仅显示第二个值


宝慕林4294392
浏览 135回答 1
1回答

MMMHUHU

忽略此堆栈类的所有问题,您的重构显然会破坏它。正如评论所暗示的那样,您缺少的关键信息实际上是++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.51.52.5*/
随时随地看视频慕课网APP
我要回答