20182311 2019-2020-1 《数据结构与面向对象程序设计》实验六报告

20182311 2019-2020-1 《数据结构与面向对象程序设计》实验六报告

课程:《程序设计与数据结构》
班级: 1823
姓名: 冷冲
学号:20182311
实验教师:王志强
实验日期:2019年10月23日
必修/选修: 必修

1.实验内容

  • 链表练习,要求实现下列功能:
    通过键盘输入一些整数,建立一个链表;这些数是你学号中依次取出的两位数,再加上今天的时间。打印所有链表元素, 并输出元素的总数。
    在你的程序中,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。做完这一步,把你的程序签入源代码控制(git push)。
  • 链表练习,要求实现下列功能:
    实现节点插入、删除、输出操作;继续你上一个程序,扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器;从磁盘读取一个文件,这个文件有两个数字。从文件中读入数字1,插入到链表第 5位,并打印所有数字,和元素的总数。保留这个链表,继续下面的操作。从文件中读入数字2,插入到链表第0位,并打印所有数字,和元素的总数。保留这个链表,并继续下面的操作。从链表中删除刚才的数字1,并打印所有数字和元素的总数。
  • 链表练习,要求实现下列功能:
    使用冒泡排序法或者选择排序法根据数值大小对链表进行排序;如果你学号是单数, 选择冒泡排序,否则选择选择排序。在排序的每一个轮次中,打印元素的总数,和目前链表的所有元素。
  • 在android上实现实验(1)和(2)
  • 在android平台上实现实验(3)

2. 实验过程及结果

  • 链表的建立:创建一个结点Node类和一个链表类List。链表结点保存自身元素和下一个结点的地址(声明一个对象变量作为指针指向下一个结点),在链表类中定义一个头指针和一个temp指针,除非在头部加入元素, 否则头指针不动,否则会造成链表元素丢失。每次对链表进行操作,temp指针只能从头指针往后遍历。记录元素总数可使用指针从头遍历到最后一个结点,遍历的元素个数即为总数。打印链表元素,即对toString方法复写,用一个字符串接收遍历过程中每个元素的字符串形式,中间用制表符隔开即可。

  • 节点插入、删除、输出操作,并实现文件读取插入、删除:节点插入需要注意的是先将插入元素表示下一节点的指针指向插入位置前的下以结点,否则会造成后面的链表丢失。一开始写插入方法的时候没有考虑用下标表示位置,所以在指定位置插入时,另写了一个方法帮助找到位置,再调用插入方法。文件读取采用了字符流读取方法(reader),因为考虑到得到字符串更有利于后续操作。使用了StringTokenizer切割字符串。

  • 使用冒泡排序法:定义了两个指针和二重循环比较。冒泡排序法和选择排序法只是两两比完就换还是全部比完再换的区别。

  • 安卓实现:安卓遇到的问题主要是文件路径和布局的问题。尝试了很多方法,最后选择在与res同级的目录下创立一个assets文件,通过以下字节流的方式读取。
InputStream inputStream=getAssets().open("test.txt");
int size=inputStream.available();
byte[] a=new byte[size];
inputStream.read(a);
inputStream.close();
String content=new String(a);
  • 安卓实现:收获是RelativeLayout比ConstraintLayout可视化拖拽用起来方便,但ConstraintLayout魔法棒好像也不错。

3. 实验过程中遇到的问题和解决过程

  • 问题1:怎么解决AVD读取IO流的问题?
  • 问题1解决方案:在Android studio上创建Assets目录:assets Folder 选择创建,可以通过二进制流的方式传输数据,具体操作可看参考链接第二条。
  • 问题2:onClick和onTouch的区别?
  • 问题2解决方案;onClick是触摸事件,onTouch是单击事件。onTouch比onClick多传入一个MotionEvent的对象,onClick是基于onTouch的一个拓展延申,但onTouch的优先级更高,操作也更全。发现对按钮绑定onTouch没有反应,应该使更多用于text类型的控件。
  • 问题3:如何解决文本过多,在textview中实现自动换行的问题?
  • 问题3解决方案:在子控件下添加以下代码
android:ellipsize  = "none"
android :maxLines="100"
scrollHorizontally = "false"  
inputType = "textMultLine"
  • 顺便补充:
android:ellipsize = "end"    省略号在结尾
android:ellipsize = "start"   省略号在开头
android:ellipsize = "middle"     省略号在中间
android:ellipsize = "marquee"  跑马灯
android:ellipsize = "none" 没有省略
android:singleline = "true" 限制一行

其他(感悟、思考等)

没学会可视化设计之前自己手打了几百行xml代码,好郁闷,感觉自己浪费了好多时间= =

参考资料

猜你喜欢

转载自www.cnblogs.com/lengchong/p/11754629.html