1. 程式人生 > >第七天 自定義資料型別&ArrayList集合【悟空教程】

第七天 自定義資料型別&ArrayList集合【悟空教程】

第七天 自定義資料型別&ArrayList集合【悟空教程】

第07天 自定義資料型別、Arraylist集合

第1章 自定義資料型別

1.1 自定義資料型別概述

任何程式語言都需要將現實生活中的事物抽象成程式碼。這時可以使用自定義的資料型別(類)來描述(對映)現實事物。

類就是資料型別,與之前學習的所有引用資料型別相同,自定義類也是一種資料型別。只是自定義型別並非Java為我們預先提供好的型別,而是我們自己定義的一種引用資料型別用來描述一個事物。

1.2 類的定義及使用

1.2.1 類的定義格式及使用格式

程式碼對映現實事物的過程就是定義類的過程。每個成員變數與要描述的事物屬性變數名對應,資料型別對應。

這時,我們便可以將一個事物的多個屬性值組織成一個完整的事物作為操作單位。

a) 類的定義格式

建立檔案,與類名相同

public class 類名{

資料型別  屬性名稱;

資料型別  屬性名稱2;

}

如:

class Person {

String  name;

int  age;

}

b) 類的使用格式

類在定義出來之後,必須被使用,不使用雖然沒有語法錯誤,但是沒有意義。

自定義類的使用方式與以往的引用資料型別完全相同,如下:

導包:我們將所有的類放到同一個資料夾下,可以避免導包。

建立物件:資料型別  變數名 = new 資料型別();

呼叫方法: 由於我們定義的型別並不完整,所以現在不涉及呼叫方法,而是訪問屬性訪問屬性:物件名. 屬性名 (這是當前的方式,後期會採取呼叫方法的方式替代掉直接訪問的方式來完成對屬性的訪問。)

如:

Person p = new Person();

p.name  =  “AngelaBaby”;

p.age = 18;

Person p2 = new Person();

p2.name  =  “黃曉明”;

p2.age = 36;

System.out.println(p.name);  //列印結果:AngelaBaby

System.out.println(p.age); //列印結果:18

System.out.println(p2.name); //列印結果:黃曉明

System.out.println(p2.age);  //列印結果:36

1.2.2 自定義型別練習

我們可以將現實生活中的任何事物抽象成一個類,請自定義並使用一種資料型別。如人類、動物類、汽車類、衣服類、玩具類等。

/*

自定義型別 人類

屬性

姓名  String

年齡  int

性別  String

身高  double

是否熱愛java  boolean

*/

public class Person

{

//姓名

String name;

//年齡

int age;

//性別

String sex;

//身高

double height;

//是否喜歡java

boolean isLoveJava;

}

/*

測試自定義型別 Person類

注意事項

自定義類就是引用資料型別 每個物件的屬性都有預設值

static修飾的方法 只能呼叫static修飾的方法或成員變數

指的是

在同一個類中直接訪問時,必須使用static修飾

如果通過物件名.方法名 或者 物件名.屬性名的方式訪問 不需要static飾

*/

public class Test_Person{

public static void main(String[] args){

Person  p = new Person();

p.name = "柳巖";

p.age = 38;

p.sex = "女";

p.height = 1.65;

p.isLoveJava = true;

System.out.println("姓名:"+p.name);

System.out.println("年齡:"+p.age);

System.out.println("性別:"+p.sex);

System.out.println("身高:"+p.height);

System.out.println("是否喜歡java:"+p.isLoveJava);  

System.out.println("-------------------");

Person p2 = new Person();

System.out.println(p2);

System.out.println(p2.name);

System.out.println("年齡:"+p2.age);

System.out.println("性別:"+p2.sex);

System.out.println("身高:"+p2.height);

System.out.println("是否喜歡java:"+p2.isLoveJava);

}

}

/*

自定義資料型別  商品類

商品屬性

商品編號   String

商品名稱   String  

商品單價   double

商品數量   int

商品金額   double

建立檔案,與類名相同

public class 類名{

資料型別  屬性名稱;

資料型別  屬性名稱2;

}

*/

public class GoodsItem

{

//商品編號

String id;

//商品名稱

String name;

//商品單價

double price;

//商品數量

int number;

//商品金額

double money;

}

/*

測試類  測試自定義型別商品類

導包 測試類 與 被測試類在同一個資料夾下 不需要導包

建立物件 資料型別 變數名 = new 資料型別();

呼叫方法 沒有方法不呼叫

訪問屬性

變數名.屬性名  獲取值/賦值

*/

public class Test_GoodsItem{

public static void main(String[] args)

{

GoodsItem gs = new GoodsItem();

gs.id = "01";

gs.name = "少林寺酥餅核桃";

gs.price = 15.50;

gs.number = 22;

gs.money= gs.price * gs.number;

String id= gs.id;

System.out.println(id);

System.out.println(gs.money+20.01);

}

}

