1.學習使用Eclipse關聯jdk源代碼,查看String類的equals()方法,截圖,並學習其實現方法。舉例說明equals方法和==的區別。
java
2.什麼是構造方法?什麼是構造方法的重載?下面的程序是否能夠經過編譯?爲何?git
public class Test { public static void main(String args[]) { Foo obj = new Foo(); } } class Foo{ int value; public Foo(int intValue){ value = intValue; } }
不能,構造方法用於在建立對象時對其進行初始化。方法的重載就是方法名稱相同,但參數的類型和參數的個數不一樣,經過傳遞參數的個數及類型不一樣以完成不一樣功能的方法調用。數組
3.運行下列程序,結果是什麼?查閱資料,分析爲何。app
public class Test { public static void main(String args[]) { double a = 0.1; double b = 0.1; double c = 0.1; if((a + b + c) == 0.3){ System.out.println("等於0.3"); }else { System.out.println("不等於0.3"); } } }
運行程序出來的結果爲不等於0.3,輸出的(a+b+c)爲0.30000000000000004函數
爲了處理精度損失的問題,可使用java.math.BigDecimal類,查閱JDK幫助文檔或教材p378,對上述程序進行修改。性能
程序修改成:學習
import java.math.BigDecimal; public class Math { public static void main(String args[]) { BigDecimal b1=new BigDecimal("0.1"); BigDecimal b2=new BigDecimal("0.1"); BigDecimal b3=new BigDecimal("0.1"); double s; s=b1.add(b2).add(b3).doubleValue(); System.out.println(s); if(s == 0.3){ System.out.println("等於0.3"); }else { System.out.println("不等於0.3"); } } }
4.運行下列程序,結果是什麼?分析緣由,應如何修改.測試
public class Test { public static void main(String[] args) { MyClass[] arr=new MyClass[3]; arr[1].value=100; } } class MyClass{ public int value=1; }
結果爲:.net
Exception in thread "main" java.lang.NullPointerException at Test.main(Test.java:6)
這個調用使用類名稱進行調用,則必須將其聲明爲static屬性。設計
應爲:
public class Test { public static void main(String[] args) { MyClass[] arr=new MyClass[3]; arr[1].value=100; System.out.println(arr[1].value); } } class MyClass{ public static int value=1; }
5.在一個10000次的循環中,須要進行字符串的鏈接操做,那麼,應該使用String類仍是StringBuffer類,爲何?性能有差別嗎?可否寫出測試代碼證實你的結論。
應該使用StringBuffer類。
String類表示的字符串是常量,一旦建立則內容和長度都不能改變。StringBuffer類表示字符容器,內容和長度能夠隨時修改。在操做字符串時,若是該字符串僅用於表示數據類型,則使用String類型,若是須要對字符串進行增刪操做,則使用StringBuffer類。
String類:
public class Test { public static void main(String[] args){ String str = "Hello"; for (int i=0; i<10000;i++) { str = str+"World"; } System.out.println(str); } }
StringBuffer類:
public class Test { public static void main(String[] args){ StringBuffer str = new StringBuffer("Hello"); for(int i=0;i<10000;i++){ str.append("world"); } System.out.println(str); } }
(二)實驗總結
實驗內容:
1.評分系統:一共10個評委,滿分10分,假設有5個選手,分別由評委打分,去掉一個最高分和一個最低分後的平均分爲該選手得分,將選手的得分從高到低進行輸出。定義適當的方法。
程序設計思路:先用雙重循環,在內循環依次輸入每一個選手10個評委所得的分,賦值給數組,而後在對每一個選手的分求總和,而後去掉最大值和最小值,再求平均值,而後將平均值賦給另外一個數組,五個選手重複上述數輸入,最後再將平均值的數組從高到低排序,最後循環輸出數組。
問題1:
int y=in.nextInt(); a[j]=y;
緣由:不知道應該怎麼輸入數組
解決方案:後來問了同窗知道輸入變量而後將變量賦值給數組
問題2:
d=max(a,d); x=min(a,x); System.out.println(sum); System.out.println("第"+(i+1)+"我的的最高分"+d); System.out.println("第"+(i+1)+"我的的最低分"+x); sum=sum-d-x;
緣由:不會調用函數
解決方案:經過看書,從網上查資料及同窗幫助修改,實參與形參個數相等 ,類型一致。使
d=max(a,d); x=min(a,x);
完成了函數調用。
2.Email驗證:在各類應用中,須要對用戶輸入的email地址進行驗證,編寫一個方法,判斷一個email地址是否有效。(判斷條件:A:@和.同時存在 B: @在.以前 C: 不能@開頭 D: 以com|cn|net|gov|edu|org結尾 )
程序設計思路:讓用戶輸入一個郵箱,而後對用戶輸入的郵箱進行判斷,'@'和'.'同時存在爲下標都不爲'-1','@'在'.'以前爲'@'的下標小於'.'的下標, 不能'@'開頭,用以。。開頭字符來寫, 以'com|cn|net|gov|edu|org'結尾用以。。字符結尾來寫,這些條件都知足郵箱有效,不然無效。
問題1:
if((str.indexOf("@"))<(str.indexOf("."))) &&(str.indexOf("@")!=-1)&&(str.indexOf(".")!=-1))
緣由:不知道同時存在和。。在。。以前應該怎麼寫
解決方案:經過問同窗,知道能夠用下標大小來表示在。。以前,下標不爲'-1'來表示存在。
問題2:
if((!str.startsWith("@"))&&((str.endsWith("com"))||(str.endsWith("cn"))||(str.endsWith("net")) ||(str.endsWith("gov"))||(str.endsWith("edu"))||(str.endsWith("org")))
緣由:輸出老是有錯
解決方案:原來是這樣寫的
(str.endsWith("com||cn||net||gov||edu||org")
後來老是錯誤就把這些分開寫,爲
((str.endsWith("com"))||(str.endsWith("cn"))||(str.endsWith("net"))||(str.endsWith("gov"))||(str.endsWith("edu"))||(str.endsWith("org")))
而後就正確了。
(三)代碼託管
碼雲commit歷史截圖