20172306《java程序设计与数据结构》第六周学习总结

20172306《Java程序设计》第六周学习总结

教材学习内容总结

第八章关键学习了数组的相关内容。我觉得主要分一下几点:
         1.索引是从0开始,要区分好索引值和个数值。0的索引处是第一个数字。
         2.牢记数组是对象,我们在声明的时候,是给了它相应的内存空间。数组可以储存任意的基本类型的数据或对象,但是应该一致。在编程时,一定要区分好数组对象和你在数组里声明的对象的区别。
         3.在一个数组中,都会有一定的边界,要注意如果你输入的超过了边界,就会产生错误,因为没有相应的内存空间给你。
         4.对于初始值表,在我看来,和声明一个数组的模式是差不多的,只不过,我们在初始值表中将你要输入的值提前写了出来,将你预备的内存空间先占了位置。
         5.在对象和对象数组这一问题上,我觉得最需要注意的问题是数组中的每一个对象都必须分别实例化。
         6.对于可变长度参数表,我觉得应该知道的是,我们是构造一个方法将数组可变,还有我们可变的可以是不同类型的参数。可变参数必须卸载形参表的最后,一个方法不能接受两组可变参数。
         7.对于二维数组,我的室友给了我一个很好理解的方法,那就是罢行和列看成是一个坐标中的x和y,把它想象成坐标,再看书中的例题,就会发现,简单易懂的多。

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

  • 问题1:

  • 问题1解决方案:起初我看到这个很不理解它的这个过程,不过,你把row和col看成x和y坐标,那么0的位置就是(0,0)。对于row为0时,row10 + col就是010 + 0 、1、2、3、4、5……,所以第一行是这样的,后面的也同理,而后面的table[row][col]+" " 是为了让整个输出更加的美观而易懂。

  • 问题2:
    对于例题中的for (Grade letterGrade : grades)的方式不是很理解。

  • 问题2解决方案:对于以上的方式,其实我们可以把它写成很普通的形式,以上面的例子为例:for (int letterGrade = 0; letterGrade<grades.length;letterGrade++)。这两者的意思是相同的,就是上一个更加的简单而已。还有,在上图中进行的new操作是将对象实例化的过程,我认为可以看做是初始化。书中说,数组的每一个对象都必须分别实例化。我想这里就是表达这个意思。

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

  • 问题1:
  • 问题1解决方案:这是书中SR8.16的题,我最初想的是,给一个数组十个内存空间,然后只给第一个也就是0索引处加入数值。可是结果我给第一个加入内容,输出后是所有的内存空间都含有了。后来重新改了一下, 将[0]换成了[b]。这样就会出现这样的现象,这满足我最初的想法。如图所示,


    这是因为,在有[0]的时候,它是将0索引处的值输出,进而将其中的内存都填满,而[b],是单纯的输出我定义的这个b这个对象。所以会输出我想要的东西。
  • 问题2:
  • 问题2解决方案:出现这样的原因是,你所输入的值多于你所准备的内存空间,导致出现边界溢出。所以才会出现上面的错误。
  • 问题3:因为在这周中,我还更改了第五章石头剪子布的程序,也遇到了很多的问题。
  • 问题3解决方案:

    这是我最开始所编的代码,结果出现的是无限循环,停不下来的问题 ,就是无限的循环。后来我尝试将第一个while循环去掉,但是作用不是很明显。再后来,我将while改成了if以及else的形式,这回不循环了,但是出现的问题是只会输出赢没有输。用IDEA进行调试,会发现,应该加一个break

    ,这样就会将令程序进行到后面的ifelse中,而不是直接的输出电脑的数字。

代码托管

