循环队列实现队列
循环队列实现数组
题目
1 用实现循环队列
2 参考PPT用循环队列打印杨辉三角
3 用JDB或IDEA单步跟踪排队情况,画出队列变化图,包含自己的学号信息
4 把代码推送到代码托管平台
5 把完成过程写一篇博客:重点是单步跟踪过程和遇到的问题及解决过程
6 提交博客链接
思路
最主要的思路老师已经在PPT中给出来了,最主要的就是每个环节的具体的实施。
在刚开始的时候我的想法是先把下一行计算出来后在把队列打印出来,后来在实现的过程中发现这样的话不得不再建立一个队列,这就空间效率降低了一半,基本上与用数组实现就没有太大的区别。在仔细思考之后我想到了利用队列的可以不断扩容的特性就用一个队列来实现。所以我就放弃了把计算之后再打印的思路,不得不采用一边计算一边打印的思路。
问题
-
这个类的实现过程中问题千奇百怪,让我花费了很多的时间去解决这些问题。
-
问题一:数组越界异常
这个问题出现在了我开始打印杨辉三角的时候,当打印三行时还可以但是只要超过三行就会出现如图的越界异常;在进一步进行单步追踪之后发现问题出在deqeue方法上,front没有实现循环,它会一直增大直到越界异常。经过分析之后参照enqeue方法是实现将front ++ 改为front = front %qeue.length就将这个问题解决了。 -
问题二:少了第一行
由于第一行是自己加入的没有经过计算所以就没有打印出来,后来我就在进入循环之前就将第一行先输出,加了打印第一行的代码才解决了这个问题。当然这个图里还有越界异常的提示,解决的过程在上一个问题中就已经说明了。 -
问题三: 打印错误
在图上的问题出现之前还有一个问题就是在刚开始是我时候,我的杨辉三角打印出来是一个直角三角形,实际上它应该是一个等腰三角形这就存在一个缩进的问题,所以我在将杨辉三角列在草稿纸上之后找到缩进的空格数与行数的关系。就在开始打印数组之前加了这样一个循环来实现缩进:
for (int i = 0;i< n-(queue.size()-2);i++){
System.out.print(" ");
}
通过这个循环就实现了居中的输出;图中标注出来的地方就是问题的关键,两个循环一个是由于起点错误,一个是因为粗心变量名都没有用对,让自己浪费了挺多的时间在这个问题上。总之在涉及到循环时就要注意循环的起点和重点这是最容易出问题的地方
- 问题四:多了一行
这个问题的主要原因就是因为第一行没有在循环内,所以就只需要打印剩下的n-1行就行,不用考虑第一行,所以我在图中标注的地方及犯了一个错误,应该讲* i < n* 改为*i<(n -1)就可以解决这个这个输入的行数与输出的行数不符的问题。
截图:
在单步追踪的过程中的截图来体现打印的部分过程
代码
队列变化图
posted on 2017-10-17 20:32 20162324-春旺 阅读(761) 评论(1) 编辑 收藏 举报