1.2.3 自定義型別注意事項與記憶體圖

  • 這裡完成的是不完整的自定義型別,更為完整的自定義類定義方式會在面向物件時詳細解釋。

  • 與引用型別陣列類似,同為引用型別的自定義型別直接列印物件的引用變數,結果為物件地址值,這裡可以通過記憶體圖簡單解釋。

第2章 ArrayList集合

2.1 為什麼出現集合類

我們學習的是面嚮物件語言,而面嚮物件語言對事物的描述是通過物件體現的,為了方便對多個物件進行操作,我們就必須把這多個物件進行儲存。

而要想儲存多個物件,就不能是一個基本的變數,而應該是一個容器型別的變數,在我們目前所學過的知識裡面,有哪些是容器型別的呢?陣列和StringBuilder(後面API講)。

但是呢? StringBuilder的結果是一個字串,不一定滿足我們的要求,所以我們只能選擇陣列,這就是物件陣列。

而物件陣列又不能適應變化的需求,因為陣列的長度是固定的,這個時候,為了適應變化的需求,Java就提供了集合類供我們使用,由此可見集合的長度是可變的。

2.2 物件陣列的案例

建立一個學生陣列,儲存三個學生物件並遍歷

public class Student {

private String name;

private int age;

public Student() {

}

public Student(String name, int age) {

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

public class Demo01Array {

public static void main(String[] args) {

//建立學生陣列

Student[] students = new Student[3];

//建立學生物件

Student s1 = new Student("曹操",40);

Student s2 = new Student("劉備",35);

Student s3 = new Student("孫權",30);

//把學生物件作為元素賦值給學生陣列

students[0] = s1;

students[1] = s2;

students[2] = s3;

//遍歷學生陣列

for(int x=0; x<students.length; x++) {

Student s = students[x];

//System.out.println(s);

System.out.println(s.getName()+"---"+s.getAge());

}

}

}

物件陣列的記憶體圖

2.3 ArrayList集合概述

雖然在Java中陣列是運算速度最快的容器,但是在實際開發過程中,使用最頻繁的資料容器並不是陣列,而是ArrayList集合。

ArrayList是Java集合框架體系(Java Collections Framework)中的一員,完整的集合體系會在後邊的集合章節中重點介紹。這裡介紹必要知識:

ArrayList與陣列類似,均將元素從0開始編號,但是它比陣列更方便,長度可變就是方便處之一,並且集合與陣列訪問資料的方式也不同,集合可以呼叫功能強大的方法來滿足不同需求。

2.4 ArrayList集合的使用格式

ArrayList同為引用型別,符合引用型別的使用方式,如下:

導包:import java.util.ArrayList;

建立物件:

與其他普通的引用資料型別建立方式完全相同,但是要指定容器中儲存的資料型別:

類名<集合內元素型別> 變數 = new 類名<集合內元素型別>();

ArrayList<String>  xxXX = new ArrayList<String>();

注意:集合中只能儲存引用資料型別,儲存基本型別時,儲存的型別為對應每個基本型別對應的引用資料。

int  Integer

double Double

char  Character

ArrayList<Integer>  yyYY = new ArrayList<Integer>();

ArrayList<Double>  zzZZ = new ArrayList< Double >();

/*

ArrayList集合

ArrayList是引用資料型別

導包 import  java.util.ArrayList;

建立物件 ArrayList<集合中儲存元素的資料型別>   變數名 = new ArrayList<集合中儲存元素的資料型別>();

呼叫方法

變數名.方法名();

  add(引數)  向集合中新增元素

  get(索引)  通過索引獲取集合中的元素

*/

//導包

import java.util.ArrayList;

public class Demo01_ArrayList

{

public static void main(String[] args)

{

//建立集合ArrayList物件

ArrayList<String>  nameList = new ArrayList<String>();

//呼叫方法

String name1 = "柳巖";

String name2 = "金蓮";

nameList.add(name1);

nameList.add(name2);

nameList.add("唐嫣");

//獲取集合中的元素

String thisName = nameList.get(2);

System.out.println(thisName);

System.out.println(nameList.get(1));

}

}

注意事項:

/*

ArrayList的注意事項

ArrayList只能儲存引用資料型別  要想儲存基本資料型別的話 需要存對應的引用型別

int    Integer

double Double

方法呼叫時,static修飾的方法只能呼叫static修飾的其他方法,

指的是

直接呼叫時,其他方法必須用static修飾

但是使用 物件名.方法名() 訪問時,可以不加satatic

public boolean add(元素型別 e)   直接向集合新增元素

public int size()      獲取集合長度

public 元素型別 get(int index)   根據指定索引獲取集合元素

public 元素型別 remove(int index)       根據指定索引刪除集合元素

public 元素型別 set(int index, 元素型別obj)修改指定索引出的值為新值

*/

//匯入集合

import java.util.ArrayList;

public class Demo02_ArrayList

{

public static void main(String[] args)

{

//儲存整數的集合

ArrayList<Integer>  list = new ArrayList<Integer>();

//新增元素

int a = 10;

int b = 20;

list.add(a);

list.add(b);

list.add(123);

//刪除索引為2的元素  第三個元素

int removeNumber = list.remove(2);

System.out.println(removeNumber);

//修改索引為1的元素 第二個元素

list.set(1,100);

System.out.println("---------------------");

//獲取集合長度

int size = list.size();

System.out.println(size);

System.out.println("---------------------");

//獲取集合中的資料

System.out.println(list.get(0));

System.out.println(list.get(1));

System.out.println(list.get(2));

}

public static void method(){

System.out.println("我是一個方法");

}

}

2.5 ArrayList類的構造方法和成員方法

  • ArrayList<E>集合:大小可變陣列的實現

    • <E>:是一種特殊的資料型別,泛型。

    • 在出現E的地方我們使用引用資料型別替換即可

    • 舉例:ArrayList<String>,ArrayList<Student>

  • 構造方法

    • ArrayList()

  • 成員方法

    • 新增元素

      • public boolean add(E e):新增元素

      • public void add(int index,E element):在指定的索引處新增一個元素

public class Demo01ArrayList {

public static void main(String[] args) {

//建立集合物件

ArrayList<String> list = new  ArrayList<String>();

//add(E e):新增元素

list.add("hello");

list.add("world");

list.add("java");

//add(int index,E element):在指定的索引處新增一個元素

list.add(1, "android");

System.out.println("array:"+list);

}

}

    • 獲取元素

      • public E get(int index):返回指定索引處的元素

    • 集合長度

      • public int size():返回集合中的元素的個數

    • 刪除元素

      • public boolean remove(Object o):刪除指定的元素,返回刪除是否成功

      • public E remove(int index):刪除指定索引處的元素,返回被刪除的元素

    • 修改元素

      • public E set(int index,E element):修改指定索引處的元素,返回被修改的元素

public class Demo02ArrayList {

public static void main(String[] args) {

//建立集合物件

ArrayList<String> array = new ArrayList<String>();

//新增元素

array.add("hello");

array.add("world");

array.add("java");

//public E get(int index):返回指定索引處的元素

System.out.println("get:"+array.get(0));

System.out.println("get:"+array.get(1));

System.out.println("get:"+array.get(2));

//public int size():返回集合中的元素的個數

System.out.println("size:"+array.size());

//public boolean remove(Object o):刪除指定的元素,返回刪除是否成功

System.out.println("remove:"+array.remove("world"));//true

System.out.println("remove:"+array.remove("world"));//false

//public E remove(int index):刪除指定索引處的元素,返回被刪除的元素

System.out.println("remove:"+array.remove(0));

//public E set(int index,E element):修改指定索引處的元素,返回被修改的元素

System.out.println("set:"+array.set(0, "android"));

//輸出

System.out.println("array:"+array);

}

}

2.6 ArrayList集合使用練習

2.6.1 ArrayList存放基本資料型別遍歷    

即依次獲取集合中每一個元素,並列印

/*

ArrayList集合儲存基本資料型別 並遍歷  求和  求最大值

*/

import java.util.ArrayList;

public class Demo03_ArrayList

{

public static void main(String[] args)

{

ArrayList<Double>   list = new ArrayList<Double>();

double a = 10.1;

double b = 20.2;

//向集合中新增元素

list.add(a);

list.add(b);

list.add(30.3);

double sum = 0.0;

double max = list.get(0);

//獲取集合中的元素 遍歷集合

for(int i = 0;i<list.size();i++){

double number = list.get(i);

System.out.println(number);

//求和

sum += number;

//求最大值

if(max < number){

max = number;

}

}

System.out.println(sum);

System.out.println(max);

}

}

2.6.2 ArrayList存放自定義型別遍歷

/*

集合儲存自定義型別   Person

擴充套件內容

求年齡最大的那個人是誰

*/

import java.util.ArrayList;

public class Demo04_ArrayList

{

public static void main(String[] args)

{

//建立集合物件

ArrayList<Person>  list = new ArrayList<Person>();

//呼叫add方法向集合中新增元素

Person p = new Person();

p.name = "柳巖";

p.age = 38;

Person p2 = new Person();

p2.name = "唐嫣";

p2.age = 18;

Person p3= new Person();

p3.name = "金蓮";

p3.age = 1000;

list.add(p);

list.add(p2);

list.add(p3);

// Person  thisP = list.get(0);

// Person thisP2 = list.get(1);

// System.out.println(thisP.name);

// System.out.println(thisP2.name);

//求年齡和

int sumAge = 0;

//最大年齡

Person  firstP = list.get(0);

int maxAge = firstP.age;

//集合儲存自定義Person 遍歷

for(int i = 0 ;i<list.size();i++){

Person thisPerson = list.get(i);

System.out.println("姓名"+thisPerson.name);

System.out.println("年齡"+thisPerson.age);

//年齡求和

sumAge += thisPerson.age;

//求最大年齡

if(maxAge<thisPerson.age){

maxAge = thisPerson.age;

//如果年齡比第一個人大,就給第一個人重新賦值

firstP = thisPerson;

}

}

System.out.println(sumAge);

System.out.println("最大年齡:"+maxAge+"年齡最大的人是:"+firstP.name);

}

}      

2.6.3 ArrayList求多個整數的和

/*

ArrayList集合儲存基本資料型別 並遍歷  求和  求最大值

*/

import java.util.ArrayList;

public class Demo03_ArrayList

{

public static void main(String[] args)

{

ArrayList<Double>   list = new ArrayList<Double>();

double a = 10.1;

double b = 20.2;

//向集合中新增元素

list.add(a);

list.add(b);

list.add(30.3);

double sum = 0.0;

double max = list.get(0);

//獲取集合中的元素 遍歷集合

for(int i = 0;i<list.size();i++){

double number = list.get(i);

System.out.println(number);

//求和

sum += number;

//求最大值

if(max < number){

max = number;

}

}

System.out.println(sum);

System.out.println(max);

}

}

2.6.4 ArrayList求多個人中年齡最大的人是誰

/*

集合儲存自定義型別   Person

擴充套件內容

求年齡最大的那個人是誰

*/

import java.util.ArrayList;

public class Demo04_ArrayList

{

public static void main(String[] args)

{

//建立集合物件

ArrayList<Person>  list = new ArrayList<Person>();

//呼叫add方法向集合中新增元素

Person p = new Person();

p.name = "柳巖";

p.age = 38;

Person p2 = new Person();

p2.name = "唐嫣";

p2.age = 18;

Person p3= new Person();

p3.name = "金蓮";

p3.age = 1000;

list.add(p);

list.add(p2);

list.add(p3);

// Person  thisP = list.get(0);

// Person thisP2 = list.get(1);

// System.out.println(thisP.name);

// System.out.println(thisP2.name);

//求年齡和

int sumAge = 0;

//最大年齡

Person  firstP = list.get(0);

int maxAge = firstP.age;

//集合儲存自定義Person 遍歷

for(int i = 0 ;i<list.size();i++){

Person thisPerson = list.get(i);

System.out.println("姓名"+thisPerson.name);

System.out.println("年齡"+thisPerson.age);

//年齡求和

sumAge += thisPerson.age;

//求最大年齡

if(maxAge<thisPerson.age){

maxAge = thisPerson.age;

//如果年齡比第一個人大,就給第一個人重新賦值

firstP = thisPerson;

}  

}

System.out.println(sumAge);

System.out.println("最大年齡:"+maxAge+"年齡最大的人是:"+firstP.name);

}

}

2.6.5 儲存字串並遍歷

public class Demo03ArrayList {

public static void main(String[] args) {

//建立集合物件

ArrayList<String> list = new ArrayList<String>();

//新增元素

list.add("hello");

list.add("world");

list.add("java");

//獲取元素

//原始做法

System.out.println(list.get(0));

System.out.println(list.get(1));

System.out.println(list.get(2));

System.out.println("----------");

for(int i=0; i<3; i++) {

System.out.println(list.get(i));

}

System.out.println("----------");

//如何知道集合中元素的個數呢?size()

for(int i=0; i<list.size(); i++) {

System.out.println(list.get(i));

}

System.out.println("----------");

//最標準的用法

for(int i=0; i<list.size(); i++) {

String s = list.get(i);

System.out.println(s);

}

}

}

2.6.6 給定一個字串陣列:{“張三丰”,“宋遠橋”,“張無忌”,“殷梨亭”,“張翠山”,“莫聲谷”},將陣列中的元素新增到集合中,並把所有姓張的人員列印到控制檯上。

public class Demo02ArrayListTest {

public static void main(String[] args) {

//定義字串陣列

String[] strArray = {"張三丰","宋遠橋","張無忌","殷梨亭","張翠山","莫聲谷"};

//建立集合物件

ArrayList<String> list = new ArrayList<String>();

//遍歷字串陣列,獲取到每一個字串元素

for(int x=0; x<strArray.length; x++) {

//把獲取到的字串元素新增到集合

list.add(strArray[x]);

}

//遍歷集合

for(int x=0; x<list.size(); x++) {

String s = list.get(x);

//要判斷每一個字串元素是否以"張"開頭,如果是,就輸出在控制檯

if(s.startsWith("張")) {

System.out.println(s);

}

}

}

}

第3章 今日練習

3.1 知識點相關題

3.1.1 定義類:Test4,包含main()方法,按以下要求編寫程式:

1) 例項化一個ArrayList,只儲存String資料:

2) 依次存入以下元素:孫悟空,豬八戒,白骨精,紅孩兒

