20182316胡泊 第2,3周学习总结
20182316胡泊 2019-2020-1 《數據結構與面向對象程序設計》第2,3周學習總結
教材學習內容總結
第二章
- 字符串
- print與println區別:換行
- 字符串連接:(字符串不能占用多行) +
- 轉義字符:
- 變量
- 當未給出初值就使用變量,那么在編譯時會報錯
- 而c語言則是會給一個隨機值,就看你能不能發現了(所以這一點還是java比較人性化)。
- 賦值
- 賦值只能在同數據類型之間進行。
- 但是后面有賦值類型的數據類型轉換,應該算是一個特例吧。
- 賦值只能在同數據類型之間進行。
- 常量
- 命名:常常字母大寫,中間用 _ 分隔
- final int MAX_NUMBER = 435;
- 常量在其存在期間始終保持一個值(類似于C語言的const常量吧)。
- 數據類型
- byte:8位,最大存儲數據量是255,存放的數據范圍是-128~127之間。
- short:16位,最大數據存儲量是65536,數據范圍是-32768~32767之間。
- int:32位,最大數據存儲容量是2的32次方減1,數據范圍是負的2的31次方到正的2的31次方減1。
- long:64位,最大數據存儲容量是2的64次方減1,數據范圍為負的2的63次方到正的2的63次方減1。
- float:32位,數據范圍在3.4e-45~1.4e38,直接賦值時必須在數字后加上f或F(七位有效數字)
- double:64位,數據范圍在4.9e-324~1.8e308,賦值時可以加d或D也可以不加。(十五位有效數字)
- boolean:只有true和false兩個取值。
- char:16位,存儲Unicode碼,用單引號賦值。
- count++ 與 ++count的區別
- count++:先執行語句,再自增。
- ++count:先自增,再執行語句。
- 單獨寫時沒有區別,當放入語句中有區別。
- 數據轉換
- 賦值轉換:僅能實現加寬轉換,(自動)。
- 提升:整形除以浮點型,整形自動轉化為浮點型,再進行運算。
- 強制類型轉換:result=(float) total/count;
- 強轉的優先級比除法高。
- 布爾值不能轉換為其他任意一種數據類型,反之亦然。
- Scanner類
- import java.util.Scanner;:在類定義之前,告訴系統要使用Scanner類。
- Scanner scan =new Scanner(System.in);:聲明創建了一個變量scan,代表一個Scanner對象。
- message=scan.nextLine; :將下一行輸入的一行文本作為字符串變量保存。
第三章
- String +變量:變量表示的不是對象,而是對象的地址。所以可以把變量看作是一個指針。
- 別名:兩個變量同時指向同一個對象,則這兩個變量互稱為該對象的別名。
- 下標(index):(類似于C語言中字符串的下標 a[0]。)
- String類
- .concat(""); 連接。
- .toUpperCase();小寫轉為大寫。
- .replace('old','new');轉換。
- .substring(a,b);截取從第a位到第b位的字符串,返回。
- 類庫:每個類庫都屬于一個包,類庫用包來組織
- import聲明:如果想使用類庫中的類,要通過 import java.包名.類名 或者import.java.包名.*(在要用到多個類時)。
Random類:屬于java.util包,偽隨機數生成。
import java.util.Random; ` ` Random generator = new Random(); ` ` int num1; num1=generator.nextInt(10);//在0~9之間產生一個隨機數。 num1=generator.nextInt(20)+5;//在5~24之間產生一個隨機數。 num2=generator.nextFloat();//在0~1之間產生隨機數。- printf方法
- 為了在將已有C語言程序移植到java平臺時更方便。
- System.out.printf("ID:%5d,name:%s",id,name);
- 枚舉類型(類型安全的)
- enum grade(類型名){A,B,C,D,E}
- grade stu1(變量名)=grade.A;
教材學習中的問題和解決過程
- 問題1:由int/long到float的轉換明明是加寬轉換,為什么會造成數據丟失?
問題1解決方案:雖然由int、long到float是加寬轉換,但那是因為float有小數位,而float的有效位數為7位,int與long都要遠遠超過這個范圍,因此會有數據丟失的問題。
- 問題2:語句:println("you entered: ?""+ message + " ?"");
- 問題2解決方案:
- "you entered: ?"" :?"表示左邊的雙引號,兩邊的“表示打印字符串。
- +message+ :表示打印message。
- " ?"" :表示打印右邊的雙引號
- 問題3:compareTo(String str)的返回值如何計算。
- 解決方案:compareTo從第一位開始比較, 如果遇到不同的字符,則馬上返回這兩個字符的ascii值差值.返回值是int類型
- 1.當兩個比較的字符串是英文且長度不等時,
- 1)長度短的與長度長的字符一樣,則返回的結果是兩個長度相減的值
- 2)長度不一樣且前幾個字符也不一樣,從第一位開始找,當找到不一樣的字符時,則返回的值是這兩個字符比較的值
- 2.當兩個比較的字符串是英文且長度相等時
- 1)多個字符,第一個字符不同則直接比較第一個字符
- 2) 多個字符,第一個字符相同則直接比較第二個字符,以此類推
- 1.當兩個比較的字符串是英文且長度不等時,
代碼調試中的問題和解決過程
- 問題1:在進行有輸入的程序單步調試時,直接調試會出現無法識別命令。
問題1解決方案:仔細閱讀了課代表的總結的教程,建立了一個監聽的窗口,通過另一個窗口鍵入數值。
方法鏈接- 問題2:在運行書上的程序3.1時,輸入了.substring(3,30)語句時,程序報錯。
問題2解決方案:substring是返回字符串中從第a個開始一直到第b-1個結束的字符串,而我編的程序輸入的字符串沒有30位所以運行時報錯。
- 問題3:縮窄轉換
問題3解決方案:將變量定義為double,同時輸入時用scan.nextDouble.
- 問題4:問題2:吃回車問題(可能是吧,反正C語言是的)
問題4解決方案:當要輸入字符或字符串時,如果前面不是字符或字符串類型的輸入,那么就會出現吃回車問題,此時就多打一個op=scan.nextLine();將前者留在鍵盤緩沖區的回車吃掉,以便進行下一步的輸入。
- 問題5:return只能返回一種類型的數據。
- 問題5解決方法:我使用的是double來返回數據,而在程序中為了其實用性,增加了糾錯,比如“can not divide 0","unrecognizeable demand"等等,針對這個問題,有兩種解決方法:
- 將返回的double型浮點數轉化為字符串
- 將報錯語句換成-1,-2等數字,作為返回值返回。
- 問題6:在將整形轉換為字符串時查到了String.valueof()和Integer.toString()兩個方法,有區別嗎?
- 解釋:
- Integer.toString()方法
- 作用:該方法返回指定整數的有符號位的String對象,以10進制字符串形式返回,就好像將該整數值作為參數賦予 toString(int) 方法一樣。
- 此外,Integer.toString(a,b) :將十進制的a轉換為b進制。
- valueof()與Integer的不同:
- 1、valueof()當輸入的為null即空指針時,會返回字符串“null”,而Integer.toString則會報錯。
- 2、vlaueof()有多重用法,可以將int、float、double、boolean等等形式轉化為String。
- Integer.toString()方法
代碼托管
(statistics.sh腳本的運行結果截圖)
上周考試錯題總結
1、 Of the following types, which one cannot store a numeric value? (在下列數據類型中,哪一個不能存儲一個數值型數據?)
A .int
B .byte
C .float
D .char 正確
E .all of these can store numeric values (以上所有類型都可以存儲數值型數據)
解析:char類型可以存儲數字,但數字是字符型的。
2、Given the following assignment statement, which of the following answers is true regarding the order that the operators will be applied based on operator precedence?
a = (b + c) * d / e - f; (下面給定的賦值語句中,基于運算符優先級,對于將被執行操作的順序,哪一個答案是正確的?)
A ., /, +, -
B ., +, /, -
C .+, , /, - 正確
D .+, /, , -
E .+, -, *, /
解析:沒有審題,以為是普通的優先級,結果是要看運算式子的。
3、What value will z have if we execute the following assignment statement?
int z = 50 / 10.00; (如果我們執行下面的賦值語句,z將得到什么值?)
A .5
B .5.0
C .50
D .10
E .none of the above, a run-time error arises because z is an int and 50 / 10.00 is not (以上皆錯,因z是一個整型數而50 / 10.00不是,會產生運行時錯誤) 正確
解析:z是一個整型數而50 / 10.00不是,會產生運行時錯誤,由float轉為int型時,會由于縮窄轉換而報錯。
4、A variable of type boolean will store either a 0 or a 1. (Boolean類型的變量將被存儲為0或1)
A .true
B .false 正確
解析:在java中,boolean存儲為true和false,而不是0和1。
5、As in the other members of the C family of languages (C, C++, C#), Java interprets a zero value as false and a non-zero value as true.
A .true
B .false
解析:雖然C族確實以這種方式解釋了零和非零值,但是Java要求使用保留常量true和false,或者使用關系和/或邏輯運算符進行邏輯計算。
結對及互評
- 博客中值得學習的或問題:
- 對上周的錯題進行了仔細的更正和課后復習,我對上周考試題的復習較為草率。
- 博客撰寫詳細,有理有據。
- 在撰寫博客的過程中可以加入更多自己的理解。
- 代碼中值得學習的或問題:
- 代碼風格良好,便于閱讀。
- 基于評分標準,我給本博客打分:13分。得分情況如下:
正確使用Markdown語法(加1分):
模板中的要素齊全(加1分)
教材學習中的問題和解決過程(3分)
代碼調試中的問題和解決過程(3分)
本周有效代碼超過300分行的(加1分)
- 周五前發博客的加1分
- 感想,體會不假大空的加1分
- 進度條中記錄學習時間與改進情況的加1分
- 有動手寫新代碼的加1分
- 錯題學習深入的加1分
- 點評認真,能指出博客和代碼中的問題的加1分
- 結對學習情況真實可信的加1分
點評過的同學博客和代碼
- 本周結對學習情況
- 結對同學學號1
- 學習內容
- Scanner類讀輸入數據
- Random類,String類,Math類中方法的使用
- 格式化輸出
- 自定義類
其他(感悟、思考等,可選)
- 感覺最近打代碼,比之前好了很多,對代碼和文件有了更加深層的理解,能夠稍微理解linux以及java的尿性了,將其與Windows上的各種操作分離開來。
- 程序的錯誤有時就是很細小,當編譯出現錯誤時,我可能通過一種或一些奇怪的方法誤打誤撞編譯成功,甚至運行成功了,但是這些小小的問題背后可能有很多深層的知識,如果不想辦法解決,就只能一知半解,所以要有探索精神。
本來以為java學習基本上步入正軌,但編寫類有給了我當頭一棒,太難了。
學習進度條
| 目標 | 10000行 | |||
| 第一周 | 93/93 | 3/3 | 20/20 | |
| 第三周 | 880/800 | 4/4 | 40/40 |
計劃學習時間:50小時
實際學習時間:40小時
參考資料
- 《Java程序設計與數據結構教程(第二版)》
轉載于:https://www.cnblogs.com/hp12138/p/11544635.html
總結
以上是生活随笔為你收集整理的20182316胡泊 第2,3周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无监督学习——K均值聚类的Python实
- 下一篇: 实数相加