學號 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. 動態時鐘設置
相關文章
相關標籤/搜索