3) 遍歷集合,取出每個元素並列印;

package StudentJavaSEday07;

import java.util.ArrayList;

/**

* 1)例項化一個ArrayList,只儲存String資料:

*  2)依次存入以下元素:孫悟空,豬八戒,白骨精,紅孩兒

*  3)遍歷集合,取出每個元素並列印;

*

@author 奮鬥蒙

*

*/

public class Demo {

public static void main(String[] args) {

ArrayList<String> al = new ArrayList<String>();

String a = "孫悟空";

String b = "豬八戒";

String c = "白骨精";

String d = "紅孩兒";

al.add(a);

al.add(b);

al.add(c);

al.add(d);

for (int i = 0; i < al.size(); i++) {

System.out.println(al.get(i));

}

}

}

3.1.2 定義類:Test6,包含main()方法,按以下要求編寫程式:

4) 在類中定義方法String printList(ArrayList<Integer> list),表示:將集合內所有元素轉換為一個字串,並返回。

(注:請參考陣列的實現)

例如:集合內元素:10,5,90,70,66,80,88

返回的字串:{10, 5, 90, 70, 66, 80, 88}

package StudentJavaSEday07;

import java.util.ArrayList;

/**

* 4)在類中定義方法String printList(ArrayList<Integer> list), 表示:將集合內所有元素轉換為一個字串,並返回。

* (注:請參考陣列的實現) 例如:集合內元素:10,5,90,70,66,80,88 返回的字串:{10, 5, 90, 70, 66, 80, 88}

*

@author 奮鬥蒙

*

*/

