20162323周楠 2016-2017-2 《Java程序设计与数据结构》 课程总结

20162323周楠 2016-2017-2 《Java程序设计与数据结构》 课程总结

每周作业连接汇总

  • 预备作业1

  • 预备作业2

  • 预备作业3

  • 第一周总结

  • 第二周总结

  • 第二章主要学习了字符串的使用、字符串的连接,转义字符,变量的使用,表达式的语法,数据转换和Scanner类

  • print和println方法代表System.out对象提供的两个服务

  • 在Java中,运算符+用于加法及字符串连接

  • 转义字符用来表示会出现某些编译问题的一些字符

  • 变量是内存中用来保存一个特定类型数据值的位置的名称
    访问数据不会改变他在内存中的状态,但赋值语句会改变原数据

  • 不能将一个类型的赋值给予之不匹配的另一个类型的变量

  • 常量在其存在期间保存另一个类型的变量

  • 常量在其存在期间只保存一个具体的值

  • Java有两类数值:整型和浮点型;有4种整型数据类型及两种浮点数据类型

  • Java使用16位Unicode字符集来表示字符数据

  • 表达式由运算符及操作数组成,用来执行一个计算

  • 算术除法的结果类型依赖于操作数的类型

  • Java遵循严格定义的一组优先级规则,从而控制表达式中运算符的计算次序

  • Scanner类提供了从不同的数据源读入不同类型的数据的方法

  • 第三周总结

  • 第四周总结

  • 简要内容

教材学习内容总结

1.运算符

在逻辑运算符中,&&的特点在于如果&&左边为假,则不论右边真值如何,其逻辑判断返回结果为假;

||的特点在于如果||的左边为真,则不论右边真值如何,其逻辑判断返回结果为真。

在递增、递减运算符中,就要注意运算符是放在变量的左边还是右边,如果运算符在变量左边,则先改变变量值再进行运算,如果运算符在变量右边,则先进行运算再对变量进行相应的加减变化。

2.语句

2.1if语句

2.1.1if-else语句:条件为真时实现一个操作,在条件为假时执行另一个操作

2.1.2块语句:代替任意一条语句

2.1.3条件运算符:三元运算符,需要三个操作数

2.1.4嵌套的if语句:if语句中选择执行的语句还可以是另一条语句,可在做出前一个判定之后再进行另一个判定

3.数据比较

3.1.1 浮点数比较:计算两个差值的绝对值,再与公差进行比较

3.1.2 字符比较 :相对顺序由Unicode字符集定义

3.1.3 对象比较:compareTo方法判定字符串之间的相对顺序

4.switch语句:

让程序从多条路径中选出一条来
,break语句常用在switch语句的每个case分支的最后,控制流将跳转到switch之后的语句,switch语句开始位置的表达式结果只能是char、byte、short或int类型,每个case的值只能是常量

5.while语句:

循环语句,循环到条件为假为止。

5.1 无限循环

5.2嵌套的循环

6.do语句

至少执行一次循环体,仅以保留字do作为开始

7.for循环

用于循环有确定次数时

