最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java如何自定義類數(shù)組的創(chuàng)建和初始化

 更新時間:2021年10月27日 10:51:07   作者:Keplery_  
這篇文章主要介紹了Java如何自定義類數(shù)組的創(chuàng)建和初始化,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

自定義類數(shù)組的創(chuàng)建和初始化

剛剛在慕課學(xué)習(xí)Java的集合類List過程中,向集合中添加元素時,遇到一個問題:

定義了一個Course類

public class Course {
    private String id;    
    private String name;  //課程名稱
    //get  set方法
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

在測試類中有一個Course類的List集合allCourses,一個向該List集合添加元素的方法addToAllCourses() ;

public class ListTest {  
    private List allCourses;  //用于存放備選課程的List
    //構(gòu)造函數(shù),初始化allCourses
    public ListTest() {         
        this.allCourses = new ArrayList();
    }
    public void addToAllCourses(String id, String name) {
        //List的add(Object e), 添加一個元素
        Course cs = new Course();  //創(chuàng)建一個Course對象,并設(shè)置其參數(shù)
        cs.setId(id);   
        cs.setName(name);
        allCourses.add(cs); 
        // List的addAll(Collection c)方法      
        Course[] courses = new Course[3];
        courses[0].setId("2");
        courses[0].setName("C語言");
        courses[1].setId("3");
        courses[1].setName("數(shù)據(jù)庫");
        courses[2].setId("4");
        courses[2].setName("計算機(jī)網(wǎng)絡(luò)");
        allCourses.addAll(Arrays.asList(courses));  
        //在該方法中 參數(shù)必須為collection類型,因此必須用工具類進(jìn)行類型轉(zhuǎn)換
     }  
}

主函數(shù)測試

    public static void main(String[] args) {
        ListTest list = new ListTest();
        list.addToAllCourses("1", "數(shù)據(jù)結(jié)構(gòu)");
        List<Course> li = list.getAllCourses();
        for(int i = 0; i < li.size(); i++) {
            System.out.println((i + 1) + ": " + li.get(i).getId() 
                               + " " + li.get(i).getName());
        }
    }

乍看是沒有問題的,但是一運(yùn)行,問題就來了,myeclipse報出了空指針異常。異常拋出點(diǎn)為addToAllCourses()方法中 Course類數(shù)組courses在賦值時的代碼。

  

既然是空指針異常,也就是說,courses[0], courses[1], courses[2]都是沒有被初始化的。

  

一般而言,如下的數(shù)組定義在myeclipse中是不會報錯的:

String[] s = new String[3];
s[0] = "000000";
System.out.println(s[0]);

但是,我的代碼中,數(shù)組的類型為自定義的類,而非Java本身提供的類(如String類),因而我懷疑是不是我的數(shù)組定義出了問題. 查閱資料后發(fā)現(xiàn),自定義類的數(shù)組定義后的初始化應(yīng)該如下:

        Course[] courses = new Course[3];
        courses[0] = new Course();
        courses[0].setName("0000000");
        System.out.println(courses[0].getName());

也就是說,在聲明了自定義類的數(shù)組之后,對每一個數(shù)組元素的初始化,都要為其new一個對象出來使得指針指向該對象,Java語言本身是不提供在自定義類數(shù)組聲明時候自動創(chuàng)建新對象的方式的。

  

此處順便再補(bǔ)充一下類二維數(shù)組的定義及初始化,

/*Java提供類*/
        //方式一:
        String[][] s = new String[][] { {"a", "b", "c"},
                                        {"d", "e", "f"}  };
        //方式二
        int r = 0;
        String[][] s = new String[2][3];
        for (int i = 0; i < 2; i++) 
            for (int j = 0; j < 3; j++) {
                s[i][j] = String.valueOf(r++);
            }
/*自定義類*/
        Course[][] courses = new Course[2][3];  //聲明
        courses[0][0] = new Course();  //使用時new一個實例
        courses[0][0].setId("0");
        courses[0][0].setName("000000");
        System.out.println(courses[0][0].getId() + "  " 
                           + courses[0][0].getName());
        //測試 不報空指針異常

自定義類封裝數(shù)組,添加類方法實現(xiàn)數(shù)據(jù)

1、具體見注釋

2、后續(xù)或有更新

public class MyArray {
    private long[] array;
    private int cnt; // 自定義數(shù)組類的元素個數(shù)
    /**
    使用自定義類封裝數(shù)組,添加類方法實現(xiàn)數(shù)據(jù)操作
    */
    public MyArray() {
        array = new long[50];
    }
    public MyArray(int size) {
        array = new long[size];
    }
    /**
    插入數(shù)據(jù),返回值為空
    */
    public void insert(long insertValue) {
        array[cnt++] = insertValue;
    }
    /**
    顯示數(shù)據(jù),返回值為空
    */
    public void display() {
        System.out.print("[");
        for (int i = 0; i < cnt ; ++i) {
            System.out.print(array[i]);
            if (i != cnt - 1) {
                System.out.print(",");
            }
        }
        System.out.println("]");
    }
    /**
    按值查找數(shù)據(jù),返回索引值
    算法:線性查找
    */
    public int search(long targetValue) {
        int i;
        int searchResult;
        for (i = 0; i < cnt; ++i) {
            if (targetValue == array[i]) {
                break;
            }
        }
        if (i == cnt) {
            searchResult = -1;
        } else {
            searchResult = i;
        }
        return searchResult; // 保持單一出口
    }
    /**
    按索引查找數(shù)據(jù),返回值為目標(biāo)數(shù)據(jù)
    */
    public long get(int targetIndex) {
        if (targetIndex < 0 || targetIndex >= cnt) {
            throw new ArrayIndexOutOfBoundsException();
        } else {
            return array[targetIndex];
        }
    }
    /**
    按值刪除數(shù)據(jù),返回其索引值
    */
    public int deleteByValue(long deleteValue) {
        int i;
        int deleteResult;
        for (i = 0; i < cnt; ++i) {
            if (array[i] == deleteValue) {
                int j;
                for (j = i; j < cnt-1; ++j) {
                    array[j] = array[j+1];
                }
                array[j] = array[--cnt];
                break; // 僅刪除從左到右第一個找到的目標(biāo)值
            }
        }
        if (i == cnt) {
            deleteResult = -1;
        } else {
            deleteResult = i;
        }
        return deleteResult; // 保持單一出口
    }
    /**
    按索引刪除數(shù)據(jù),返回值為空
    */
    public void delete(int index) {
        if (index < 0 || index >= cnt) {
            throw new ArrayIndexOutOfBoundsException();
        } else {
            int i;
            for (i = index; i < cnt - 1; ++i) {
                array[i] = array[i + 1];
            }
            //array[i] = array[cnt - 1];
            //cnt--;
            array[i] = array[--cnt]; // 替換上兩行
        }
    }
    /**
    根據(jù)索引值,更新數(shù)據(jù),返回值為空
    */
    public void update(int index, int newValue) {
        if (index < 0 || index >= cnt) {
            throw new ArrayIndexOutOfBoundsException();
        } else {
            array[index] = newValue;
        }
    }
    public static void main(String[] args) {
        MyArray array = new MyArray(3);
        array.insert(13);
        array.insert(34);
        array.insert(90);
        array.display();
        array.deleteByValue(34);
        array.display();
    }
}

3、添加自定義有序數(shù)組類

public class MyOrderArray {
    private long[] array;
    private int cnt; // 自定義數(shù)組類的元素個數(shù)
    /**
    使用自定義類封裝數(shù)組,添加類方法實現(xiàn)數(shù)據(jù)操作
    */
    public MyOrderArray() {
        array = new long[50];
    }
    public MyOrderArray(int size) {
        array = new long[size];
    }
    /**
    按序插入數(shù)據(jù),返回值為空
    */
    public void insert(long insertValue) {
        int i;
        for (i = 0; i < cnt; ++i) {
            if (array[i] > insertValue) {
                break;
            }
        }
        int j;
        for (j = cnt; j > i; --j) {
            array[j] = array[j - 1];
        }
        array[i] = insertValue;
        cnt++;
    }
    /**
    顯示數(shù)據(jù),返回值為空
    */
    public void display() {
        System.out.print("[");
        for (int i = 0; i < cnt ; ++i) {
            System.out.print(array[i]);
            if (i != cnt - 1) {
                System.out.print(",");
            }
        }
        System.out.println("]");
    }
    /**
    按值查找數(shù)據(jù),返回索引值
    算法:線性查找
    */
    public int search(long targetValue) {
        int i;
        int searchResult;
        for (i = 0; i < cnt; ++i) {
            if (targetValue == array[i]) {
                break;
            }
        }
        if (i == cnt) {
            searchResult = -1;
        } else {
            searchResult = i;
        }
        return searchResult; // 保持單一出口
    }
    /**
    按索引查找數(shù)據(jù),返回值為目標(biāo)數(shù)據(jù)
    */
    public long get(int targetIndex) {
        if (targetIndex < 0 || targetIndex >= cnt) {
            throw new ArrayIndexOutOfBoundsException();
        } else {
            return array[targetIndex];
        }
    }
    /**
    按值刪除數(shù)據(jù),返回其索引值
    */
    public int deleteByValue(long deleteValue) {
        int i;
        int deleteResult;
        for (i = 0; i < cnt; ++i) {
            if (array[i] == deleteValue) {
                int j;
                for (j = i; j < cnt-1; ++j) {
                    array[j] = array[j+1];
                }
                array[j] = array[--cnt];
                break; // 僅刪除從左到右第一個找到的目標(biāo)值
            }
        }
        if (i == cnt) {
            deleteResult = -1;
        } else {
            deleteResult = i;
        }
        return deleteResult; // 保持單一出口
    }
    /**
    按索引刪除數(shù)據(jù),返回值為空
    */
    public void delete(int index) {
        if (index < 0 || index >= cnt) {
            throw new ArrayIndexOutOfBoundsException();
        } else {
            int i;
            for (i = index; i < cnt - 1; ++i) {
                array[i] = array[i + 1];
            }
            //array[i] = array[cnt - 1];
            //cnt--;
            array[i] = array[--cnt]; // 替換上兩行
        }
    }
    /**
    根據(jù)索引值,更新數(shù)據(jù),返回值為空
    */
    public void update(int index, int newValue) {
        if (index < 0 || index >= cnt) {
            throw new ArrayIndexOutOfBoundsException();
        } else {
            array[index] = newValue;
        }
    }
    public static void main(String[] args) {
        MyOrderArray array = new MyOrderArray(3);
        array.insert(90);
        array.insert(13);
        array.insert(34);
        array.display();
        array.deleteByValue(34);
        array.display();
    }
}

4、MyArray類與MyOrderArray類目前僅區(qū)別于insert方法,后續(xù)或有更新

5、MyOrderArray類新增二分查找方法binarySearch,具體細(xì)節(jié)見該方法代碼

public class MyOrderArray {
    private long[] array;
    private int cnt; // 自定義數(shù)組類的元素個數(shù)
    /**
    使用自定義類封裝數(shù)組,添加類方法實現(xiàn)數(shù)據(jù)操作
    */
    public MyOrderArray() {
        array = new long[50];
    }
    public MyOrderArray(int size) {
        array = new long[size];
    }
    /**
    按序插入數(shù)據(jù),返回值為空
    */
    public void insert(long insertValue) {
        int i;
        for (i = 0; i < cnt; ++i) {
            if (array[i] > insertValue) {
                break;
            }
        }
        int j;
        for (j = cnt; j > i; --j) {
            array[j] = array[j - 1];
        }
        array[i] = insertValue;
        cnt++;
    }
    /**
    顯示數(shù)據(jù),返回值為空
    */
    public void display() {
        System.out.print("[");
        for (int i = 0; i < cnt ; ++i) {
            System.out.print(array[i]);
            if (i != cnt - 1) {
                System.out.print(",");
            }
        }
        System.out.println("]");
    }
    /**
    按值查找數(shù)據(jù),返回索引值
    算法:線性查找
    */
    public int search(long targetValue) {
        int i;
        int searchResult;
        for (i = 0; i < cnt; ++i) {
            if (targetValue == array[i]) {
                break;
            }
        }
        if (i == cnt) {
            searchResult = -1;
        } else {
            searchResult = i;
        }
        return searchResult; // 保持單一出口
    }
    /**
    按值查找數(shù)據(jù),返回索引值
    算法:二分查找
    */
    public int binarySearch(long targetValue) {
        int middle = 0;
        int low = 0;
        int top = cnt;
        while (true) {
            middle = (top + low) / 2;
            if (targetValue == array[middle]) {
                return middle;
            } else if (low > top) {
                return -1;
            } else if (targetValue < array[middle]) {
                top = middle - 1; // 切記減一
            } else if (targetValue >= array[middle]) {
                low = middle + 1; // 切記加一
            }
        }
    }
    /**
    按索引查找數(shù)據(jù),返回值為目標(biāo)數(shù)據(jù)
    */
    public long get(int targetIndex) {
        if (targetIndex < 0 || targetIndex >= cnt) {
            throw new ArrayIndexOutOfBoundsException();
        } else {
            return array[targetIndex];
        }
    }
    /**
    按值刪除數(shù)據(jù),返回其索引值
    */
    public int deleteByValue(long deleteValue) {
        int i;
        int deleteResult;
        for (i = 0; i < cnt; ++i) {
            if (array[i] == deleteValue) {
                int j;
                for (j = i; j < cnt-1; ++j) {
                    array[j] = array[j+1];
                }
                array[j] = array[--cnt];
                break; // 僅刪除從左到右第一個找到的目標(biāo)值
            }
        }
        if (i == cnt) {
            deleteResult = -1;
        } else {
            deleteResult = i;
        }
        return deleteResult; // 保持單一出口
    }
    /**
    按索引刪除數(shù)據(jù),返回值為空
    */
    public void delete(int index) {
        if (index < 0 || index >= cnt) {
            throw new ArrayIndexOutOfBoundsException();
        } else {
            int i;
            for (i = index; i < cnt - 1; ++i) {
                array[i] = array[i + 1];
            }
            //array[i] = array[cnt - 1];
            //cnt--;
            array[i] = array[--cnt]; // 替換上兩行
        }
    }
    /**
    根據(jù)索引值,更新數(shù)據(jù),返回值為空
    */
    public void update(int index, int newValue) {
        if (index < 0 || index >= cnt) {
            throw new ArrayIndexOutOfBoundsException();
        } else {
            array[index] = newValue;
        }
    }
    public static void main(String[] args) {
        MyOrderArray array = new MyOrderArray(3);
        array.insert(90);
        array.insert(13);
        array.insert(34);
        array.display();
        //array.deleteByValue(34);
        System.out.println(array.binarySearch(90));
        array.display();
    }
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MyBatis-Plus?Page?分頁不生效的問題解決