public class Demo2 {

public static void main(String[] args) {

ArrayList<Integer> list = new ArrayList<Integer>();

list.add(10);

list.add(5);

list.add(90);

list.add(70);

list.add(66);

list.add(80);

list.add(88);

String str = printList(list);

System.out.println(str);

}

public static String printList(ArrayList<Integer> list) {

String str = "{";

for (int i = 0; i < list.size(); i++) {

if (i != (list.size() - 1)) {

str += list.get(i)+",";

else {

str += list.get(i);

}

}

str += "}";

return str;

}

}

3.1.3 定義類:Person(人),包含以下屬性:

姓名:

性別:

年齡:

身份證號:

身高(米):

體重(公斤):

定義類:Test1,包含main()方法,按以下要求編寫程式:

1) 例項化一個Person物件p1;

2) 為p1的各個屬性賦值;

3) 列印p1的各個屬性值;

4) 例項化第二個Person物件p2;

5) 為p2的各個屬性賦值;

6) 列印p2的各個屬性值;

然後將p1和p2 物件存進一個集合中,然後遍歷這個集合,將所有的物件的資訊列印 出來。

package StudentJavaSEday07;

/**

* 定義類:Test1,包含main()方法,按以下要求編寫程式:

* 1)例項化一個Person物件p1;

* 2)為p1的各個屬性賦值;

* 3)列印p1的各個屬性值;

* 4)例項化第二個Person物件p2;

* 5)為p2的各個屬性賦值;

* 6)列印p2的各個屬性值;

@author 奮鬥蒙

*

*/

