第07天 自定义数据类型、Arraylist集合
任何编程语言都需要将现实生活中的事物抽象成代码。这时可以使用自定义的数据类型(类)来描述(映射)现实事物。
类就是数据类型,与之前学习的所有引用数据类型相同,自定义类也是一种数据类型。只是自定义类型并非Java为我们预先提供好的类型,而是我们自己定义的一种引用数据类型用来描述一个事物。
代码映射现实事物的过程就是定义类的过程。每个成员变量与要描述的事物属性变量名对应,数据类型对应。
这时,我们便可以将一个事物的多个属性值组织成一个完整的事物作为操作单位。
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
我们可以将现实生活中的任何事物抽象成一个类,请自定义并使用一种数据类型。如人类、动物类、汽车类、衣服类、玩具类等。
/*
自定义类型 人类
属性
姓名 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);
}
}
我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储。
而要想存储多个对象,就不能是一个基本的变量,而应该是一个容器类型的变量,在我们目前所学过的知识里面,有哪些是容器类型的呢?数组和StringBuilder(后面API讲)。
但是呢? StringBuilder的结果是一个字符串,不一定满足我们的要求,所以我们只能选择数组,这就是对象数组。
而对象数组又不能适应变化的需求,因为数组的长度是固定的,这个时候,为了适应变化的需求,Java就提供了集合类供我们使用,由此可见集合的长度是可变的。
创建一个学生数组,存储三个学生对象并遍历
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());
}
}
}
对象数组的内存图
虽然在Java中数组是运算速度最快的容器,但是在实际开发过程中,使用最频繁的数据容器并不是数组,而是ArrayList集合。
ArrayList是Java集合框架体系(Java Collections Framework)中的一员,完整的集合体系会在后边的集合章节中重点介绍。这里介绍必要知识:
ArrayList与数组类似,均将元素从0开始编号,但是它比数组更方便,长度可变就是方便处之一,并且集合与数组访问数据的方式也不同,集合可以调用功能强大的方法来满足不同需求。
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("我是一个方法");
}
}
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 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);
}
}
即依次获取集合中每一个元素,并打印
/*
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);
}
}
/*
集合存储自定义类型 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);
}
}
/*
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);
}
}
/*
集合存储自定义类型 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);
}
}
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);
}
}
}
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);
}
}
}
}
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));
}
}
}
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;
}
}
姓名:
性别:
年龄:
身份证号:
身高(米):
体重(公斤):
定义类: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+"; ");
}
}
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);
}
}
}
}
成员属(私有):
名称:
性别:
年龄:
构造方法:
无参:
全参:
成员方法:
get/set方法
1) 实例化一个只存储Dog对象的ArryayList集合;
2) 向集合中添加三个Dog对象:
“金毛”, ’公’, 2
“哈士奇”, ’公’, 1
“藏獒”, ‘母’, 3
3) 再次向集合中添加一个Dog对象
“哈士奇”, ‘公’, 1
4) 遍历集合,打印每个Dog对象,观察是否存储了两个”相同的对象”;
5) 如果希望不存储”相同的对象”,应该怎么做?
答案:
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;} } |
---|
双色球规则 : 一共 选 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);}} |
---|
实现如下功能:
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;}} |
---|
随机点名器案例,将所有人对象放置到集合中随机点名。
a) 案例回顾
在全班同学中随机的打印出一名同学名字。
共三个步骤:
1.存储全班同学名字
2.打印全班同学每一个人的名字
3.在班级总人数范围内,随机产生一个随机数索引,查找该随机数索引所对应的同学名字
b) 重构内容分析
1:将原来的数组容器修改为集合容器
2:将原来的人名字符串修改为使用人类对象
c) 实现步骤
定义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);
}
}