    MyBatis-Plus?Page?分頁不生效的問題解決

    分頁是常見的一種功能,本文主要介紹了MyBatis-Plus?Page分頁不生效的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • Vue實現(xiàn)驗證碼登錄的超詳細(xì)步驟

    Vue實現(xiàn)驗證碼登錄的超詳細(xì)步驟

    這篇文章主要給大家介紹了關(guān)于Vue實現(xiàn)驗證碼登錄的超詳細(xì)步驟,我們在使用vue進(jìn)行前端開發(fā)時都需要登錄驗證,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • java連接hdfs ha和調(diào)用mapreduce jar示例

    java連接hdfs ha和調(diào)用mapreduce jar示例

    這篇文章主要介紹了Java API連接HDFS HA和調(diào)用MapReduce jar包,需要的朋友可以參考下
    2014-03-03
  • Spring?Cloud?使用?Resilience4j?實現(xiàn)服務(wù)熔斷的方法

    Spring?Cloud?使用?Resilience4j?實現(xiàn)服務(wù)熔斷的方法

    服務(wù)熔斷是為了保護(hù)我們的服務(wù),比如當(dāng)某個服務(wù)出現(xiàn)問題的時候,控制打向它的流量,讓它有時間去恢復(fù),或者限制一段時間只能有固定數(shù)量的請求打向這個服務(wù),這篇文章主要介紹了Spring?Cloud?使用?Resilience4j?實現(xiàn)服務(wù)熔斷,需要的朋友可以參考下
    2022-12-12
  • 一文詳解Java如何系統(tǒng)地避免空指針問題