public class Test {

public static void main(String[] args) {

Person p1 = new Person(nullnull, 0, null, 0, 0);

p1.name = "孫悟空";

p1.sex = "男";

p1.age = 999999;

p1.ID = "0000000001";

p1.height = 180.00;

p1.weight = 50.00;

Person p2 = new Person(nullnull, 0, null, 0, 0);

p2.name = "趙雲";

p2.sex = "男";

p2.age = 888888;

p2.ID = "0000000002";

p2.height = 190.00;

p2.weight = 70.00;

System.out.print("姓名:"+p1.name+"; ");

System.out.print("性別:"+p1.sex+"; ");

System.out.print("年齡:"+p1.age+"; ");

System.out.print("身份證:"+p1.ID+"; ");

System.out.print("身高:"+p1.height+"; ");

System.out.println("體重:"+p1.weight+"; ");

System.out.println("---------------------------------");

System.out.print("姓名:"+p2.name+"; ");

System.out.print("性別:"+p2.sex+"; ");

System.out.print("年齡:"+p2.age+"; ");

System.out.print("身份證:"+p2.ID+"; ");

System.out.print("身高:"+p2.height+"; ");

System.out.println("體重:"+p2.weight+"; ");

}

}

3.1.4 定義一個集合,只能儲存String 型別的資料,然後建立一個鍵盤錄入的Scanner物件,要求該集合可以一直迴圈錄入資料,直到在控制檯錄入字串 exit,跳出迴圈。結束鍵盤錄入。

package StudentJavaSEday07;

import java.util.ArrayList;

import java.util.Scanner;

/**

* 定義一個集合,只能儲存String 型別的資料,

* 然後建立一個鍵盤錄入的Scanner物件,

*  要求該集合可以一直迴圈錄入資料,

* 直到在控制檯錄入字串exit,

* 跳出迴圈。 結束鍵盤錄入。

*

@author 奮鬥蒙

*/

