为什么打印数字从最高到最低?

时间:2018-06-13 21:02:47

标签: c# stack

我目前正在接受Udemy的C#中级课程,并且我正在尝试进行其中一项练习。我已经在Q& A中查看了学生们看到其他人的解决方案,我甚至复制并粘贴了其他人的解决方案,看看他们的工作是否有效,我看不出它们之间的区别我的和其他人,但由于某种原因,我的代码打印出从最高到最低的数字,代码中的任何地方都不会发生这种情况。练习的想法是创建一个堆栈,我们有3个方法:Push(),Pop()和Clear()。 push方法将对象添加到ArrayList,pop方法从堆栈顶部删除数字并返回数字。明确的方法是自我解释的。这是我的代码:

(async () => {
  await A.init();  //successfully connects
  await B.init(); //connection hangs with no error log

  app.listen(8080)
})();

(async () => {
  await B.init(); //successfully connects
  await A.init(); //successfully connects

  app.listen(8080)
})();

计划类:

const mysql = require('mysql2');

const connection = mysql.createConnection({...})

module.exports.init = function() {
  return new Promise(function(res, req) {
    connection.connect(err => {
      if(err) return rej(err);

      res(null)
    }
  })
}

3 个答案:

答案 0 :(得分:5)

var top = _arrayList.Count;
_arrayList.Remove(top);

return top;

您不打印数值,而是打印存储的元素数量。

尝试将您的值更改为除了前几个正整数之外的其他值,以便更轻松地捕获此类错误。

PS:十多年来没有理由使用ArrayList。诸如List<int>之类的通用集合类在各方面都更好 - 更快,更少浪费内存,类型安全。

答案 1 :(得分:2)

var top = _arrayList.Count;
_arrayList.Remove(top);

return top;

top分配了列表大小的值,永远不会重新分配。因此它看起来像从最高到最低打印,因为它只是打印堆栈的大小(当然是5,然后是4,然后是3,依此类推)。它只是看起来就像你打印列表的内容一样,因为你碰巧推了相同的数字。一些不同的测试数据会使这个bug变得更加明显。

我认为你想要的是

var top = _arrayList[_arrayList.Count -1];

请注意,如果列表中存在重复元素,则代码将失败(由于基于项值而不是索引而删除)。您真的根本不应该使用ArrayList;这是一个.NET 1.0类,它只是一个糟糕的集合接口。使用像List<T>这样的通用。

答案 2 :(得分:0)

你要回来了

 var top = _arrayList.Count;

不是那个位置的价值。

 _arrayList(top-1);

您应该在删除时获得超出范围的索引错误。

_arrayList.Remove(top);