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

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

教材学习内容总结

  • 学会了怎么构建一个简单的数组:
    • 定义:数组是一组数据的集合,其中的每一个数据称为元素。注意:Java中数组也是对象,其中的元素能够是任意类型,可是同一个数组只能放类型相同的数据。
    • 步骤:
      • 声明数组类型的引用变量。
        //int [] list;
      • 用new语句将数组实例化、为他们分配空间而且为每一个元素设置默认值。通常为0。//list=new int[长度]
      • 初始化,为每一个数据配上合适的值。//list[0]=1; list[1]=2;
    • 其实能够一句话解决啦int []list=new int[长度];
  • 了解了多维数组:
    • 理解:假定某个宾馆有三层,每层有三个房间。
      int[][] room=new int[3][3];只不过数组的索引从0开始
      • 第三层:|第一间房|第二间房|第三间房|
      • 第二层:|第一间房|第二间房|第三间房|
      • 第一层:|第一间房|第二间房|第三间房|
    • 本质:多维数组能够理解为数组的数组。例如:html

      { {1,2,3},
        {4,5,6},
        {7,8,9} }
  • 粗略了解了数组的边界:java

    • 一个数组的索引是从0开始的。假设你设置的长度是5,你想访问最后一个元素,你能够用索引值4来访问。可是若是你用5访问,那就··git

      错误: ArrayIndexOutOfBountsException。编程

    • 经过数组的数组名.length能够得到数组长度。length是数组的一个属性,只能读取、不能修改!
  • 数组的copy:数组

    • 书中在例子8.8中,简略的提到了数组的拷贝。书中出现的问题是使用的数组的长度不够,经过把数组的长的翻倍再把数据复制过来的方法把他解决的。数据结构

      DVD[] temp=new DVD[collection.length*2];//collection是长度不够的那个数组,乘2让他的长度翻倍。
      for (int dvd=0;dvd<collection.length;dvd++)
       
       temp[dvd]=collection[dvd];

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

  • 问题1:对象数组是个什么鬼东西?它于二维数组有什么关系?
  • 问题1解决方案:数组是个很奇妙的东西,它里面的数据更奇妙。这个元素能够仅仅就是个元素,还能够是一个对象,注:数组自己也是对象。这个对象还能够包含其余数据。例如:构造一个student类,他的属性包括name和age.学习

    public class Student
    {
    
     private String username;
     private int age;
    
      public Student(String username, int age)
     {
      this.username = username;
      this.age = age;
      }
      后面还有getUsername()、getAge()、toString()方法没写

    如今咋们定义两个student对象而且构建一个Student数组。
    student s1=student("小明",21);
    student s2=student("大明",22);this

    String[] student=new String[2];

    给数组赋值:
    student[0]=s1;
    student[1]=s2;
    用UML图表示:

    他与二维数组很类似,至关于上面二维数组例子中的数组中又有数组。.net

  • 问题2:对于这段代码如何理解的:设计

    for(Book myBook : library)
      System.out.println(myBook);
  • 问题2解决方案:这个东西在第六章提到过,于6.4.1中的for-each循环。在上述代码中,他是处理涉及迭代器的问题的。这段代码能够这样理解:对于图书馆中的每一本书,输出他的相关信息。变量mybook依次取得集合中的每个Book对象的值,而循环体可以相应的处理它他也等价于:

    Book myBook;
        while (bookList.hasNext())
        {
         myBook=bookList.next();    
        System.out.println(myBook);
        }
  • 问题3:对可变长度参数表是如何理解的?
  • 问题3解决方案:

    可变参数:适用于参数个数不肯定,类型肯定的状况,java把可变参数当作数组处理。

    注意:可变参数必须在后面,当多于一个参数时,必须放在前面如public static int add(int x,int ...args)

    特色:

    1.只能出如今参数列表的最后;
    2...位于变量类型和变量名之间,先后有无空格均可以;
    3.调用可变参数的方法时,编译器为该可变参数隐含建立一个数组,在方法体中一数组的形式访问可变参数。

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

  • 问题1:在作pp8.1的时候,在输出每一个数字前面的序号的时候也想使用的像书上的同样,(书中是经过ASCII码输出A~Z。)我是想经过ASCII码表输出0~50,可是作了半天后来别人告诉我ASCII码里只有0~9!!!! 瞬间崩溃

    这是书中经过ASCII码输入A~Z的代码。

    for (int letter=0;letter<upper.length;letter++)
           {
               System.out.print((char)(letter+'A'));
               System.out.print(":"+upper[letter]);
               System.out.print("\t\t"+(char)(letter+'a'));
               System.out.println(": "+lower[letter]);
           }

    输出结果:
    A
    B
    C
    ...

  • 问题1解决方案:最后才发现其实不须要那么麻烦,只需使用

    for (int b = 0; b <date1; b++) {
           System.out.println();
          System.out.print(b +": \t\t");

    输出结果:
    0
    1
    2
    ...

  • 问题2:在作题pp8.5的时候,出现的麻烦也挺多的。首先题目条件是输入一组数据X1~Xn,这就让我想到了书中的可变长度参数列表,书中给出的例子也是计算一组数据的平均值:

    这是代码:
    public double average(int ... list)
    {
    double result =0.0;

    if (list.length !=0)
         {
             int sum =0 ;
             for(int sum : list)
                sum+=num;
           result=(double)sum/list.length;
          }
          return   result;
          }

    这是方法的使用:
    double mean1 = average( 42 , 69 , 97 );
    double mean2 = average( 35 , 43 , 45 , 25 , 12 );
    可是若是使用这个可变长度参数列表 那么计算平均值的时候已经定义了一个数组,而后计算标准差的时候又得从新输入这个数组!总不可能让用户输入一个输入两次吧!而后我再想也许能够在构建类的时候在实例数据就把这个参数列表定义好,可是!这已是一个方法,怎么能再放到初始化里呢?

  • 问题2解决方案:最后由于对“可变长度参数列表”了解不够透彻,因此仍是没用那个东西。

    我用的方法是:

    public class pp8_5 {
       public static void main(String[] args) 
        {
       Scanner scan=new Scanner(System.in);
       int [] list=new int[50]; //直接构建一个长度为50的数组。
       int count=0,sum1=0;  //初始化计数变量count=0,总值加起来sum1=0.0
       double average=0.0,variance=0.0,sum2=0.0;//初始化 平均数average  标准差variance。
       String a="y";//初始化String 变量a为"y"
    
       while(a.equalsIgnoreCase("y")&&count<=50)//当用户输入的(y/n)的答案是y时,继续循环。
       {
           System.out.println("Please enter the "+count+"'th number.");
           list[count]=scan.nextInt();//让用户输入要计算的元素
           sum1=sum1+list[count];//把输入的元素加起来。
           count++;//用户输入了count个元素
           a=scan.nextLine();//消去前面scan.next()留下的回车符
           System.out.println("If you want to continue,Enter 'y'! ");
           a=scan.nextLine();//让用户选择是否继续输入数据(y/n)
       }
  • 问题3:pp8.6作起来也费了很多时间,首先须要编写类(这个类能够直接仿照第四章的来写,只须要把利率改为3%就好)。打多数的麻烦是出如今编写程序这一块的,题目是说有须要构建最多30个储蓄帐户信息,咱们不可能把这30个一个个的写,因此是运用到对象数组。首先出现的问题是怎么构建一个对象数组:在网上找到这个、被受启发!!他这个是先构建一个类而后建立对象、以后把对象放到数组。可是咱们要作的的是一下可能最多构建30对象,所以须要用到循环!
  • 问题3解决方案:

    个人代码:


    这个代码的实现是首先构建一个可以包含30个对象的数组,而后运用循环依次让用户输入帐户的用户名、帐号、余额。以后输入完一个帐户后,让用户选择是否须要输入另外一个帐户(y/n)。

  • 问题4:接着上面的题目,当我输入两个帐户的时候,输出却只输出前面一个帐户。就是输入n个帐户,只输出n-1个帐户。如图:
  • 问题4解决方法:在上面循环的时候第二次输入帐户信息没有赋值给数组,致使那样的错误。虽然是这样的一个小错误,我却用了半下午发现它,所以在之后的编程过程当中,必须逻辑紧密、一丝不苟!

代码托管


上周考试错题总结

  • 错题1:
正确答案:B          个人答案:C 
 错误缘由:在C选项中,若是x=0的话,它又将给x赋值为零。而题目说的是把它放在一边。
  • 错题2:

    正确答案:A   个人答案:D
     理解状况:break语句只会跳出所在的循环,并执行下一个循环。

-错题3:

正确答案:B    个人答案:A
     理解状况:咱们也能够用比较运算符比较char类型数据,String类型数据只能用compareTo()、equals()、equalsIgnoreCase()进行比较。

-错题4:

正确答案:E
       尽管写这样的switch语句是不寻常的,但它是彻底合法的。switch语句执行的常规规则适用于在交换表达式表达式后执行匹配的case子句。在此以后,全部后续的条款都是按顺序执行的,由于没有中断语句来终止开关/案例的执行。

-错题5:

正确答案:A   
     在Java中,就像在大多数语言中同样,循环语句基本上都是等价的(几乎能够互换)。它们的主要差别(s)与什么时候评估控制条件以及是否有用于递增/更新的语法有关。
  • 错题6:

    正确答案:A
           个人理解:switch语句是从第一条Case开始匹配,直至中止的语句。
  • 错题7:

    正确答案:B
            正确理解:break用法不是开发必须的。甚至许多开发商认其为不良用法。

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

这一章看起来挺简单的,实际上是有难度的。就像作题,看答案一看就会,可是实际作起来是根本作不来的。在作课后例题的过程当中,发现之前的不少代码的格式、用法都有写不出来的状况,因此要抓紧复习之前的内容。

点评过的同窗博客和代码

  • 本周结对学习状况
    • 20172310
    • 结对学习内容:
      1. 对课本中的例子进行学习、练习、总结,并对其进行了系统的概述。
      2. 课后习题通过了深入的思考,对出现的问题进行了深入的反思。
      3. 对上周的错题进行了反思与总结,并对错题结合课本内容给出了详细的分析。
    • 值得学习的地方:
      1. 概述内容认真负责,对课本有疑问的地方给出了详细的解释。
      2. 敲代码过程当中出现了问题本身愿意尝试并给予记录。
      3. 在写感觉的板块进行了深入的反思且给出了解答。
      4. 截的图色彩充分、能够看出来10号同窗颇有艺术细胞!!
    • 值得改进的地方:
      1. 排版不够精细、给人感受就是字多的感受。
      2. 参考资料记录不够详细、敢问你只查了这么多资料?
      3. 代码行呈波形! 最近有点松懈啊
    • 互评状况:

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 075/200 1/1 05/20
第二周 560/500 1/2 13/38
第三周 972/1000 1/4 21/60
第四周 694/1666 1/5 21/90
第五周 1544/3095 1/6 30/90
第六周 600/3627 1/7 30/120

参考文献

  1. java中数组的介绍与引用
  2. 可变长度参数列表介绍
  3. Java 平均数与标准差的计算
  4. Markdown的简要使用
  5. 对象数组的使用与介绍
  6. 动态时钟设置
相关文章
相关标签/搜索