教材学习中的问题和总结过程

  • while语句与do语句的分辨

  • while循先计算条件。如果为真,则执行循环体,do循环先执行循环体,再计算条件。所以while循环的循环体执行0次或多次,而do循环的循环体执行1次或多次。

  • 第七章的很多程序运行不了

  • 不需要运行

  • 如何比较字符串

  • 使用String类的equals方法可以对字符串进行相等比较,方法返回一个布尔结果。String类的compareTo方法也可以用来比较字符串。根据两个字符串的大小关系,返回正数、0或负数

  • 在switch语句case分支的结尾处不使用break语句

  • 程序流会继续执行到下一个case语句中,使用break语句是为了跳到switch语句的结尾

  • 实验报告一[http://www.cnblogs.com/GIggleZN/p/6623771.html]

  • 第五周总结[http://www.cnblogs.com/GIggleZN/p/6660026.html]

  • 简要内容:

    教材学习内容总结

1.面向对象软件设计的基本部分是确定程序中应该创建哪些类;

2.面向对象程序设计的核心是类的定义,它代表定义了状态和行为的对象

3.变量声明的位置定义了它的定义域,在类一级(不是在方法内)声明的变量和常量在类的任意方法内引用

4.变量的作用域依赖于变量声明的位置,作用域决定在哪里可以使用变量

5.UML类图有助于呈现程序中类的内容和类之间的关系

6.对象是封装的,以防对数据的不适合的访问

7.可见性修饰符:保留字public、private(它们用于类的变量和方法)、protected(只与继承关系相关)

8.大多数对象含有访问方法和设值方法,允许客户按可控方式管理数据

9.类表示对象状态的方式应该独立于对象使用的方式

10.当调用方法时,将实参复制给形参,方法的返回值类型应该与方法头中规定的返回值类型一致,方法内声明的变量应该是方法的局部变量,不能在方法外使用

11.静态变量由类中的所有实例共享

12.聚合对象由其他对象组成,形成has-a关系

13.对象提供的一个复杂服务可以分解成几个私有支撑方法

14.重载方法的各版本由参数个数。类型及次序来区分

15.对一个程序测试所有可能的输入和用户的动作是不可行的,在测试驱动的开发中,在编写代码之前开发代码的测试用例

16.调试就是定位并修改程序中的运行时错误及逻辑错误的行为,调试程序是一个软件程序,它允许开发人员观察程序的运行

  • 教材学习中的问题和解决过程、代码调试中的问题和解决过程、代码调试中的问题和解决过程、结对及互评、感悟、学习进度条

  • 第六周总结

  • 简要内容:

教材学习内容总结

  • 继承:从已有类派生一个新类,是面向对象程序设计的一个特点

  • 在Java中只支持单继承,不支持多继承

  • 继承在父类和子类之间建立了is-a关系,一个父类可以拥有多个子类

  • Java用保留字extends来说明从已有类中派生一个新类

  • 保护可见性提供了继承之间最恰当的封装机制

  • 可使用super引用来调用父类的构造方法

  • 单重继承、多重继承

  • 子类可以重定义继承自父类的方法

  • 一个类的子类可以是一个或多个其他类的父类,这样形成了类层次

  • 公共特性应该放到类层次中尽可能高的位置上

  • Java的所有类都直接或间接地派生于Object类

  • Java程序中的每个类都继承了toString和equals方法

  • 抽象类不能示例化,其提供的概念可有其他类来定义

  • 派生于抽象父类的类必须重写父类中的所有抽象方法,否则派生的类仍为抽象类

  • final修饰符可用来继承父类

  • 教材学习中的问题和解决过程、代码调试中的问题和解决过程、互评、代码托管、其他

  • 第七周总结[http://www.cnblogs.com/GIggleZN/p/6718583.html]

  • 简要内容

    教材学习内容总结

  • 1.定义多态,多态引用在不同的时候可以指向不同类型的对象

  • 2.动态绑定(后绑定):很多情形下,方法调用可以与方法定义的绑定可以在编译时完成,但对于多态引用,绑定直到运行时才确定下来,需要调用时所指向的对象的类型来确定要用到哪个方法来定义

  • 3.多态引用在运行时才将方法调用与它的定义绑在一起

  • 4.使用继承机制的创建多态引用:通过继承实现多态

    引用变量可以指向声明继承于它的任意类的任何对象。

    对象的类型,而不是引用的类型,决定调用的是方法的哪个版本

  • 5.Java接口的目的及语法

    接口是一组抽象方法,所以不能被实例化

    继承可适用于接口,所以一个接口可派生于另一个接口

  • 6.通过接口实现多态

    接口可用来声明对象引用变量

    接口引用可以指向实现这个接口的任意类的任何对象

    方法的参数可以是多态的,这样使方法具备了对其参数进行控制的灵活性

  • 7.多态环境下的面向对象设计

    事件处理:在侦听器和所侦听组件之间建立关系是通过多态完成的

  • 教材上遇到的问题和解决过程、代码调试中的问题和解决过程、上周考试错题总结、结对及互评

  • 实验报告二

  • 简要内容:
    实验内容、实验要求、实验步骤、运行结果、关键代码解释

  • 第八周总结

  • 简要内容:

教材学习内容总结

  • 一个异常是一个对象,它定义了并不轻易出现的或是错误的情形

  • 异常由程序或运行时环境抛出,并能被捕获,需要时可进行适当的处理,与错误(error)不同,error不可恢复,且不应该被捕获

  • 导致异类的几种情形:

    1.试图被0除

    2.数组下标越界

    3.没有找到指定的文件

    4.请求的I/O操作没能正常执行

    5.试图访问空引用所指的对象

    6.试图执行一个违反某类安全措施的操作

  • 处理异常的方式:

    1.不处理异常

    2.在异常发生的地方处理

    3.在程序的其他地方处理异常

  • 不捕获异常:抛出异常时输出的消息提供了方法调用栈的轨迹

  • try-catch语句:每个catch子句处理try块中可能抛出的一种特定类型的异常

  • finally语句:不论是正常退出try块,还是因跑出一个异常而退出,都要执行finally子句

  • 异常传播:有一个可以让方法调用层次中的外层方法捕获并处理异常,如果在发生异常的方法内没有捕获并处理它,控制立即转向产生异常的这个方法的调用方法,以此类推。

  • 异常类的层次:Error类和Exception类的共同父类是Throwable类。从Excption类或他的一个后继类派生一个新类,就可以定义新的异常。

  • 必检异常和免检异常:方法头中的throws子句必须包含方法中没有被捕获及处理的必检异常

  • I/O异常(输入/输出异常):

    1.流是字节的顺序序列,他可以用作输入流或输出的目的地

    2.标准的I/O流:System类中的三个公有引用变量(in、out、err)

    System.in   标准输入流
    
    System.out  标准输出流
    
    System.err  标准错误流(输出信息错误)
    

    3.Java类库中包含了许多类,可用来定义具有不同属性的I/O流

    教材学习中的问题和解决过程

  • 问题1:对异常的分类比较模糊,层次不清

  • 问题1解决方案:从视频中学习,再分类

  • 问题2:异常的处理

  • 问题2解决方案:Java的异常处理是通过5个关键字来实现的:try,catch,throw,throws,finally。对这几个方法再分开比较

  • 代码调试中的问题和解决过程、上周考试错题总结、结对及互评

  • 第九周总结[http://www.cnblogs.com/GIggleZN/p/6784143.html]

  • 简要内容:

    教材学习内容总结

  • 一.数据库基本概念

    1.数据库是为其他程序提供数据的应用软件。对一般数据有四类基本操作:创建、读取、更新、删除。

    2.关系数据库通过唯一的标识符在不同表的记录间建立了关系。将基本信息组织成一张或多张表,不同元素之间的关系也可以保存在表中。

    3.数据库中的表通过使用locationID域而相关起来。在Java程序中能与数据库进行交互之前,必须建立到数据库的连接,使用JDBC API来建立到数据库的连接。

  • 二。建立与数据库连接

    1.驱动软件:建立与数据库间的通信,将数据库请求传给数据库应用程序。

    2.获得数据库驱动程序

  • 三.创建并修改数据库表

    1.创建表:CREATE TABLE SQL语句用来创建新的数据库表

    2.修改表:ALTER TABLE SQL语句用来修改已有的数据库表

    3.丢弃列:ALTER TABLE SQL语句,在表后使用DROP COLUMN命令。

  • 四.查询数据库

    显示列:SHOW COLUMNS SQL语句用来获取表的各列和结构设置

  • 五.插入。查看及更新数据

    1.插入:INSERT SQL语句用来向数据库表中添加新数据

    2.SELECT……FROM SQL语句让用户基于一些标准,构造对数据的请求,用来得到数据表中的数据

    3.更新:
    通过修改ResultSet可更新数据库

  • 六.删除数据和数据库表

    1.删除数据:DELETE FROM SQL语句用来删除数据库中的数据

    2.删除数据库表
    DROP TABLE SQL语句用来删除整个数据库表

  • 教材学习中的问题和解决过程、代码调试中的问题和解决过程、上周考试错题总结、结对及互评

  • 四则运算第一周学习博客

  • 简要内容

    需求分析

实现一个命令行程序,要求:
自动生成小学四则运算题目(加、减、乘、除)
支持整数
支持多运算符(比如生成包含100个运算符的题目)
支持真分数
统计正确率

关键代码解释

  • 随机生成一个0-3的整数,0代表加法,1代表减法,2代表乘法,3代表除法
    • 运用随机数生成法,switch条件语句
int c = operation.nextInt(4);

            switch (c) {
                case 0:
                    d1 = a + b;
                    System.out.println(a + "+" + b + "=  ");
                    break;
                case 1:
                    d1 = a - b;
                    System.out.println(a + "-" + b + "=  ");
                    break;
                case 2:
                    d1 = a * b;
                    System.out.println(a + "×" + b + "=  ");
                    break;
                case 3:
                    d1 = a / b;
                    System.out.println(a + "÷" + b + "=  ");
                    break;

            }
  • 用户根据指令输入答案,判断答案是否正确
    • 运用if-else条件语句来判断
 answer = scan.nextInt();

            if (answer == d1){
                System.out.println("Great!Your answer is right.");
                m++;
            }
            else {
                System.out.println("Sorry.Your answer is not right, the right answer is " + d1);
                n++;
            }
  • 计算正确率,并让正确率以百分数的形式输出
    • 运用NumberFormat方法,输出统计结果以percent的形式输出
 accuracy = m / ( m + n );
        NumberFormat percent = NumberFormat.getPercentInstance();
        percent.setMinimumFractionDigits(2);

        System.out.println("Your accuracy is: " + percent.format(accuracy) );
  • 设计思路、编写过程记录、运行过程截图、运行命令、代码托管地址、实验中遇到的困难及解决过程、结对伙伴评价

  • 实验报告三
    -简要内容

实验内容、实验要求

实验步骤

实现一个命令行程序,要求:
自动生成小学四则运算题目(加、减、乘、除)
支持整数
支持多运算符(比如生成包含100个运算符的题目)
支持真分数
统计正确率

实验过程中遇到的问题及解决思路

  • 问题1.中缀表达式转后缀表达式,加减比较容易转换,在乘除这块会涉及到优先级的问题,比较复杂,这块有一些问题

  • 问题1解决方案:之前娄老师在课上讲过这一块,再次把上课的PPT翻出来研究,而且里面所涉及到的不懂的部分在网上查找,分块解决,把大的问题解决了再解决小的问题,一步步细化,而且经过可以训练之后,会理解中后缀表达式的转化,这样来写,就会变得有思路,有迹可循。


  • 问题2.不知道怎么写入文件

  • 问题2解决方案:这个就需要java中的I/O流来对文件进行读写。java文件输出流是一种用于处理原始二进制数据的字节流类。为了将数据写入到文件中,必须将数据转换为字节,并保存到文件。

  • 设计思路、编写过程记录、关键代码解释、运行过程截图、运行命令、代码托管地址、结对伙伴评价

  • 实验报告四[http://www.cnblogs.com/GIggleZN/p/6935483.html]

  • 简要内容

    实验内容、要求及实验步骤

    实验一

  • res目录中存放了应用程序使用到的各种资源,如xml界面文件、图片等。通常包含drawable子目录、layout子目录、values子目录三个。

1.drawable:存放分辨率不同的图片

2.layout:存放xml界面布局文件,主要用于显示用户操作界面

3.values:存放不同类型的数据

在实验中我们需要将"HelloWorld"改成"HelloWorld20162323"就可以完成了。然后再加上水印提交

实验二

  • 在文件AndroidManifest.xml中,只要为application...元素添加activity...子元素,并且调用它

实验三

实验要求:

构建项目,运行教材相关代码
修改代码让Toast消息中显示自己的学号信息
提交代码运行截图和码云Git链接,截图要有学号水印,否则会扣分

实验四

ayout_gravity可以使用如下所示的取值:
1.top:将对象放在其容器的顶部,不改变其大小;

2.bottom:将对象放在其容器的底部,不改变其大小;

3.left:将对象放在其容器的左侧,不改变其大小;

4.certer_vertical:将对象纵向居中,不改变其大小,垂直方向上居中对齐;

实验五

要修改时钟的颜色,需要调用其setBackgroundColor方法,传入一个颜色对象,从而实现触碰时钟改变颜色。

  • 挑战出题

  • 简要内容:

    需求分析

    实现一个命令行程序,要求:
    自动生成小学四则运算题目(加、减、乘、除)
    支持整数
    支持多运算符(比如生成包含100个运算符的题目)
    统计正确率

    四则运算——挑战出题(只出题,不判题)

    题目去重
    程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目

    要能指定生成题目的数量

    要能指定题目包含的运算符数量

    设计思路、编写过程记录、关键代码解释、运行过程截图、运行命令、代码托管地址

    实验过程中遇到的问题及解决思路

    • 问题:我们编写的程序在idea里可以编译运行,但是在老师给出的测试工具里无法运行

  • 解决方案:我们在经过了近乎半天的努力之后(各种百度,问同学,反复检查代码),对代码删删减减涂涂改改,但还是始终没有办法运行,我们俩也没有什么头绪,我们实在无法自己解决这个问题,于是就询问了老师。在老师的帮助下,我们在命令行下执行命令:
javac -encoding UTF-8 src/Arhithmetic3/*.java

再将之前的class文件删掉重新编译。最终,我们的代码能够成功运行了。

结对小伙伴评价

  • 实验报告五
  • 简要内容:简述五个实验的主要内容、要求以及做实验的过程,重要的代码

自认为写得最好的一篇博客及理由

我认为我都还有很大的进步空间

作业中阅读量最高的一篇博客

http://www.cnblogs.com/GIggleZN/p/6718583.html

作业中与师生交互最多的一篇博客

http://www.cnblogs.com/GIggleZN/p/6784143.html

代码托管链接

课程收获与不足

真的不会忘记自己写的代码运行成功得到结果的那份高兴,学习的过程老师对我们的要求非常严格,需要我们去做的事情非常的多,一开始是诚惶诚恐,后来是轻车熟路,学习会变成一种习惯,这才是对我影响最大的东西,这个过程是循序渐进的,你想要做好一件事需要的是你去做好更多的事来为这一件事铺路,所以学习的过程是没有休止的,从娄老师的身上我也看到了这一点。

学习过程的不足就是觉得自己是在按图索骥,希望下个学期的学习过程能够能够改善这种情况。

给开学初的你和学弟学妹们的学习建议

学习一定要一步一个脚印,这是一个循序渐进的过程,前面基础不牢后面就会有很大的问题,让你学习无法前进,心有余而力不足,一定要学扎实。

问卷调查

  • 你平均每周投入到本课程有效学习时间有多少?

    每周都会有固定的时间用来学习这门课程,学习编程,敲代码,每周投入到本课程的有效学习时间大约有50个小时

  • 每周的学习效率有提高吗?你是怎么衡量的?

    学习效率是否有提高在我个人来讲,应该是你问过的问题你懂了吗?遇到的困难你解决了吗?这个学期的《Java程序设计与数据结构》课程占大部分的应该是自主学习这一块,老师教给我们怎样去自主学习,剩下的东西需要我们去践行去理解,自主学习过程中一定会遇到很多的困难,一定会有很多的问题,所以我衡量自己每周的学习效率是否有提高就是用有没有学习到新的东西来衡量,遇到的问题有没有搞懂,问同学的问题是否自己能实现,遇到的困难有没有找到解决的方案,这些都是有没有学到新的东西

  • 蓝墨云班课的使用对你的学习有促进吗?有什么建议和意见吗?

    蓝墨云班课的使用对我的学习是有促进作用的,但是,我有建议!我有意见!老师!课堂实践时间能不能给长一点,不知道什么时候突然就停止的时间真的让我很紧张,非常紧张,好多次还在加水印他就停了,so sad.

  • 你觉得这门课老师应该继续做哪一件事情?

    继续按步骤由浅入深学习,不过我希望老师能慢一点,给我们多点消化知识的时间

  • 你觉得这门课老师应该停止做哪一件事情?

    停止一些程式化的考查方法,我个人觉得这样的学习会比较无趣,不是追求学习什么学懂什么,而是去追求量化的分数,这样会打击学习的积极性和趣味性

  • 你觉得这门课老师应该开始做什么新的事情?

    这个我目前还没有想到,想到了我会来修改的

谢涛老师的工作给矛评价或建议

谢老师本学期给我们布置了结对编程完成四则运算的作业,从老师给出的要求我们写的博客模板可以看出,老师是真的希望我们能够从中学到东西,能够学会去自主编程,能够从逐步的学习中去规划编程的时间,达到高效学习高效工作,从老师对我们日常每周的学习博客的评价也可以看出谢老师是非常认真负责的对待我们每一个同学,我们遇到问题他会帮助我们去解决,对每一个同学的学习情况也都有了解,日常的博客评价等等都可以表现出,但是在结对编程这个任务上,希望老师能考虑大家的情况,放慢学习的速度,项目的难度也请老师一定为我们考量,有些项目真的做起来非常非常非常非常的吃力,需要更多的时间来做,而且我们目前学习的东西虽然相对来说比较多,但是都不太能成系统,也就是说比较杂乱,我们需要更多的时间去理解去消化,一味地带着我们去攀登更高的山峰,却不在意地基是否牢固,可能最后会得到很坏的结果,所以衷心的希望老师能放慢速度。

二维码

posted on 2017-06-18 23:25  GiggleKV  阅读(239)  评论(6)    收藏  举报

导航