《Java技術》第二次做業

《Java技術》第二次做業

(一)學習總結

1.Eclipse關聯jdk源代碼的方法
1).右鍵項目,依次選擇 構建路徑->配置構建路徑->Java構建路徑->庫->JRE系統庫->rt.jar->源代碼鏈接。編輯「源代碼鏈接」,設置「外部文件」的路徑爲JDK安裝路徑下的src.zip。如圖

2).String類的equals()方法及其實現方法,如圖

3).equals方法和==的區別
==用來比較地址,例如java

public static void main(String[] args) {
    String str1 = "hello";
    String str2 = new String("hello");
    System.out.println("str1 == str2 --> " + (str1 == str2));  
}

equals方法能夠直接比較內容,例如git

public static void main(String[] args) {
     String str1 = "hello";
     String str2 = new String("hello");
     System.out.println("str1 equals str2 --> " + (str1.equals(str2))); 
}

2.構造方法:就是他的名稱與類名同樣的方法
構造方法的重載:方法名同樣,但參數個數或參數類型不一樣
下面的程序是否能夠經過編譯?爲何?數組

public class Test {
    public static void main(String args[]) { 
        Foo obj = new Foo();   
    } 
}
class Foo{
    int value;
    public Foo(int intValue){
        value = intValue;
   }
}

不能編譯,沒有定義無參的構造函數,不能調用。改爲app

public class Test {
    public static void main(String args[]) { 
        Foo obj = new Foo();   
    } 
}
class Foo{
    int value;
    public Foo(){
    
    }
    public Foo(int intValue){
        value = intValue;
    }
}

3.運行下列程序,結果是什麼?查閱資料,分析爲何。函數

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,精度損失。修改以下性能

import java.math.BigDecimal;
public class Test {
    public static void main(String args[]) { 
        double a = 0.1;
        double b = 0.1;
        double c = 0.1;
        double n=MyMath.add(a, b);
        if(MyMath.add(n,c) == 0.3){
        System.out.println("等於0.3");
        }else {
            System.out.println("不等於0.3");
        }
    }
}
class MyMath{
    public static double add(double d1,double d2){
        BigDecimal b1=new BigDecimal(d1);
        BigDecimal b2=new BigDecimal(d2);
        return b1.add(b2).doubleValue();
    }
}

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

public class Test {
    public static void main(String[] args) {
        MyClass[] arr=new MyClass[3];
        for(int i=0;i<3;i++){
            arr[i]=new MyClass();
        }
        arr[1].value=100;
    }
}
class MyClass{
    public int value=1;
}

5.在一個10000次的循環中,須要進行字符串的鏈接操做,那麼,應該使用String類仍是StringBuffer類,爲何?性能有差別嗎?可否寫出測試代碼證實你的結論。(可查閱資料)
用StringBuffer類
緣由:String類要一個一個的連接,而StringBuffer類能夠直接調用append()方法。
性能:StringBuffer類比String類效率高
例如設計

public class Test {
    public static void main(String[] args){
        String str = "Hello";
        String b=fun(str);
        System.out.println(b); 
   }
    public static String fun(String s){
        for(int i=0;i<10000;i++){
        a=s+" World";
        }
        return a;
    }
}

public class Test {
    public static void main(String[] args){
        StringBuffer buf = new StringBuffer("Hello");
        fun(buf);
        System.out.println(buf); 
    }
    public static void fun(StringBuffer s){
        for(int i=0;i<10000;i++){
            s.append(" World");
        }
    }
}

(二)實驗總結

1.評分系統

  • 程序設計思路:定義一個二維數組並初始化,而後對二維數組進行排序,在循環裏從數組的第二個數加到倒數第二個數,把這個數傳給求平均值的函數,把求得的平均值傳回,並從大到小輸出。
  • 實驗問題分析:
    問題1:數組越界了

    緣由:j一直--,變爲負數。

    解決方案:改爲j>=0;
    2.測試郵箱
  • 程序設計思路:編寫一個函數,把用戶輸入的郵箱傳進來,用indexOf方法判斷是否有@和.,用startsWith方法判斷是不是@開頭,用endsWith方法判斷是否以com|cn|net|gov|edu|org結尾,是返回true,否返回false。
  • 實驗問題分析:
    問題1:判斷是否以com|cn|net|gov|edu|org結尾用的是if嵌套
    緣由:應該是或者關係

3.字符串統計

  • 程序設計思路:編寫一個方法,在方法裏用split方法以「,」爲拆分符進行拆分,利用循環把拆分後的字符串變成字符數組,將字符數組的開頭字母變成大寫並賦給一個新的字符串,判斷新的字符串是以什麼結尾的,將個數傳給輸出函數,進行輸出。

4.身份證識別

  • 程序設計思路:輸入一個身份證號,對字符串進行截取,截取出來前兩位、生日、倒數第二位,若是倒數第二位和2取餘等於0,則性別是女,不然是男。編寫一個函數將前兩位數傳給該函數,定義兩個二維的字符傳輸組,一個用來存放地址,一個用來存放地址代碼,用一個雙重循環判斷傳過來的前兩位數是否與存放地址代碼的數相等,相等返回地址。
  • 實驗問題分析:
    問題1:沒有返回值


緣由:由於你的return值是在循環的if條件裏面,也就是if條件成立的時候返回了String
對象,可是若是if條件不成立的話,就沒有返回值了。
解決方案:加上return null;

(三)代碼託管

  • 碼雲commit歷史截圖

(四)學習進度條

代碼行數(新增/累積) 學習時間(新增/累積) 本週學習內容
目標 5000行 300小時
第2-4周 100/100 20/20 學習了數組和方法
第5周 200/300 30/50 學習了String類和StringBuffer類
第6周
相關文章
相關標籤/搜索