    一文詳解Java如何系統(tǒng)地避免空指針問題

    新手Java開發(fā)總是經(jīng)常空指針檢查,甚至某些老手也會犯這樣的問題,所以這篇文章小編就帶大家一起來看看如何系統(tǒng)地避免空指針問題,希望對大家有所幫助
    2024-01-01
  • 通過實例學(xué)習(xí)Java集合框架HashSet

    通過實例學(xué)習(xí)Java集合框架HashSet

    這篇文章主要介紹了通過實例學(xué)習(xí)Java集合框架HashSet,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • centos7安裝java的多種方式總結(jié)

    centos7安裝java的多種方式總結(jié)

    這篇文章主要給大家介紹了關(guān)于centos7安裝java的多種方式,文中通過實例代碼以及圖文介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-01-01
  • 自己動手寫的mybatis分頁插件(極其簡單好用)

    自己動手寫的mybatis分頁插件(極其簡單好用)

    最近做了個項目,需要用到mybatis分頁功能,網(wǎng)上找了很多插件,都不太合適,于是就自己動手寫了個mybatis分頁插件功能,非常不錯,代碼簡單易懂,需要的朋友參考下吧
    2016-11-11
  • Java實現(xiàn)商品的查找、添加、出庫、入庫操作完整案例

    Java實現(xiàn)商品的查找、添加、出庫、入庫操作完整案例

    這篇文章主要介紹了Java實現(xiàn)商品的查找、添加、出庫、入庫操作,結(jié)合完整實例形式分析了java基于面向?qū)ο蟮纳唐沸畔⑻砑?、刪除、查找等相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • SSM框架使用poi導(dǎo)入導(dǎo)出Excel的詳細(xì)方法

    SSM框架使用poi導(dǎo)入導(dǎo)出Excel的詳細(xì)方法

    這篇文章主要介紹了SSM框架使用poi導(dǎo)入導(dǎo)出Excel,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03

最新評論

德庆县| 昌图县| 湘潭县| 新源县| 汤阴县| 兴海县| 扶绥县| 绿春县| 平定县| 岳池县| 项城市| 安丘市| 延寿县| 泸西县| 故城县| 邵东县| 阳朔县| 观塘区| 峨边| 德昌县| 盐边县| 和平县| 普兰县| 中江县| 仙桃市| 孝昌县| 克拉玛依市| 海淀区| 广饶县| 佛坪县| 定襄县| 宝应县| 东乌珠穆沁旗| 永仁县| 长宁区| 湛江市| 新沂市| 驻马店市| 武宁县| 浦东新区| 金乡县|