《Java技術》第二次做業

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歷史截圖

相關文章
相關標籤/搜索