20172314 2017-2018-2 《程序设计与数据结构》第六周学习总结

时间:2022-02-19 10:27:26

20172314 2017-2018-2 《程序设计与数据结构》第六周学习总结

教材学习内容总结
  • 数组是一个含有多个值的列表,每个值存在于数组中特定的,具有编号的位置。
  • 数组的声明:(1)int[] xxx = new int[3];表示实例化数组xxx后,为其预留了存放三个整型值的内存空间,索引为0、1、2。(2)int[] xxx={1,2,3};表示用初始值表实例化一个数组对象,并为数组中的每个元素提供初始值。
  • 数组作为参数:整个数组可以作为一个参数传递给一个方法,这种方法可以实际改变该数组元素,一个数组元素也可以传递给方法。
  • 对象数组:数组可以将对象引用作为元素保存,每个数组元素所代表的对象必须分别实例化后才可直接使用,如

    person[] ps = new Person[2];
    ps[0] = new Person(name0,phone0);
    ps[1] = new Peeson(name1,phone1);
  • 命令行实参:String[]参数(通常称为args)代表了命令行参数,调用解释器时关于命令行的信息将存放在args数组*程序使用。例如

    public class xxx{
    pubilc static void main(String[] args){
    System.out.print("args[0] = " + args[0]);
    }
    运行时,输入java xxx hello,输出的就是args[0] = hello;
  • 可变长度参数表:将java方法定义为参数个数个数可变的方法,每次调用这个方法时处理的数据量不同。例如

    public double average(int...list)
    average方法可接受任意个数(包括0)的int参数。多个参数的类型可以是基本类型或对象类型;接收可变参数的方法可以是基本类型或对象类型,可变参数需写在形参表最后,且一个方法只能有一组可变参数。
  • 二维数组:保存整型数的二维数组形式为int[][];每个维的大小可以不同,也可以使用初始值表实例化二维数组,需要用双重循环来输出二维数组的每一个元素

教材学习中的问题和解决过程
  • 问题一:看到书中这样一段话时不理解

将一个数组作为参数的方法可以实际改变该数组的元素,因为该方法引用的是原始数组的元素值。但该方法不能改变数组引用本身,因为它所接受的参数是原始数组引用的副本。

  • 问题一解决:在助教的帮助下,利用书中的例8.4进行了试验,才理解了。第一张图是将数组作为方法的参数,在引用方法时,修改索引值为0的元素,再次输出此数组时,索引值为零的元素改变了。同时,对这一个问题做出了扩展,第二张图调用了方法修改索引值为0的元素,修改了这个数组,成为了一个新数组,输出这个新数组,索引值为0的元素也改变了。

20172314 2017-2018-2 《程序设计与数据结构》第六周学习总结

20172314 2017-2018-2 《程序设计与数据结构》第六周学习总结

  • 问题二:再看到书上例8.3时,其中upper[current-'A']++不理解,current是char型的值,upper是int型的值。
  • 问题二解决:char类型的值相加减实际上为对应的ASCCI码相加减,结果为int型的。这里current代表检测到的字符,它减去开头的‘A‘字符,则为他的序号,所以upper[current-'A']++代表这个字符出现的次数。

  • 问题三:不知道System.out.print(prime + " "); 其中prime是一个int型,那“ ”是什么意思。
  • 问题三解决:为了输出prime的值,需要把他转换成字符串型的,所以加上“ ”来转换。

代码调试中的问题和解决过程
  • 问题一:如图, 用list.length表示数组长度时,输出的均值为零。当添加语句System.out .println(list.length ) ;时,发现它的值不是5而是50,即为每次输入一个整数时与之前输入的积累2 + 2+3 + 2+3+4 + 2+3+4+5 + 2+3+4+5+6=50

20172314 2017-2018-2 《程序设计与数据结构》第六周学习总结

20172314 2017-2018-2 《程序设计与数据结构》第六周学习总结

20172314 2017-2018-2 《程序设计与数据结构》第六周学习总结

  • 问题一解决:把list.length修改为num1后,则正确,原因是在上面的程序中,每输入一个num,则执行num++,所以num就代表数组中的元素个数,而list数组中的元素值我已经定义为list[num1]=num,所以数组中的每个元素值是个积累得来的数值,并不是输入的数值。

20172314 2017-2018-2 《程序设计与数据结构》第六周学习总结

  • 问题二:输入数值后并没有按照我所要求的做出反应。

20172314 2017-2018-2 《程序设计与数据结构》第六周学习总结

20172314 2017-2018-2 《程序设计与数据结构》第六周学习总结

  • 问题二解决:后来仔细查看了代码,发现如果我输入的第一个数不为零,则进入else条件句中,并且在while语句中循环,此时再输入零自然没反应,直到输入够50个数后才能跳出循环。

代码托管

20172314 2017-2018-2 《程序设计与数据结构》第六周学习总结

上周考试错题总结
  • 错题一:The idea that program instructions execute in order (linearly) unless otherwise specified through a conditional statement is known as flow of control
  • 错题一解析:“控制流程”描述了指令执行的顺序。它默认为线性(或顺序),但通过使用控制语句(如条件和循环)进行更改。
  • 错题二:Which of the sets of statements below will add 1 to x if x is positive and subtract 1 from x if x is negative but leave x alone if x is 0?
    if (x > 0) x++;
    else if (x < 0) x--;
  • 错题二解析:我选择的答案是“if (x > 0) x++;
    if (x < 0) x--; else x = 0;”我选择的答案中,如果x是正数,执行x++,在任何情况下,都会执行第二条语句,如果x不是负数,那么执行else将x变为零,所以错误。
  • 错题三:If x is an int where x = 1, what will x be after the following loop terminates?
    while (x < 100)
    x *= 2; 128
  • 错题三解析:当X等于64时,再次判断,他还是小于100的,所以再次执行x *=2语句,变为128,之后不满足循环条件。
  • 错题四:Which of the following are true statements about check boxes?
    A . they may be checked or unchecked
    B . radio buttons are a special kind of check boxes
    C . they are Java components
    D . you can control whether or not they will be visible
  • 错题四解析:复选框可能会被check或不被check,单选按钮是一种特殊的复选框,他们是Java组件,你可以控制复选框是否可见。以上都是复选框的特点。
  • 错题五:In Java, selection statements consist of the if and if-else statements. false
  • 错题五解析:还有swich语句也是。
  • 错题六:In order to compare int, float and double variables, you can use <, >, ==, !=, <=, >=, but to compare char and String variables, you must use compareTo( ), equals( ) and equalsIgnoreCase( ).false
  • 错题六解析:可以使用<,>,==,!=,<=,> =直接比较char变量,但是对于任何字符串比较,必须使用compareTo(),equals()和equalsIgnoreCase()。
  • 错题七:A continue statementmay be used within any Java loop statement
  • 错题七解析:尽管应该避免使用continue语句,但是如果可能的话,它们可以在Java的三个循环中使用:for,while和do-while。
  • 错题八:The statement if (x < 0) y = x; else y = 0; can be rewritten using a conditional operat y = (x < 0) ? x : 0;
  • 错题八解析:这道题目是语句记错了,我选择的是“(x <0)?y = x:y = 0;”
  • 错题九:How many times will the following loop iterate?
    int x = 10;
    do {
    System.out.println(x);
    x--;
    } while (x > 0 ); 11 times
  • 错题九解析:输出多少个数就循环多少次,输出的数依次是:10、9、8、7、6、5、4、3、2、1、0。当x=1时还会循环一次,我错在这里,误认为这时就停止了。
  • 错题十:Given that s is a String, what does the following loop do?
    for (int j = s.length( ); j > 0; j--)
    System.out.print(s.charAt(j-1)); it prints s out backwards
  • 错题十解析:j表示字符s的长度,j-1表示最后一个字符的索引值,所以是从后往前的。
  • 错题十一:In Java, it is possible to create an infinite loop out of while and do loops, but not for-loops. false
  • 错题十一解析:循环可以是无限循环,但Java for循环也可以是无限循环。在许多其他编程语言中,这种情况并非如此,其中for循环具有设置的起点和终点,但Java for-loops比大多数其他语言的for-loops灵活得多。

结对及互评

本周结对情况

  • 对象:20172323王禹涵
  • 结对学习内容
    • 第八章(数组)
    • 完成课后PP8.1、PP8.5、PP8.6

点评

  • 博客中值得学习的或问题:
    • 博客很精美,很漂亮,用队友的话来说我的很朴素,下次尝试一下他的排版。
    • 内容完整,图文并茂。
    • 不足之处在于对问题的分析相对较简单,可以尝试记录一下问题的解决过程。
  • 代码中值得学习的或问题:
    • commit的阐述符合要求,粒度合理。
    • 代码规范,可读性强。
  • 基于评分标准,我给本博客打分:9分。得分情况如下:
    • 正确使用markdown语法(1分)。
    • 模板要素齐全(1分)。
    • 问题加分(4分)。
    • 代码量(1分)。
    • 排版精美加一分
    • 代码规范加一分

其他

在这周的学习中感觉自己的逻辑性不好,写的循环大多是有问题的,在编写pp之类的代码时,想的有点复杂,在最开始时误以为代码需要实现的很多功能后来发现不用那么复杂,所以开始走了很多弯路,感觉还是对循环语句掌握的不好,总会想着绕很大的弯去实现一些操作,但其实可以用一些巧妙的语句实现。但问题是我就是想不到啊罒ω罒

学习进度条
代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 93/93 1/1 20/20
第二周 305/398 1/2 20/38
第三周 328/651 2/4 25/60
第四周 1013/1689 1/5 30/90
第五周 795/2407 1/6 30/120
第六周 1117/2921 1/7 30/150

参考资料