public class Demo3 {

public static void main(String[] args) {

ArrayList<String> list = new ArrayList<String>();

while (true) {

for (int i = 0; i == list.size(); i++) {

Scanner sc = new Scanner(System.in);

System.out.println("請輸入一個字串(程式退出請輸入exit):");

String next = sc.next();

if ("exit".equals(next)) {

System.out.println("程式已經退出!");

return;

}

list.add(next);

}        

}

}

}

3.1.5 5.定義類,定義main()方法,按以下要求編寫程式碼:

  • 定義類Dog,要求有以下成員:

    成員屬(私有):

    名稱:

    性別:

    年齡:

    構造方法:

    無參:

    全參:

    成員方法:

    get/set方法

  • 在main()方法中,按以下要求編寫程式碼:

    1) 例項化一個只儲存Dog物件的ArryayList集合;

    2) 向集合中新增三個Dog物件:

    “金毛”,  ’公’,  2

    “哈士奇”,  ’公’,  1

    “藏獒”,  ‘母’,  3

    3) 再次向集合中新增一個Dog物件

    “哈士奇”, ‘公’,  1

    4) 遍歷集合,列印每個Dog物件,觀察是否儲存了兩個”相同的物件”;

    5) 如果希望不儲存”相同的物件”,應該怎麼做?

3.2 程式碼題:

3.2.1 模擬 飯店結賬程式. 定義菜品類,屬性為名稱,價格,數量. 集合中新增若干菜品物件. 遍歷集合,打印出集合中所有菜品名稱消費總金額.

答案:

public class Test1 {

public static void main(String[] args) {

ArrayList<Cai> al = new ArrayList<>();

Cai cai = new Cai("烤羊腿", 58, 4);

Cai cai2 = new Cai("皮蛋豆腐", 8, 1);

Cai cai3 = new Cai("烤板筋", 2, 10);

Cai cai4 = new Cai("可樂", 8, 1);

al.add(cai);

al.add(cai2);

al.add(cai3);

al.add(cai4);

System.out.println(al);

double total   =  0 ;

// 遍歷 集合

for (Cai c  : al) {

// 列印

String name = c.getName();

int num = c.getNum();

System.out.println("菜名 :" + name+" -- " + num +"份");

// 計算 總價

//獲取 每一個 菜的單價 .   單價 * 份數  

total += c.getPrice()*num;

}

System.out.println("總價:" +  total);

}

}

class Cai {

private String name;

private double price;

private int num = 1; // 數量,預設一份.

public Cai(String name, double price, int num) {

super();

this.name = name;

this.price = price;

this.num = num;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public double getPrice() {

return price;

}

public void setPrice(double price) {

this.price = price;

}

public int getNum() {

return num;

}

public void setNum(int num) {

this.num = num;

}

}

3.2.2 模擬 雙色 彩票機選程式.

雙色球規則 :    一共 選 7 個號.  6個紅色 , 1 藍色的

紅色球1-33中選6個,號碼不能重複. 藍色球16選1,號碼不能重複.

紅色   1- 33      

藍色   1- 16

打印出機選結果格式(前6個為紅球,最後一個為籃球,數字是隨機生成的,每次執行結果都不一樣) :

本期中獎號碼為:[7, 27, 25, 6, 4, 9, 12]

答案:

public class Test03 {

public static void main(String[] args) {

// 1.定義集合, 儲存 最終結果 .

ArrayList<Integer> result = new ArrayList<>();

// 2.開始選擇 .

Random random = new Random();

// 隨機生成 數字.

// 3.生成6個紅球並儲存到集合中

while (result.size() < 6) {

int red_ball = random.nextInt(33) + 1;

// 保證唯一

if (!result.contains(red_ball)) {

result.add(red_ball);

}

}

// 4、再生成 1個藍色 的球 ,並新增到集合中

int blue_ball = random.nextInt(16) + 1;// 藍色球

result.add(blue_ball);

// 5、列印結果

System.out.println("本期中獎號碼為:" + result);

}

}

3.2.3 編寫一個程式的模擬班級學生的成績庫, 包含多項成績,英語,數學,Java.

實現如下功能:

1.可以修改某個學生的某項分數.

2.可以列印全班同學成績

要求使用集合來完成.

public class Test2 {

public static void main(String[] args) {

ArrayList<Student> student_list = new ArrayList<>();

student_list.add(new Student("張三", 99, 90, 100));

student_list.add(new Student("李四", 89, 80, 100));

for (Student student : student_list) {

System.out.println(student);

}

Scanner scanner = new Scanner(System.in);

// 請輸入學生姓名

System.out.println("請輸入學生姓名 ");

String name = scanner.nextLine();

for (Student student : student_list) {

String n = student.getName();

if (n.equals(name)) {

// 可以繼續錄入, 修改

System.out.println("請輸入科目 ");

String kemu = scanner.nextLine();

System.out.println("請輸入分數 ");

double score = scanner.nextDouble();

// 根據不同的科目,修改不同的分數.

switch (kemu) {

case "數學":

student.setMath(score);

break;

case "英語":

student.setEnglish(score);

break;

case "java":

student.setJava(score);

break;

default:

System.out.println("查無此課, 對不起");

return ;

}

System.out.println("恭喜您, 修改成功");

System.out.println(student);

return;

}

}

System.out.println("對不起 ,查無此人");

}

}

class Student {

private double english;

private double math;

private double java;

private String name;

public Student() {

super();

}

public Student(String name, double english, double math, double java) {

super();

this.english = english;

this.math = math;

this.java = java;

this.name = name;

}

public double getEnglish() {

return english;

}

public void setEnglish(double english) {

this.english = english;

}

public double getMath() {

return math;

}

public void setMath(double math) {

this.math = math;

}

public double getJava() {

return java;

}

public void setJava(double java) {

this.java = java;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

第4章 綜合案例---隨機點名器

4.1 案例介紹與演示

隨機點名器案例,將所有人物件放置到集合中隨機點名。

4.2 案例分析

a) 案例回顧

在全班同學中隨機的打印出一名同學名字。

共三個步驟:

1.儲存全班同學名字

2.列印全班同學每一個人的名字

3.在班級總人數範圍內,隨機產生一個隨機數索引,查詢該隨機數索引所對應的同學名字

b) 重構內容分析

1:將原來的陣列容器修改為集合容器

2:將原來的人名字串修改為使用人類物件

c) 實現步驟

  • 定義Person類

   定義Person類,包含成員變數名稱、年齡、地址

  • 儲存所有同學姓名

   在main方法中ArrayList集合型別的變數並建立物件為變數賦值,再向集合中新增5個Person物件。

  • 總覽全班同學姓名

   遍歷集合,依次獲取每個Person物件,再獲取Person物件名稱列印。

  • 隨機點名

   通過隨機數類Random產生一個從0到集合長度的隨機索引。而該索引對應的Person物件的名稱屬性便是所求的隨機姓名。

