全站资源开放下载,感谢广大网友的支持
链接失效请移步职涯宝平台的学习路线|资源下载分类
支持用户留言评论_客服实时在线_问题解决更快
非盈利平台

非盈利平台

只为分享一些优质内容

Java帮帮-微信公众号

Java帮帮-微信公众号

将分享做到极致

微信小程序

微信小程序

更方便的阅读

百度小程序

百度小程序

搜索便捷阅读

支付宝小程序

支付宝小程序

支付也能阅读

程序员生活志-公众号

程序员生活志-公众号

程序员生活学习圈,互联网八卦黑料

支付宝赞助-Java帮帮社区
微信赞助-Java帮帮社区

第七天 自定义数据类型&ArrayList集合【悟空教程】

166
发表时间:2018-08-18 17:52

第七天 自定义数据类型&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 元素类型 setint 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(null, null, 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(null, null, 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);

}

}


Java帮帮学习群生态

Java帮帮学习群生态

总有一款能帮到你

Java学习群

Java学习群

与大牛一起交流

大数据学习群

大数据学习群

在数据中成长

九点编程学习群

九点编程学习群

深夜九点学编程

python学习群

python学习群

人工智能,爬虫

测试学习群

测试学习群

感受测试的魅力

Java帮帮生态承诺

Java帮帮生态承诺

一直坚守,不负重望

初心
勤俭
诚信
正义
分享
友链交换:加帮主QQ2524138991 留言即可 24小时内答复  
满吉教育资讯
会员登录
获取验证码
登录
登录
我的资料
留言
回到顶部