20172319 2018.04.11-16

《Java程序设计教程》第6周学习总结

目录


教材学习内容总结

第八章 数组:

  • 数组元素:

    (1) 数组:同一类型多个数据的集合;

    (2) 索引(下标):数据在数组里对应的特定位置; 数据的访问方式: 数组名[索引值];注: N个值达到数组的索引值为0—(N-1);

    (3) 数组在内存中连续存放;确定数组元素地址的计算方法:该组元素的索引值 x 每个元素所占字节数 + 数组起始地址;

    (4) []运算符优先级最高

  • 声明和使用数组元素:

    (1)边界检查:自动执行,执行访问时,当索引值小于0或大于(N-1)时系统给出ArrayIndexOutOfBoundsException异常。 可调用方法放大数组【例8.8】

    (2)数组声明方式:数据类型[] 数组名数据类型 数组名[];

    二者一致但前者对于所声明的数据类型更为清晰。

    (3)数组初始值表:相当于变量初始化;数据类型[] 数组名 = {数据,数据...}; 可以不用new运算符创建数组对像只能在数组第一次声明时使用

    (4)数组作为参数:整个数组作为参数传递给方法,打印时不再仅仅是一个数,而是数组中的所有元素。

  • 对象数组: 实质是对象引用了数组;数组必须实例化,且应分别建立保存在数组中的对象。

  • 命令行实参: String[] args 调用解释器执行程序时命令行所包含数据;储存在String对象的数组中,提供给main方法。

  • 可变长度参数表: 方法重载;定义方法时定义成参数个数可变的方法:public 类型 方法名(类型 ... 数组名)在调用时可根据需求改变数据量个数;也可接受其他参数:public 类型 方法名(A类型 参数名,B类型 ... 数组名)一个方法不可接收两组可变参数; 可用构造方法接收可变参数。

public double average(int ... list)
{
double result = 0.0; if (list.length !=0)
{
int sum = 0;
for (int num : list)
sum += num;
result = (double)sum / list.length;
} return result;
}
  • 二维数组与多维数组

    (1)二维数组:一维数组中含一维数组;类型[][] 数组名一个索引值指定行,另一个指定列;每个维的大小可以不同

    (2)多维数组: 数组的多层嵌套。

返回目录


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

  • 问题1: for(int value : list)???
  • 解决:表示对数组list中的每一个value元素做相同的操作,类似于for-each循环。
for(int i = 0; i < list.length; i++)
{ }
  • 问题2: 为什么数组中的索引值要从0开始而不是1?

  • 解决:查了一下,大多数的回答是地球人都知道... 我可能来自外太空,不过后面总算找到一个挺靠谱的;

    对于此问题的理解,应该要注意地址偏移

    (1)数组是申请内存来存储其数据,它所申请的内存实际上是一串连续的内存地址

    (2)例:int[] a=new int[3];申请一段:int 数据类型的数组,a 为变量,数组长度为:[3];

    (3)数组的下标就是对这个数组进行偏移。这是硬件特性决定的。即(a[0]等同于*(a + 0))。

    (4)

    以下是索引从0开始

    a[0]——把a拿到的内存地址:1008 + 0 = 1008 (指向第一个内存地址);

    a[1]——把a拿到的内存地址:1008 + 1 = 1009 (指向第二个内存地址);

    a[2]——把a拿到的内存地址:1008 + 2 = 1010 (指向第三个内存地址);

    以下是索引从1开始

    a[1]——把a拿到的内存地址:1008 + 1 = 1009 (指向第一个内存地址);

    a[2]——把a拿到的内存地址:1008 + 2 = 1010 (指向第二个内存地址);

    a[3]——把a拿到的内存地址:1008 + 3 = 1011 (指向第三个内存地址);

    可以看到如果索引值从1开始便指向了错误的地址,因此得不到自己预想的,为了获得正确的元素地址。

    应该*(a+0-1), *(a+1-1), *(a+2-1).

    +n表示元素的索引,-1是获得正确元素地址

    每次都要依靠此来获得正确的数据,增加了CPU的运算,也浪费了资源。

    因此,索引初始值设置为0,减少了-1这一操作,也可以提高CPU的运行效率。

返回目录