/*

自定義型別 人類

屬性

姓名  String

年齡  int

性別  String

身高  double

是否熱愛java  boolean

*/

public class Person

{

//姓名

String name;

//年齡

int age;

//性別

String sex;

//身高

double height;

//是否喜歡java

boolean isLoveJava;

}

/*

隨機點名器

用集合儲存所有同學

總覽全班同學姓名

隨機點名其中一人,列印到控制檯

1.定義一個集合用來儲存所有同學

導包  

建立物件 儲存的是Person

呼叫方法

2.向集合中新增人

3.遍歷集合,依次獲取每個人,列印每個人的名字

4.隨機點名

生成一個最大不超過集合最大索引的隨機數   0 - 集合最大索引的一個隨機數

依據隨機數得到集合中相對應的人,列印其名字

*/

//匯入集合ArrayList

import java.util.ArrayList;

//匯入Random

import java.util.Random;

public class RandomName

{

public static void main(String[] args)

{

//定義一個集合用來儲存所有人

ArrayList<Person> list = new ArrayList<Person>();

//向集合中新增人  建立Person物件 將Person新增到集合中

Person p = new Person();

p.name = "柳巖";

Person p2 = new Person();

p2.name = "唐嫣";

Person p3 = new Person();

p3.name = "金蓮";

list.add(p);

list.add(p2);

list.add(p3);

System.out.println("-----------------------");

//遍歷集合,依次獲取每個人,列印每個人的名字

for(int i = 0 ;i < list.size();i++){

Person thisP = list.get(i);

System.out.println(thisP.name);

}

System.out.println("-----------------------");

//隨機點名

Random r = new Random();

//生成一個最大不超過集合最大索引的隨機數   0 - 集合最大索引的一個機數

int randomIndex = r.nextInt(list.size());

//依據隨機數得到集合中相對應的人

Person person = list.get(randomIndex);

System.out.println("今天你答題:"+person.name);

}

}

相關推薦

定義資料型別&ArrayList集合教程

