第七天 自定义数据类型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(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帮帮(javahelp)

原文发表时间:2018-05-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏微信公众号:Java团长

Java HashMap 源码解析

继上一篇文章Java集合框架综述后,今天正式开始分析具体集合类的代码,首先以既熟悉又陌生的HashMap开始。

642
来自专栏老马说编程

(62) 神奇的序列化 / 计算机程序的思维逻辑

在前面几节,我们在将对象保存到文件时,使用的是DataOutputStream,从文件读入对象时,使用的是DataInputStream, 使用它们,需要逐个处...

1796
来自专栏Linyb极客之路

简洁又快速地处理集合——Java8 Stream(下)

而 parallelStream() 是并行流方法,能够让数据集执行并行操作,后面会更详细地讲解

1.2K3
来自专栏专注 Java 基础分享

JAVA 注解的基本原理

以前,『XML』是各大框架的青睐者,它以松耦合的方式完成了框架中几乎所有的配置,但是随着项目越来越庞大,『XML』的内容也越来越复杂,维护成本变高。

643
来自专栏Java帮帮-微信公众号-技术文章全总结

【选择题】Java基础测试七

【选择题】Java基础测试七 86.欲构造ArrayList类的一个实例,此类继承了List接口,下列哪个方法是正确的?( B ) A、ArrayList m...

4453
来自专栏云霄雨霁

Java--集合类之Collection与Map

2058
来自专栏分享达人秀

经常被问到的有深度有内涵的数据结构面试题

数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。Java提供了几个能有效地组织和操作数据的数据结构,这些数据结构...

1809
来自专栏前端学习心得

JavaScript常见的继承方式

JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一。那么在JS中常见的继承方式有几种呢?

722
来自专栏无题

谈谈Java中equals和==的区别和使用场景

讨论一下Java中equals和==的区别,这个问题看似浅显,还是有不少情况需要注意。阅览了网上一些文章,都比较片面。在此做一下详细的整理。 先直接上结论::...

3285
来自专栏Java帮帮-微信公众号-技术文章全总结

Java集合详解【面试+工作】

在说集合前我们不得不说一下数组 数组的作用: 存放一组相同的数据类型(基本或对象)的数据,从而实现对数据的管理 优势:可以快速的通过下标对数组元素进行访问,效率...

4016

扫码关注云+社区