上周考试错题总结

  • 1.The following loop is syntactically valid.
    for (int j = 0; j < 1000; j++) j--;
    A true
    B false 本题选A 本题的逻辑是没有意义的,但是语法是没有问题的。

  • 2.The following for-loop is an infinite loop.(下面的是无限循环)
    for (int j = 0; j < 1000; ) i++;
    A true
    B false 本题选A 这个循环初始化j到0并将其与1000进行比较,但是在每次循环迭代之后不会改变j。在现实中,一旦 i 变得太大,无法存储在内存中,循环就会终止,但逻辑上,这是一个无限循环。

  • 3.Control in a switch statement jumps to the first matching case.
    A true
    B false 本题选A 开关表达式被求值,控制跳转到第一个匹配的情况,然后继续。

  • 4.A switch statement must have a default clause.(switch语句必须有default)
    A true
    B false 本题选B default是可选的。书中有这样的一段话:如果没有case子句的值和表达式的值相匹配,程序将执行可选的、由保留字default指定的默认执行语句。如果没有可选的default子句,则switch中的所有语句都不会被执行。

  • 5.How many times will the following loop iterate?
    in x = 10;
    do {
    System.out.println(x);
    x--;
    } while (x > 0);
    A 0 times
    B 1 times
    C 9 times
    D 10 times
    E 11 times 本题选E 变量x从10开始。每一次通过循环,x都是递减的,当x不再大于0时,循环最终会退出,在这种情况下,一旦x变成0。所以循环体执行x=10,x=9,x=8,以此类推到x=0。这是11倍。

  • 6.The do loop differs from the while loop in that
    A the while loop will always execute the body of the loop at least once
    B the do loop will always execute the body of the loop at least once
    C the do loop will continue to loop while condition in the while statement is false and the while loop will continue to loop while the condition in the while statement is true
    D the while loop will continue to loop while condition in the while statement is false and the do loop will continue to loop while the condition in the while statement is true
    E none of the above, there is absolutely no difference between the two types of loops 本题选B 本题的翻译是do循环与while循环不同 a.while循环总会至少执行一次循环体 b.do loop至少会执行一次循环的主体 c.do loop会继续循环,while语句中的条件为假,while循环将继续循环,while语句中的条件为真d.while循环将继续循环,while语句中的条件为假,而do loop将继续循环,while语句中的条件为真 e.以上都没有,绝对没有

  • 7.Given the following code, where x = 0, what is the resulting value of x after the for-loop terminates?
    for (int i=0;i<5;i++)
    x += i;
    A 0
    B 4
    C 5
    D 10
    E 15 本题选D 每一次通过for循环的结果都是循环索引的当前值,我被添加到x中,第一次通过循环,i=0,所以x=x+0=0。第二次通过循环i=1,所以x=x+1=1。第三次通过循环i=2,所以x=x+2=3。第四次通过循环i=3,所以x=x+3=6。第五次也是最后一次通过循环i=4,所以x=x+4=10。

  • 8.A continue statement
    A may be used within a while or a do-while loop, but not a for loop 。可以在一段时间内使用,也可以在循环中使用,但不能用于for循环
    B is identical to a break statement within Java loopsb。 与Java循环中的break语句相同
    C may be used within any Java loop statement 可以在任何Java循环语句中使用
    D may be used within a for loop, but not within a while or a do-while loop 可以在for循环中使用,但不能在一段时间内使用,也不能在while循环中使用
    E none of the above 本题选 D 尽管应该避免使用continue语句,但如果可能的话,它们可能会在Java的三个循环中使用:for、while和while循环。

  • 9.If a switch statement is written that contains no break statements whatsoever,如果一个switch语句没有包含任何break语句,
    A this is a syntax error and an appropriate error message will be generateda.这是一个语法错误,将生成一个适当的错误消息
    B each of the case clauses will be executed every time the switch statement is encounteredb.每当遇到switch语句时,都会执行每个case子句
    C this is equivalent to having the switch statement always take the default clause, if one is present.这等价于交换语句总是取默认的子句,如果有的话
    D this is not an error, but nothing within the switch statement ever will be executed.这不是一个错误,但是switch语句中的任何东西都不会被执行
    E none of the above 本题选E 尽管写这样的switch语句是不寻常的,但它是完全合法的。switch语句执行的常规规则适用于在交换表达式表达式后执行匹配的case子句。在此之后,所有后续的条款都是按顺序执行的,因为没有中断语句来终止开关/案例的执行。

  • 10.You might choose to use a switch statement instead of nested if-else statements if
    A the variable being tested might equal one of several hundred int values
    B the variable being tested might equal one of only a few int values
    C there are two or more int variables being tested, each of which could be one of several hundred values
    D there are two or more int variables being tested, each of which could be one of only a few values
    E none of the above, you would never choose to use a switch statement in place of nested if-else statements under any circumstance 本题选B 只有在测试了单个变量,并且它是一个整数类型(Java中的int或char)时,才可以使用switch语句。而且,因为您必须枚举正在测试的每一个可能的值,所以switch语句只有在被测试的值的数量是一个很小的数字时才有意义。

  • 11.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( ).为了比较int型、浮点型和double,您可以使用<、、!=、<===,但是要比较char和String变量,您必须使用compareTo()、equals()和equalsIgnoreCase()。
    A true
    B false 本题选B char型是可以直接用运算符进行比较的。而String型是不可以的。

  • 12.The statement { } is a legal block.({}是法律障碍)
    A true
    B false 本题选A 一个{,后面跟着0或更多的Java语句,然后是} 所以在括号之间没有语句是可以接受的。这种情况在Java中是必要的,特别是在实现抽象类的方法时,您将在后面学习。

  • 13.When comparing any primitive type of variable, == should always be used to test to see if two values are equal.( 当比较任何原始类型的变量时,应该总是用来测试两个值是否相等)
    A true
    B false 本题选B 对于这道题,我们应考虑浮点数的比较,有这样的情况::如果THETA=0。000001,我们可以通过(x-y<=THETA)来测试x和y,而不是(x
    y),以便更好地了解它们是否足够接近相等。

  • 14.Every Interator
    A has a hasNext( ) method
    B has a hasFirst( ) method
    C has a hasNextInt( ) method
    D has a isEmpty( ) method
    E none of the above 本题选A 每个迭代器都有一个hasNext()方法,如果有迭代元素还没有被处理,那么它是正确的。每个迭代器都有一个next()方法,该方法递送下一个元素进行处理。

  • 15.If a break occurs within the innermost loop of a nested loop that is three levels deep( 如果在嵌套循环的最内部循环中出现中断,该循环深度为3级)
    A when the break is encountered just the innermost loop is "broken"(当遇到中断时,最里面的循环是“坏的”)
    B when the break is encountered, all loops are "broken" and execution continues from after the while statement (in our example)(当遇到中断时,所有循环都被“破坏”,执行从while语句(在我们的示例中)继续执行。)
    C when the break is encountered, all but the outermost loops are broken, and execution continues from the next iteration of the while loop (in our example)(。当遇到中断时,除了最外面的循环之外,所有的循环都被破坏,并且执行从while循环的下一个迭代(在我们的示例中)继续执行。)
    D this is a syntax error unless there are break or continue statements at each loop level(这是一个语法错误,除非在每个循环级别上有中断或连续语句)
    E none of the above 本题选A 最内层的循环(在我们的例子中是for循环)被破坏,并且执行从for循环结束后继续执行。 ### 这道题我不是很懂,还没解决。

  • 16.Assume that count is 0, total is 20 and max is 1. The following statement will do which of the following? if (count != 0 && total / count > max) max = total / count;
    A The condition short circuits and the assignment statement is not executed (条件短路和赋值语句未执行)
    B The condition short circuits and the assignment statement is executed without problem(条件短路和赋值语句是无问题的执行的)
    C The condition does not short circuit causing a division by zero error(这种情况不存在短路引起的零误差)
    D The condition short circuits so that there is no division by zero error when evaluating the condition, but the assignment statement causes a division by zero error(条件短电路,在评估条件时没有零误差,但是赋值语句导致了零误差的除法)
    E The condition will not compile because it uses improper syntax(因为它使用了不正确的语法,所以这个条件不会被编译) 本题选A 因为count是0,(count!=0)是假的。因为&&条件的左边是假的,条件是短路的,所以右边没有被求值。因此,避免了一个潜在的零错误。由于条件为假,所以语句max=total/count没有执行,再次避免了零错误的潜在划分。