第七天 自定義資料型別&ArrayList集合【悟空教程】 第07天 自定義資料型別、Arraylist集合 第1章 自定義資料型別 1.1 自定義資料型別概述 任何程式語言都需要將現實生活中的事物抽象成程式碼。這時可以使用自定義的資料型別(類)來描述(對

Java小白-5定義資料型別&ArrayList集合

1.類 1.格式: 建立檔案,與類名相同 public class 類名{   資料型別 屬性名稱1;   資料型別 屬性名稱2; } 如 class Person { String name; int age; } 2.使用格式: 導包

Delphi 之 四講 定義資料型別

  為什麼要使用自定義資料型別呢?原因很簡單,在現實生活中,比如一個學生他有姓名,學號,年齡,身高,出生年月,而在上一講中,我們提到的資料型別無法滿足現實生活需求,這個時候,自定義資料型別該派上用場了,我們可以定一個學生型別。從而達到我們的需求了。自定義資料型別又可以分為子界型別,陣列型別,記錄型別

第二 變數&資料型別&運算子教程

第二天 變數&資料型別&運算子【悟空教程】 第02天 Java基礎 第1章 變數 1.1 變數 1.1.1 變數概念 變數是用來儲存數值的記憶體區域 1.1.2 作用 變數用來記錄數值。使用變數進行代數計算,則該變數中數值可以隨著程式

十一 面向物件-介面&多型教程

第11天 面向物件 第1章 介面 1.1 介面概念 1.1.1 介面概念 介面是功能的集合,同樣可看做是一種資料型別,是比抽象類更為抽象的”類”。 介面只描述所應該具備的方法,並沒有具體實現,具體的實現由介面的實現類(相當於介面的子類)來完成。這樣將

面向物件-繼承&抽象類教程

第十天 面向物件-繼承&抽象類【悟空教程】 第10天 面向物件 第1章 繼承 1.1 繼承概念 1.1.1 繼承概述 繼承是面向物件的核心特性,是面向物件的學習重點。同時繼承是程式碼複用的重要方式,可以表示類與類之間的關係,是所有面向物件語言不可缺少的組

十八 -- MapReduce定義資料型別

第十八天 – MapReduce自定義資料型別 一、多檔案輸出 import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Confi

手機影音 定義播放器頁面的實現(按鈕暫時未監聽)

手機影音第六天 自定義播放器布局以及橫豎屏切換播放器時的問題解決 目前進度的項目源代碼托管在裏碼雲上,地址如下: https://git.oschina.net/joy_yuan/MobilePlayer 感興趣的可以去下載看看,多多支持

javaSE_day8_構造方法_super關鍵字_final關鍵字_static關鍵字_內部類_訪問許可權和修飾符_程式碼塊_定義資料型別

1.構造方法 作用:用來給類的成員進行初始化操作 定義格式:許可權  方法名(引數列表){ ... } //注意:方法的名字必須和類名完全一致,構造方法不允許寫返回值型別,void也不能寫 構造方法在什麼時候執行呢:在new物件的時候,自動執行,且

WPF--繫結定義資料型別

WPF作為資料繫結的目標: 使用DataContext屬性,表示當前控制元件中的每個元素都繫結此資料: 資料型別定義: public class FamilyData { private string m_familyName; private string m_widt

C++ protobuf 定義資料型別的賦值

對於C++ protobuf 自定義資料型別的賦值,有兩種方式 set_allocate_XXX mutable_XXX 舉例說明 message SAT_JSON_CONFIG { required int32 AxisYMax = 1; required i

SpringMVC 配置 定義資料型別轉換

import org.springframework.core.convert.converter.Converter; public class StringToDouble implements Converter<String, Double>{ @O

C語言typedef(定義資料型別)與#define(巨集定義)用法比較

  不管是在C語言還是在C++中,typedef這個詞都不少見,當然出現頻率較高的還是在C程式碼中。typedef和#define有些相似,但更多的是不同,特別是在一些複雜的用法上,就完全不同了。      1.巨集定義(#define)      巨集定義又稱為巨集代換

Hadoop MapReduce定義資料型別

一 自定義資料型別的實現 1.繼承介面Writable,實現其方法write()和readFields(), 以便該資料能被序列化後完成網路傳輸或檔案輸入/輸出; 2.如果該資料需要作為主鍵key使用,或需要比較數值大小時,則需要實現WritalbeComparable介面,實現其方法write(),re

如何在Qt中使用定義資料型別

這裡我們使用下面這個struct來做說明(這裡不管是struct還是class都一樣): struct Player {     int number; QString firstName;     QString lastN

c++--使用者定義資料型別詳細篇

結構體型別 在一個組合中包含若干個型別不同的資料項。相當於其他高階語言中的記錄。 宣告 一般形式: struct 結構名 { 資料型別 成員名 1; 資料型別 成員名 2; : 資料型別 成員名 n; }; 結構體型別名作為結構體型別的標誌。 宣告一個結構體

Mapreduce定義資料型別

Hadoop自帶的資料型別: Intwritable,LongWritable,Text,xxWritable. 某些情況下:使用自定義的資料型別方便一些(類似java中的pojo)。 實現: 實現writableComparable介面即可。 場景例如: 成

9定義內容提供者

第9天自定義內容提供者 自定義內容提供者 一.什麼是自定義內容提供者 二.思路: 三.提供者程式碼:建立my_contentprovider moudle 四.內容索要方程式碼 自定義內容提供者 一.

環形佇列——使用者對使用者定義資料型別的相關操作

#ifndef CUSTOMER_H #define CUSTOMER_H #include using namespace std; class Customer { public: Customer(string name="",int age=0); void p

SQL Server——保證資料的完整性(使用者定義資料型別、使用規則、解除和刪除規則)

目錄   一、使用者自定義資料型別 二、使用規則 規則和CHECK約束的比較: 三、解除和刪除規則 一、使用者自定義資料型別 使用者自己設計並實現的資料型別就是使用者自定義資料型別。舉例:當幾個表中要存同種資料型別時,並且保證他們有相同的資料型別、長度和