代码调试中的问题和解决过程

  • 问题1:循环语句使用时的逻辑错误
  • 解决:在完成编程项目PP8.5的过程中,平均数的计算老是有错误,经过调试,发现自己在while循环时最后break退出前index++依然执行,导致最后得到结果时分母+1,因此算出来的平均值总是小于预期平均值。最后在break前,加入index--语句,保证输入的num的个数与索引值是一样的,这样在后面结果的运行中就不会出现错误。







返回目录


代码托管

![](https://images2018.cnblogs.com/blog/1334495/201804/1334495-20180415220208960-729095664.png)
![](https://images2018.cnblogs.com/blog/1334495/201804/1334495-20180415220230782-1940675040.png)

返回目录


上周考试错题总结

  • 错题1:

  • 理解:在x = 1的情况下,循环条件为真并执行语句,将x加倍(现在为2)。由于循环条件仍然为真,语句再次执行,将x加倍为4.对于接下来的4次迭代,条件保持为真,其中x变为8,16,32和64.由于(x <100)在x = 64时仍然是正确的,所以循环再次迭代并且x变为2 * 64 = 128。现在,(x <100)不再是真实的并且循环以x = 128结束。

  • 错题2:

  • 理解:四个陈述中有关复选框的每一个都是真实的

  • 错题3:

  • 理解:虽然C系列语言确实以这种方式解释了零值和非零值,但Java要求使用保留常量true和false,或者使用关系和/或逻辑运算符进行逻辑评估。

  • 错题4:

  • 理解:switch语句只能在被测试的单个变量使用时使用,并且它是一个整型(int或Java中的char)。此外,因为您必须枚举每个可能的测试值,所以switch语句只有在被测试值的数量很小时才有意义。

  • 错题5:

  • 理解:虽然写这样的switch语句是不寻常的,但它是完全合法的。switch语句执行的正常规则适用于计算switch表达式之后执行的匹配的case子句。接下来,所有后续的子句都将按顺序执行,因为没有中断语句来终止switch/case的执行。

  • 错题6:

  • 理解:变量x从10开始。每次通过循环,x递减,并且一旦x不大于0,循环最终退出,在这种情况下,这意味着一旦x变为0。因此,循环体执行x = 10, x = 9,x = 8等等,直到x = 0。这是11次。

  • 错题7:

  • 理解:变量j从字符串的长度向下计数到1,每次在位置j-1打印出字符。长度为1的字符是打印的第一个字符,这是字符串的最后一个字符。它会一直持续到j = 1,并在位置j-1或第0个字符处打印出字符,以便向后打印整个字符串。

返回目录


结对及互评

点评过的同学博客和代码

  • 本周结对学习情况

    • 20172316
    • 博客中值得学习的或问题:
    1. 教材内容总结精炼
    2. 其他(感悟)?
    3. 学习进度条应该更有顺序地排版
    • 20172329
    • **博客中值得学习的或问题: **
    1. 排版精美
    2. 内容充实
    3. commit格式不准确

返回目录


其他(感悟、思考等,可选)

  • 本周学习时间较之前来说减少不少,编程时需要考虑的东西太多,而且有时候考虑的事情太杂,在编程时花的时间较多。
  • 许多时候遇到的问题不能及时地记录,导致写博客时间过于亢长。

返回目录


学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 202/202 1/2 15/15 积极主动敲代码
第二周 490/692 1/3 18/33 善于思考
第三周 581/1273 1/4 15/48 善于完善
第四周 1857/3130 1/6 33/81
第五周 655/3787 1/7 22/103
第六周 531/4318 1/8 18/121
  • 预计学习时间:27小时
  • 实际学习时间:22小时
  • 改进情况:应对时间有合理的分配

    返回目录

参考资料

20172319 2018.04.11-16 《Java程序设计教程》 第6周学习总结的更多相关文章

  1. 20172319 2018.04.11 《Java程序设计教程》第7周课堂测验(补写博客)

    20172319 2018.04.11 <Java程序设计教程>第7周课堂测验 课程:<程序设计与数据结构> 班级:1723 学生:唐才铭 学号:20172319 指导老师:王 ...

  2. 20172319 2018.04.01-04.11 《Java程序设计》第5周学习总结

    20172319 2018.04.01-04.11 <Java程序设计>第5周学习总结 目录 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错 ...

  3. 20172319 2018.10.19《Java程序设计教程》第7周课堂实践(补写博客)

    20172319 2018.10.19 <Java程序设计教程>第7周课堂实践 课程:<程序设计与数据结构> 班级:1723 学生:唐才铭 学号:20172319 指导老师:王 ...

  4. 20172319 2018.10.12《Java程序设计教程》第6周课堂实践(补写博客)

    20172319 2018.10.12 <Java程序设计教程>第6周课堂测验 课程:<程序设计与数据结构> 班级:1723 学生:唐才铭 学号:20172319 指导老师:王 ...

  5. # 20175120 2018.3.10 《Java程序设计》第2周学习总结

    ## 教材学习内容总结第二章内容1.标识符第一个字符不能是数字字符不能是关键字和true\false\null2.8个基本数据类型boolean int byte short long float d ...

  6. # 20175120 2018.3.3 《Java程序设计》第1周学习总结

    ## 教材学习内容总结 1.安装ubuntu,在实验楼学习liunx系统各种功能的实现.2.在ubuntu平台上进行java程序的编写3.学会使用JDB调试java程序,并将代码上传到码云上4.学习j ...

  7. 20172319 2018.03.27-04.05 《Java程序设计》第4周学习总结

    20172319 2018.03.27-04.05 <Java程序设计>第4周学习总结 教材学习内容总结 第四章 编写类 类与对象的回顾:对象是有状态的,状态由对象的属性值确定.属性由类中 ...

  8. 学号 20175223 《Java程序设计》第 5 周学习总结

    目录 教材学习内容总结 教材学习中的问题和解决过程 1. 在 jdb 调试时使用命令行参数. 代码调试中的问题和解决过程 1. 在jdb调试时通过命令行传入参数 2. "可能尚未初始化变量& ...

  9. 20175314 《Java程序设计》第七周学习总结

    20175314 <Java程序设计>第七周学习总结 教材学习内容总结 第八章:常用实用类 String()类代表字符串:Java 程序中的所有字符串字面值(如 "abc&quo ...

随机推荐

  1. ZCMU 1019: 分金币

    解题思路: 附上刘汝佳老师的解题过程: 首先最终每个人的金币数量可以计算出来,它等于金币总数除以人数n.接下来用M来表示每个人最终拥有的金币数. 现在假设编号为 i 的人初始有Ai 枚金币,对于1号来 ...

  2. Netflix中的负载均衡策略

    Spring Cloud的负载均衡策略可以通过配置Ribbon搞定,也就是注入实现com.netflix.loadbalancer.IRule的类,当前包含的策略包括 1.RandomRule 随机策 ...

  3. OpenGL ES 渲染立体图形

    一.理解 顶点数据存储在申请的缓冲区中,其由数据总线传递给着色器(如果是片元着色器,还须将顶点转换成片元),再由着色器最终渲染到涂层上: 二.思路 1.设置涂层: 2.创建上下文: 3.清空缓存区: ...

  4. Linux-2.6_LCD驱动学习

    内核自带的驱动LCD,drivers/video/Fbmem.c LCD驱动程序 假设app: open("/dev/fb0", ...) 主设备号: 29, 次设备号: 0--- ...

  5. 飞控入门之C语言指针回顾

    指针 何为指针?来个官方定义:指针是一个值为内存地址的变量(或数据对象). 一.指针的声明 //示例 int *pi; //pi是指向int类型变量的指针 char *pc; // pi是指向char ...

  6. c++ 方框中绘制菜单代码

    绘制静态菜单 getch与getchar 接收光标控制 一.绘制静态菜单 编写函数void mainmenu( void) 二.getch与getchar getch()的作用是从键盘接收一个字 ...

  7. 【转载】COM 组件设计与应用(十六)——连接点(vc.net)

    原文:http://vckbase.com/index.php/wv/1257.html 一.前言 上回书介绍了回调接口,在此基础上,我们理解连接点就容易多了. 二.原理 图一.连接点组件原理图.左侧 ...

  8. CodeForces 985D Sand Fortress

    Description You are going to the beach with the idea to build the greatest sand castle ever in your ...

  9. 菜鸟vimer成长记——第1章、统一概念

    不管学什么技术,我都深信概念是最重要的.是影响整个学习轨迹,决定能在这个技术领域高度. 当然如果你现在的目的不是在学习而在于解决问题(很多人不愿意承认,或者没发现),那概念就暂时没那么重要了. 目的 ...

  10. python将oracle中的数据导入到mysql中。

    一.导入表结构.使用工具:navicate premium 和PowerDesinger 1. 先用navicate premium把oracle中的数据库导出为oracle脚本. 2. 在Power ...