结对及互评

  • 博客中值得学习的或问题:

    • 对于他的第一个问题,for我也有向学长了解其中的原因,和学长说的差不多,主要是将for的循环简化了,但是这种方法并不是很容易懂。但是我觉得他可取得地方是,他所给出的解释更加的专业、有逻辑,这使我对于for理解更深了一层。
  • 代码中值得学习的或问题:

    • 对于他代码中的第二个问题,这个PP8.1我和他是一起去请教张旭升助教的,最开始的时候,运行是正常的,但是后来出现了这样的情况。我觉得他值得我学习的地方是,他比我更会钻研,这个BUG我都没有发现,而他发现了。以后我一定争取比他发现的早!!!
    • 我觉得对于这个范围,边界的问题,在编译之前我也并没有很上心,后来知道这个边界问题还是很重要的。所以我认为,我们两个都应该在边界问题的方面多学习一些。
  • 基于评分标准,我给本博客打分:7分。

  • 本周结对学习情况

    • 20172325

    • 结对学习内容

      • 一起学习了有关第八章的二维数组的有关知识;
      • 一起向学长请教有关PP8.1如何进行编程的问题。

其他

   这次学的第八章,花了四天左右的时间,其中有周末的时间,我表示,四天学一章的进度比一周半学两章的进度更能让人接受,也给了更多的时间去思考和琢磨。学习了第八章,我觉得自己在编后面的习题的时候,遇到了难题,找了学长解答,我觉得学长给我对于学java的一个很大的感悟,就是java这个东西,我们不能把编程序这个东西想的过于现实化,或者说不能按生活的思维去思考一个程序的逻辑。我们是编写的主人,很多东西都是有我们来定义,而不是我们听从别的方法或者变量。这是学长给我很大的一个感悟。还有,我觉得细心和耐心很重要,很多时候,是逻辑出现问题,就要不断的去改,不断的发现逻辑中的错误。这比编译错误更折磨人。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 193/200 1/1 20/20
第二周 247/440 1/1 22/42
第三周 445/895 2/2 20/62
第四周 885/1780 1/1 43/105
第五周 775/2555 1/1 55 /160
第六周 1171/3726 1/1 38/198

参考资料

原文地址:https://www.cnblogs.com/lc1021/p/8833111.html