1、角色类:
package com.app.demo14_Object_oriented_cases01;
import java.util.Random;
/*
定义角色类
*/
public class Role {
/*
1、定义角色的属性:
姓名、血量
*/
private String name;
private int blood;
/*
2、提供有参和无参构造器
*/
public Role() {
}
public Role(String name, int blood) {
this.name = name;
this.blood = blood;
}
/*
3、提供全套的getXXX和setXXX方法,暴露其角色属性的取值和赋值
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getBlood() {
return blood;
}
public void setBlood(int blood) {
this.blood = blood;
}
/**
* 4、定义角色的攻击行为
* 思考:谁攻击谁?
* 角色1:Role r1 = new Role();
* 角色2:Role r2 = new Role();
* 攻击:r1.攻击(r2);
*
* @param role 被攻击的角色对象
*/
public void attack(Role role) {
// a.随机一个攻击伤害: 比如角色的一次攻击伤害范围是 1~20
Random rd = new Random();
int hurt = rd.nextInt(20) + 1;
// b.计算被攻击后的对方的剩余血量
int remainingBlood = role.getBlood() - hurt;
// c.判断对方的剩余血量:
// 如果对方的剩余血量 小于 攻击伤害 时,此时剩余血量会变成负数,因此将剩余血量修改为0
// 如果对方的剩余血量 大于 攻击伤害 时,剩余血量就不需要修改
remainingBlood = remainingBlood < 0 ? 0 : remainingBlood;
// d.修改对方的血量为计算后的剩余血量
// 对方角色对象.setBlood(剩余的血量);
role.setBlood(remainingBlood);
// e.显示对战信息
// 举例:乔峰用飞踢踢中了鸠摩智,造成了XX点伤害,鸠摩智还剩下XXX点血量
// this: 表示自己
System.out.println(this.getName() + "用飞踢踢中了" + role.getName()
+ ",造成了" + hurt + "点伤害,"
+ role.getName() + "还剩下" + remainingBlood + "点血量~");
}
}
2、游戏测试类:
package com.app.demo14_Object_oriented_cases01;
/*
定义游戏测试类
*/
public class GameTest {
public static void main(String[] args) {
// 1、创建两个游戏角色
Role r1 = new Role("张飞", 100);
Role r2 = new Role("刘备", 100);
// 2、使用死循环让两个角色进行回合制战斗
System.out.println("---------------" + r1.getName() + " VS " + r2.getName() + "---------------");
while (true) {
// 角色1 开始攻击 角色2
r1.attack(r2);
// 如果角色2血量为0时,说明角色2被角色1 K.O.了
if (r2.getBlood() == 0) {
System.out.println(r1.getName() + "K.O.了" + r2.getName());
// 角色2被角色1KO了,游戏结束,跳出死循环
break;
}
// 角色2 反击 角色2
r2.attack(r1);
// 如果角色1血量为0时,说明角色1被角色2 K.O.了
if (r1.getBlood() == 0) {
System.out.println(r2.getName() + "K.O.了" + r1.getName());
// 角色1被角色2KO了,游戏结束,跳出死循环
break;
}
}
}
}
3、测试结果:
---------------张飞 VS 刘备---------------
张飞用飞踢踢中了刘备,造成了13点伤害,刘备还剩下87点血量~
刘备用飞踢踢中了张飞,造成了3点伤害,张飞还剩下97点血量~
张飞用飞踢踢中了刘备,造成了16点伤害,刘备还剩下71点血量~
刘备用飞踢踢中了张飞,造成了3点伤害,张飞还剩下94点血量~
张飞用飞踢踢中了刘备,造成了4点伤害,刘备还剩下67点血量~
刘备用飞踢踢中了张飞,造成了12点伤害,张飞还剩下82点血量~
张飞用飞踢踢中了刘备,造成了20点伤害,刘备还剩下47点血量~
刘备用飞踢踢中了张飞,造成了6点伤害,张飞还剩下76点血量~
张飞用飞踢踢中了刘备,造成了1点伤害,刘备还剩下46点血量~
刘备用飞踢踢中了张飞,造成了4点伤害,张飞还剩下72点血量~
张飞用飞踢踢中了刘备,造成了12点伤害,刘备还剩下34点血量~
刘备用飞踢踢中了张飞,造成了19点伤害,张飞还剩下53点血量~
张飞用飞踢踢中了刘备,造成了19点伤害,刘备还剩下15点血量~
刘备用飞踢踢中了张飞,造成了12点伤害,张飞还剩下41点血量~
张飞用飞踢踢中了刘备,造成了6点伤害,刘备还剩下9点血量~
刘备用飞踢踢中了张飞,造成了2点伤害,张飞还剩下39点血量~
张飞用飞踢踢中了刘备,造成了6点伤害,刘备还剩下3点血量~
刘备用飞踢踢中了张飞,造成了3点伤害,张飞还剩下36点血量~
张飞用飞踢踢中了刘备,造成了18点伤害,刘备还剩下0点血量~
张飞K.O.了刘备
Process finished with exit code 0
给角色加两个属性:性别、长相(随机的)
加四个个数组:
角色类
package com.app.demo14_Object_oriented_cases01_Plus;
import java.util.Random;
public class Role {
// 角色属性:姓名、血量、性别、颜值
private String name;
private int blood;
private char gender;
private String faceScore;
// 四个数组:女性颜值数组、男性颜值数组、功夫招式数组、受伤描述数组
String[] girlFaceScoreArr = {"美艳绝伦", "沉鱼落雁", "亭亭玉立", "身材姣好", "相貌平平", "相貌简陋", "惨不忍睹"};
String[] boyFaceScoreArr = {"风刘俊雅", "气宇轩昂", "相貌英俊", "五官端正", "相貌平平", "一塌糊涂", "面目狰狞"};
String[] kungFuArr = {
"%s使出了一招 [降龙十八掌],打向%s。",
"%s使出了一招 [黑虎掏心],飞身自半空中变掌为爪锁向%s。",
"%s大喝一声,身形下伏,一招 [猴子偷桃],抓向了%s。",
"%s运气于掌,一瞬间掌心变得血红,一招 [掌心雷],推向%s。",
"%s阴手翻起阳手跟进,一招 [没遮拦],结结实实的锤向%s。"
};
String[] injuryDescribeArr = {
"结果%s退了半步,毫发无伤!",
"结果给%s造成了一处淤伤!",
"结果一击命中,%s痛得弯下了腰!",
"结果%s脸色一下变得惨白,连退了好几步!",
"结果 [轰] 的一声,%s口中鲜血狂喷而出!",
"结果%s一声惨叫,像摊烂泥一样塌了下去!"
};
// 有参、无参构造器
public Role() {
}
public Role(String name, int blood, char gender) {
this.name = name;
this.blood = blood;
this.gender = gender;
// 根据角色性别随机设定长相颜值
setFaceScore(gender);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getBlood() {
return blood;
}
public void setBlood(int blood) {
this.blood = blood;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public String getFaceScore() {
return faceScore;
}
/**
* 根据角色的性别设定随机的长相颜值
*
* @param gender 角色性别
*/
public void setFaceScore(char gender) {
Random rd = new Random();
if (gender == '男') {
int index = rd.nextInt(boyFaceScoreArr.length);
this.faceScore = boyFaceScoreArr[index];
} else if (gender == '女') {
int index = rd.nextInt(girlFaceScoreArr.length);
this.faceScore = girlFaceScoreArr[index];
} else {
// 默认值
this.faceScore = "惨不忍睹";
}
}
/**
* 定义角色的攻击行为
*
* @param role
*/
public void attack(Role role) {
// 给角色随机一个功夫招式
Random rd = new Random();
int index = rd.nextInt(kungFuArr.length);
String kungFu = kungFuArr[index];
// 显示一个角色攻击对方的效果
// 例如:
// "%s使出了一招 [降龙十八掌],打向%s。"
// "张三使出了一招 [降龙十八掌],打向李四。"
// 参数一(%s):我方;参数二(%s):对方
System.out.printf(kungFu, this.getName(), role.getName());
// System.out.printf:是不带换行的,因此攻击完,打印一个换行
System.out.println();
// 给角色随机一个伤害值: 1~30
int hurt = rd.nextInt(30) + 1;
// 计算对方剩余的血量
int remainBlood = role.getBlood() - hurt;
/*
如果对方剩余的血量 小于 攻击伤害值,此时,对方的剩余血量为负数,将剩余的血量值修改为0
如果对方剩余的血量 大于 攻击伤害值,此时,对方的剩余血量不需要修改
*/
remainBlood = remainBlood < 0 ? 0 : remainBlood;
// 每攻击完对方一次,更新对方的剩余血量
role.setBlood(remainBlood);
// 根据对方的剩余血量来显示受伤描述
/*
80~100的剩余血量,0索引的描述
70~80的剩余血量,1索引的描述
50~70的剩余血量,2索引的描述
30~50的剩余血量,3索引的描述
1~30的剩余血量,4索引的描述
0的剩余血量,5索引的描述
*/
if (remainBlood > 80 && remainBlood < 100) {
System.out.printf(injuryDescribeArr[0], role.getName());
System.out.print(this.getName() + "打出了" + hurt + "点伤害," + role.getName() + "剩余" + remainBlood + "点血量~");
} else if (remainBlood > 70 && remainBlood <= 80) {
System.out.printf(injuryDescribeArr[1], role.getName());
System.out.print(this.getName() + "打出了" + hurt + "点伤害," + role.getName() + "剩余" + remainBlood + "点血量~");
} else if (remainBlood > 50 && remainBlood <= 70) {
System.out.printf(injuryDescribeArr[2], role.getName());
System.out.print(this.getName() + "打出了" + hurt + "点伤害," + role.getName() + "剩余" + remainBlood + "点血量~");
} else if (remainBlood > 30 && remainBlood <= 50) {
System.out.printf(injuryDescribeArr[3], role.getName());
System.out.print(this.getName() + "打出了" + hurt + "点伤害," + role.getName() + "剩余" + remainBlood + "点血量~");
} else if (remainBlood > 1 && remainBlood <= 30) {
System.out.printf(injuryDescribeArr[4], role.getName());
System.out.print(this.getName() + "打出了" + hurt + "点伤害," + role.getName() + "剩余" + remainBlood + "点血量~");
} else if (remainBlood == 0) {
System.out.printf(injuryDescribeArr[5], role.getName());
System.out.print(this.getName() + "打出了" + hurt + "点伤害," + role.getName() + "剩余" + remainBlood + "点血量~");
}
// 每显示一次受伤描述后,因为System.out.printf()无法换行,因此一个打印换行
System.out.println();
}
}
测试类
package com.app.demo14_Object_oriented_cases01_Plus;
import java.util.Scanner;
public class GameTest {
public static void main(String[] args) {
// 1、创建角色
System.out.println("---------------请选择我方英雄---------------");
Role r1 = createRole();
System.out.println("---------------请选择敌方英雄---------------");
Role r2 = createRole();
// 2、查看创建好的角色信息
System.out.println("我方英雄信息:");
queryRoleInfo(r1);
System.out.println("敌方英雄信息:");
queryRoleInfo(r2);
// 3、我方 VS 敌方英雄
myRoleVSHeRole(r1, r2);
}
/**
* 英雄对战
* @param myRole 我方英雄
* @param heRole 敌方英雄
*/
public static void myRoleVSHeRole(Role myRole, Role heRole) {
int count = 0; // 记录回合数
System.out.println("----------------对战中----------------");
while (true) { // 回合制
System.out.println("第" + (count + 1) + "回合:");
// 我方 先攻击 敌方
myRole.attack(heRole);
// 判断敌方血量是否为0
if (heRole.getBlood() == 0) {
System.out.println(myRole.getName() + "K.O.了" + heRole.getName());
break;
}
// 敌方 反击 我方
heRole.attack(myRole);
count++;
// 判断我方血量是否为0
if (myRole.getBlood() == 0) {
System.out.println(heRole.getName() + "K.O.了" + myRole.getName());
break;
}
// 每打完一个回合,打印换行
System.out.println();
}
}
/**
* 查看角色信息
*
* @param role 角色对象
*/
public static void queryRoleInfo(Role role) {
System.out.println("姓名:" + role.getName()
+ "\n血量:" + role.getBlood()
+ "\n性别:" + role.getGender()
+ "\n长相:" + role.getFaceScore()
);
System.out.println();
}
/**
* 用户创建游戏角色
*
* @return 返回创建好的游戏角色
*/
public static Role createRole() {
// 创建键盘录入对象,用于从键盘录入英雄信息
Scanner sc = new Scanner(System.in);
// 创建一个空角色对象变量,用于接收英雄信息,封装成一个对象
Role role;
System.out.println("请输入角色姓名:");
String name = sc.nextLine();
while (true) {
System.out.println("请输入角色性别(男/女):");
String genders = sc.nextLine();
if (genders.equals("男")) {
char gender = genders.charAt(0);
role = new Role(name, 100, gender);
break;
} else if (genders.equals("女")) {
char gender = genders.charAt(0);
role = new Role(name, 100, gender);
break;
} else {
System.out.println("您输入的性别有误!请重新输入~");
}
}
// 创建完一个角色,打印换行
System.out.println();
// 角色创建完毕,返回创建好的角色对象
return role;
}
}
测试结果
---------------请选择我方英雄---------------
请输入角色姓名:
乔峰
请输入角色性别(男/女):
那地方
您输入的性别有误!请重新输入~
请输入角色性别(男/女):
dfd
您输入的性别有误!请重新输入~
请输入角色性别(男/女):
分
您输入的性别有误!请重新输入~
请输入角色性别(男/女):
男
---------------请选择敌方英雄---------------
请输入角色姓名:
鸠摩智
请输入角色性别(男/女):
男
我方英雄信息:
姓名:乔峰
血量:100
性别:男
长相:五官端正
敌方英雄信息:
姓名:鸠摩智
血量:100
性别:男
长相:相貌平平
----------------对战中----------------
第1回合:
乔峰使出了一招 [降龙十八掌],打向鸠摩智。
结果给鸠摩智造成了一处淤伤!乔峰打出了20点伤害,鸠摩智剩余80点血量~
鸠摩智运气于掌,一瞬间掌心变得血红,一招 [掌心雷],推向乔峰。
结果乔峰退了半步,毫发无伤!鸠摩智打出了7点伤害,乔峰剩余93点血量~
第2回合:
乔峰使出了一招 [降龙十八掌],打向鸠摩智。
结果一击命中,鸠摩智痛得弯下了腰!乔峰打出了18点伤害,鸠摩智剩余62点血量~
鸠摩智运气于掌,一瞬间掌心变得血红,一招 [掌心雷],推向乔峰。
结果一击命中,乔峰痛得弯下了腰!鸠摩智打出了26点伤害,乔峰剩余67点血量~
第3回合:
乔峰阴手翻起阳手跟进,一招 [没遮拦],结结实实的锤向鸠摩智。
结果鸠摩智脸色一下变得惨白,连退了好几步!乔峰打出了16点伤害,鸠摩智剩余46点血量~
鸠摩智运气于掌,一瞬间掌心变得血红,一招 [掌心雷],推向乔峰。
结果乔峰脸色一下变得惨白,连退了好几步!鸠摩智打出了18点伤害,乔峰剩余49点血量~
第4回合:
乔峰使出了一招 [降龙十八掌],打向鸠摩智。
结果鸠摩智脸色一下变得惨白,连退了好几步!乔峰打出了12点伤害,鸠摩智剩余34点血量~
鸠摩智大喝一声,身形下伏,一招 [猴子偷桃],抓向了乔峰。
结果乔峰脸色一下变得惨白,连退了好几步!鸠摩智打出了14点伤害,乔峰剩余35点血量~
第5回合:
乔峰阴手翻起阳手跟进,一招 [没遮拦],结结实实的锤向鸠摩智。
结果 [轰] 的一声,鸠摩智口中鲜血狂喷而出!乔峰打出了23点伤害,鸠摩智剩余11点血量~
鸠摩智使出了一招 [黑虎掏心],飞身自半空中变掌为爪锁向乔峰。
结果 [轰] 的一声,乔峰口中鲜血狂喷而出!鸠摩智打出了10点伤害,乔峰剩余25点血量~
第6回合:
乔峰使出了一招 [降龙十八掌],打向鸠摩智。
结果鸠摩智一声惨叫,像摊烂泥一样塌了下去!乔峰打出了22点伤害,鸠摩智剩余0点血量~
乔峰K.O.了鸠摩智
Process finished with exit code 0
需求:
分析:
实现:
商品类
package com.app.demo16_object_array1;
/*
商品类
*/
public class Commodity {
// 商品属性:id、名字、价格、库存
private String id;
private String commodityName;
private double price;
private int inventory;
// 无参构造器
public Commodity() {
}
// 有参构造器
public Commodity(String id, String commodityName, double price, int inventory) {
this.id = id;
this.commodityName = commodityName;
this.price = price;
this.inventory = inventory;
}
/*
生成全套的getXXX和setXXX方法,暴露其对象属性的取值和赋值
*/
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCommodityName() {
return commodityName;
}
public void setCommodityName(String commodityName) {
this.commodityName = commodityName;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getInventory() {
return inventory;
}
public void setInventory(int inventory) {
this.inventory = inventory;
}
}
测试类
package com.app.demo16_object_array1;
/*
面向对象综合训练:对象数组练习1
需求:
定义数组存储3个商品对象。
商品的属性:商品的id、名字、价格、库存
创建三个商品对象,并把商品对象存入到数组当中。
*/
public class ObjectArrayDemo1 {
public static void main(String[] args) {
// 1、定义长度为3的对象数组,用于存储3个商品对象
Commodity[] commodities = new Commodity[3];
// 2、创建3个商品对象,存入对象数组中
commodities[0] = new Commodity("001", "宇智波鼬手办", 1000, 30);
commodities[1] = new Commodity("002", "华为nova7", 2350.5, 200);
commodities[2] = new Commodity("003", "机械键盘", 399.9, 3);
// 3、遍历对象数组,查看商品信息
System.out.println("所有商品信息:");
for (Commodity commodity : commodities) {
System.out.println("编号: " + commodity.getId() +
", 商品名称: " + commodity.getCommodityName() +
", 商品价格: " + commodity.getPrice() +
", 库存数量: " + commodity.getInventory());
}
}
}
测试结果:
所有商品信息:
编号: 001, 商品名称: 宇智波鼬手办, 商品价格: 1000.0, 库存数量: 30
编号: 002, 商品名称: 华为nova7, 商品价格: 2350.5, 库存数量: 200
编号: 003, 商品名称: 机械键盘, 商品价格: 399.9, 库存数量: 3
Process finished with exit code 0
需求:
分析:
实现:
汽车类
package com.app.demo17_object_array2;
/*
汽车类
*/
public class Car {
// 汽车的属性:品牌、价格、颜色
private String brand;
private double price;
private String colour;
/*
有参、无参构造器
*/
public Car() {
}
public Car(String brand, double price, String colour) {
this.brand = brand;
this.price = price;
this.colour = colour;
}
/*
生成全套的get和set方法,暴露其对象属性的取值和赋值
*/
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getColour() {
return colour;
}
public void setColour(String colour) {
this.colour = colour;
}
}
测试类
package com.app.demo17_object_array2;
import java.util.Scanner;
/*
面向对象综合训练:对象数组2
需求:
定义数组存储3部汽车对象。
汽车的属性:品牌、价格、颜色。
创建3个汽车对象,数据通过键盘录入之后将其存入数组当中。
*/
public class CarTest {
public static void main(String[] args) {
// 键盘录入汽车信息,参数length: 数组的长度,表示可以存储多少部汽车对象
Car[] cars = createCars(3);
// 查看所有汽车的信息
System.out.println("\n所有汽车信息如下:");
showCars(cars);
}
/**
* 查看所有汽车的信息
*
* @param cars 接收一个汽车对象数组
*/
public static void showCars(Car[] cars) {
// 循环遍历汽车对象数组,查看所有汽车的信息
for (Car car : cars) {
System.out.println("汽车品牌:" + car.getBrand() +
", 汽车价格:" + car.getPrice() + "万元" +
", 汽车颜色:" + car.getColour());
}
}
/**
* 创建汽车对象存入对象数组
*
* @param length 接收一个对象数组的长度:表示可以存储多少部汽车对象
* @return 将存储有汽车对象的对象数组返回给调用处
*/
public static Car[] createCars(int length) {
// 1、定义对象数组,长度为length,用于存储length部汽车对象
Car[] cars = new Car[length];
// 2、创建键盘录入对象,用于从键盘录入汽车的信息
Scanner sc = new Scanner(System.in);
// 3、遍历数组,依次得到数组的每个元素索引位置
for (int i = 0; i < cars.length; i++) {
// i: 依次表示数组的索引位置
// cars[i]: 依次表示数组的每个元素
// a: 每循环一次,创建一个汽车对象,用于将从键盘录入的汽车信息封装成一个汽车对象
Car car = new Car();
// b: 开始录入汽车的信息
System.out.println("--------录入第" + (i + 1) + "部汽车的信息--------");
System.out.println("请您录入汽车的品牌:");
String brand = sc.next();
System.out.println("请您录入汽车的价格(万元):");
double price = sc.nextDouble();
System.out.println("请您录入汽车的颜色:");
String colour = sc.next();
// c: 封装汽车的信息成一个汽车对象
car.setBrand(brand);
car.setPrice(price);
car.setColour(colour);
// d: 将封装好的汽车对象,存入对象数组中
cars[i] = car;
}
// 5、存储工作完成,返回满载而归的对象数组
return cars;
}
}
测试结果:
--------录入第1部汽车的信息--------
请您录入汽车的品牌:
劳斯莱斯
请您录入汽车的价格(万元):
1900
请您录入汽车的颜色:
黑白
--------录入第2部汽车的信息--------
请您录入汽车的品牌:
宝马
请您录入汽车的价格(万元):
400
请您录入汽车的颜色:
蓝白
--------录入第3部汽车的信息--------
请您录入汽车的品牌:
梅赛德斯
请您录入汽车的价格(万元):
450.5
请您录入汽车的颜色:
七彩色
所有汽车信息如下:
汽车品牌:劳斯莱斯, 汽车价格:1900.0万元, 汽车颜色:黑白
汽车品牌:宝马, 汽车价格:400.0万元, 汽车颜色:蓝白
汽车品牌:梅赛德斯, 汽车价格:450.5万元, 汽车颜色:七彩色
Process finished with exit code 0
需求:
分析:
实现:
手机类
package com.app.demo18_object_array3;
/*
手机类
*/
public class MobilePhone {
/*
定义手机的属性:品牌、价格、颜色
*/
private String brand;
private double price;
private String colour;
/*
提供有参和无参构造器
*/
public MobilePhone() {
}
public MobilePhone(String brand, double price, String colour) {
this.brand = brand;
this.price = price;
this.colour = colour;
}
/*
提供全套的getXXX和setXXX方法,
暴露其属性的取值和赋值。
*/
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getColour() {
return colour;
}
public void setColour(String colour) {
this.colour = colour;
}
}
测试类
package com.app.demo18_object_array3;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Scanner;
/*
测试类:
面向对象综合训练:对象数组练习3
需求:
定义数组存储3部手机对象。
手机的属性:品牌、价格、颜色。
要求计算出3部手机的平均价格。
*/
public class MobilePhoneTest {
public static void main(String[] args) {
// 1、创建手机对象
MobilePhone[] mobilePhones = createMobilePhones(3);
if (mobilePhones == null) {
System.out.println("数组长度不能为0~");
} else {
// 2、查看所有手机的信息
showMobilePhones(mobilePhones);
// 3、计算出所有手机的平均价格
BigDecimal averagePrice = mobilePhonesAveragePrice(mobilePhones);
System.out.println("\n所有手机的平均价格为:" + averagePrice + "元~");
}
}
/**
* 计算所有手机的平均价格
*
* @param mobilePhones 所有手机对象的数组
* @return 返回所有手机的平均价格
*/
public static BigDecimal mobilePhonesAveragePrice(MobilePhone[] mobilePhones) {
// 1、定义数组,用于记录所有手机的价格
double[] prices = new double[mobilePhones.length];
// 2、遍历mobilePhones数组,依次得到每个手机对象
for (int i = 0; i < mobilePhones.length;) {
// mobilePhones[i]: 依次表示数组中的每个手机对象
// a.依次得到每个手机的价格,存入prices数组中
for (int j = 0; j < prices.length; j++) {
// prices[j]: 依次表示每个手机的价格
// 依次将每个手机的价格存入prices数组中
prices[j] = mobilePhones[i].getPrice();
// 每存储成功一个手机的价格,让i自增,继续得到下一个手机对象
i++;
}
}
// 3、定义变量,分别表示手机的最高价格、最低价格、总价格、平均价格
double maxPrice = prices[0];
double minPrice = prices[0];
double sumPrice = 0;
BigDecimal averagePrice;
// 4、遍历prices数组,依次得到每个手机的价格
for (int i = 0; i < prices.length; i++) {
// a.求所有手机的最高价格
if (i >= 1 && prices[i] > maxPrice) {
// 如果当前这个手机的价格 大于 首个手机的价格,
// 则maxPrice替换成当前这个手机的价格。
maxPrice = prices[i];
}
// b.求所有手机的最低价格
if (i >= 1 && prices[i] < minPrice) {
// 如果当前这个手机的价格 小于 首个手机的价格,
// 则minPrice替换成当前这个手机的价格
minPrice = prices[i];
}
// c.统计所有手机的价格,求总价格
sumPrice += prices[i];
}
// 5、循环结束,说明手机的最高、最低价格、总价格已全部求出
// 将double类型的总价格转换成BigDecimal类型
BigDecimal sum = BigDecimal.valueOf(sumPrice);
// 将double类型的最高价格转换成BigDecimal类型
BigDecimal max = BigDecimal.valueOf(maxPrice);
// 将double类型的最低价格转换成BigDecimal类型
BigDecimal min = BigDecimal.valueOf(minPrice);
// 将数组长度、2都转换成BigDecimal类型后,再做相减操作
// 以下代码等价于: prices.length - 2
BigDecimal number = BigDecimal.valueOf(prices.length).subtract(BigDecimal.valueOf(2));
/*System.out.println("总价格:" + sum);
System.out.println("最高价格:" + max);
System.out.println("最低价格:" + min);*/
// averagePrice = (sumPrice - maxPrice - minPrice) / (prices.length - 2);
/*
6、计算平均价格,四舍五入后并保留1位小数
以下代码等价于: (总价格 - 最高价格 - 最低价格) / 个数(prices.length-2)
divide(number, 2, RoundingMode.DOWN):
参数一:除数;参数二:保留多少位小数;参数三:舍入模式
*/
averagePrice = (sum.subtract(max).subtract(min)).divide(number, 1, RoundingMode.HALF_DOWN);
// 计算完成,返回所有手机的平均价格
return averagePrice;
}
/**
* 查看所有手机的信息
*
* @param mobilePhones 手机对象数组
*/
public static void showMobilePhones(MobilePhone[] mobilePhones) {
// 1、判断手机对象数组是否为null
if (mobilePhones == null) {
// 为null
System.out.println("您的手机对象数组不能为null~");
} else {
// 不为null:遍历手机对象的数组,依次得到数组中每个手机对象
System.out.println("\n所有手机信息如下:");
for (MobilePhone mobilePhone : mobilePhones) {
System.out.println("手机品牌:" + mobilePhone.getBrand() +
",手机价格:" + mobilePhone.getPrice() + "元" +
",手机颜色:" + mobilePhone.getColour());
}
}
}
/**
* 创建手机对象
*
* @param length 数组的长度:表示可以存储多少部手机对象
* @return 返回对象数组
*/
public static MobilePhone[] createMobilePhones(int length) {
// 1、数组的长度不能为0,否则返回null
if (length == 0) {
return null;
}
// 2、定义数组,用于存储手机对象,长度为length
MobilePhone[] mobilePhones = new MobilePhone[length];
// 3、创建键盘录入对象,用于录入手机信息
Scanner sc = new Scanner(System.in);
// 4、遍历数组,依次得到每个元素的索引位置
for (int i = 0; i < mobilePhones.length; i++) {
// i: 依次表示数组中每个元素的索引位置
// mobilePhones[i]: 依次表示数组中的每个元素
// a. 每循环一次,创建一个空的新手机对象,用于将录入的手机信息封装成一个手机对象
MobilePhone mobilePhone = new MobilePhone();
// b. 开始录入手机信息
System.out.println("---------录入第" + (i + 1) + "部手机的信息---------");
System.out.println("请您输入手机的品牌:");
String brand = sc.next();
mobilePhone.setBrand(brand);
System.out.println("请您输入手机的价格:");
double price = sc.nextDouble();
mobilePhone.setPrice(price);
// 选择手机的颜色
selectMobilePhone(mobilePhone, sc);
// c. 将手机信息封装成对象依次存入数组中
mobilePhones[i] = mobilePhone;
}
// 循环结束,存储工作完成,返回对象数组
return mobilePhones;
}
/**
* 选择手机的颜色
*
* @param mobilePhone 空的手机对象
* @param sc 键盘录入对象
*/
public static void selectMobilePhone(MobilePhone mobilePhone, Scanner sc) {
while (true) {
System.out.println("请您选择手机的颜色:");
System.out.println("1.深海蓝\n2.茉莉绿\n3.珍珠白\n4.靓丽粉\n5.朱砂黑");
String colour = sc.next();
switch (colour) {
case "1":
mobilePhone.setColour("深海蓝");
return;
case "2":
mobilePhone.setColour("茉莉绿");
return;
case "3":
mobilePhone.setColour("珍珠白");
return;
case "4":
mobilePhone.setColour("靓丽粉");
return;
case "5":
mobilePhone.setColour("朱砂黑");
return;
default:
System.out.println("该颜色的手机还没有开发出来哦~ 请敬请等候~");
break;
}
}
}
}
测试结果:
---------录入第1部手机的信息---------
请您输入手机的品牌:
华为nova7
请您输入手机的价格:
3999.9
请您选择手机的颜色:
1.深海蓝
2.茉莉绿
3.珍珠白
4.靓丽粉
5.朱砂黑
3
---------录入第2部手机的信息---------
请您输入手机的品牌:
iphone14_plus
请您输入手机的价格:
8999
请您选择手机的颜色:
1.深海蓝
2.茉莉绿
3.珍珠白
4.靓丽粉
5.朱砂黑
4
---------录入第3部手机的信息---------
请您输入手机的品牌:
vivo
请您输入手机的价格:
5666
请您选择手机的颜色:
1.深海蓝
2.茉莉绿
3.珍珠白
4.靓丽粉
5.朱砂黑
1
所有手机信息如下:
手机品牌:华为nova7,手机价格:3999.9元,手机颜色:珍珠白
手机品牌:iphone14_plus,手机价格:8999.0元,手机颜色:靓丽粉
手机品牌:vivo,手机价格:5666.0元,手机颜色:深海蓝
所有手机的平均价格为:5666.0元~
Process finished with exit code 0
需求:
分析:
实现:
女朋友类
package com.app.demo19_object_array4;
/*
女朋友类
*/
public class GirlFriend {
/*
定义女朋友的属性:
姓名、年龄、性别、爱好
*/
private String name;
private int age;
private char gender;
private String hobby;
/*
有参、无参构造器
*/
public GirlFriend() {
}
public GirlFriend(String name, int age, char gender, String happy) {
this.name = name;
this.age = age;
this.gender = gender;
this.hobby = happy;
}
/*
提供全套的getXXX和setXXX方法,
暴露其属性的取值和赋值
*/
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 char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
}
测试类
package com.app.demo19_object_array4;
import java.util.Scanner;
/*
面向对象综合训练:对象数组练习4
需求:
- 定义数组存储4个女朋友的对象。
- 女朋友的属性:姓名、年龄、性别、爱好。
- 要求:
- 1、计算出所有女朋友的平均年龄。
- 2、统计年龄比平均值低的女朋友有几个?并把他们的所有信息打印出来。
*/
public class GirlFriendTest {
public static void main(String[] args) {
// 1、创建一个女朋友对象的数组,用于存储多个女朋友对象
GirlFriend[] girlFriends = createGirlFriends(4);
// 2、查看所有女朋友的信息
showGirlFriends(girlFriends);
// 3、计算出所有女朋友的平均年龄
int averageAge = girlFriendsAverAgeAge(girlFriends);
System.out.println("所有女朋友的平均年龄为:" + averageAge + "岁");
// 4、统计年龄比平均年龄低的女朋友有几个?并把这些女朋友的信息打印出来
underAverAgeAgeGirlFriends(girlFriends, averageAge);
}
/**
* 统计年龄比平均年龄低的女朋友个数
*
* @param girlFriends 所有女朋友年龄的数组
* @param averageAge 所有女朋友的平均年龄
*/
public static void underAverAgeAgeGirlFriends(GirlFriend[] girlFriends, int averageAge) {
// 1、判断数组参数是否为null
if (girlFriends == null) {
// 为null
System.out.println("您的数组不能为null~");
return; // 结束方法
}
// 2、定义计数器,用于记录比平均年龄低的女朋友有多少个
int count = 0;
// 3、遍历数组,依次得到每个女朋友对象
System.out.println("\n低于平均年龄的女朋友信息如下:");
for (int i = 0; i < girlFriends.length; i++) {
// a.判断当前女朋友的年龄 是否小于 平均年龄
if (girlFriends[i].getAge() < averageAge) {
// 小于,开始计数
count++;
// 打印当前这个女朋友的信息
System.out.println("姓名:" + girlFriends[i].getName() +
",年龄:" + girlFriends[i].getAge() + "岁" +
",性别:" + girlFriends[i].getGender() +
",爱好:" + girlFriends[i].getHobby());
}
}
// 4、循环结束,低于平均年龄的女朋友统计完成,输出个数
System.out.println("\n低于平均年龄的女朋友有" + count + "个。");
}
/**
* 计算所有女朋友的平均年龄
*
* @param girlFriends 所有女朋友对象的数组
* @return 返回所有女朋友的平均年龄
*/
public static int girlFriendsAverAgeAge(GirlFriend[] girlFriends) {
// 1、判断数组是否为null
if (girlFriends == null) {
System.out.println("您的数组不能为null~");
return 0;
}
// 2、定义数组,用于存储所有女朋友的年龄
int[] ages = new int[girlFriends.length];
// 3、遍历girlFriends数组,依次得到每个女朋友对象
for (int i = 0; i < girlFriends.length; ) {
// girlFriends[i]: 依次表示每个女朋友对象
// 4、遍历ages数组,依次存入每个女朋友的年龄
for (int j = 0; j < ages.length; j++) {
// 依次存入年龄
ages[j] = girlFriends[i].getAge();
// 存入成功后,让i自增,继续得到下一个女朋友的对象
i++;
}
}
// 5、定义变量,分别表示:最高年龄、最低年龄、总年龄
int maxAge = ages[0];
int minAge = ages[0];
int sumAge = 0;
// 6、遍历ages数组,依次得到每个女朋友的年龄
for (int age : ages) {
// 求所有女朋友的最高年龄
if (age > maxAge) {
maxAge = age;
}
// 求所有女朋友的最低年龄
if (age < minAge) {
minAge = age;
}
// 求所有女朋友的总年龄
sumAge += age;
}
System.out.println("最高年龄:" + maxAge + "岁");
System.out.println("最低年龄:" + minAge + "岁");
System.out.println("总年龄:" + sumAge + "岁");
// 7、计算平均年龄后返回给调用处
return (sumAge - maxAge - minAge) / (ages.length - 2);
}
/**
* 查看所有女朋友的信息
*
* @param girlFriends 女朋友对象的数组
*/
public static void showGirlFriends(GirlFriend[] girlFriends) {
// 1、判断数组是否为null
if (girlFriends == null) {
System.out.println("您的数组不能为null~");
return;
}
// 2、遍历数组,依次得到每个女朋友对象
System.out.println("\n所有女朋友的信息如下:");
for (GirlFriend girlFriend : girlFriends) {
// 输出信息
System.out.println("姓名:" + girlFriend.getName() +
",年龄:" + girlFriend.getAge() + "岁" +
",性别:" + girlFriend.getGender() +
",爱好:" + girlFriend.getHobby());
}
}
/**
* 创建女朋友对象
*
* @param length 数组的长度:表示可以存储多少个女朋友对象
* @return 返回存储有女朋友对象的数组
*/
public static GirlFriend[] createGirlFriends(int length) {
// 1、数组的长度不能为0
if (length == 0) {
System.out.println("您的数组长度不能为0~");
return null;
}
// 2、定义数组,用于存储女朋友对象,长度为length
GirlFriend[] girlFriends = new GirlFriend[length];
// [0, 1, 2, 4]
// 3、创建键盘录入对象,用于录入女朋友的信息
Scanner sc = new Scanner(System.in);
// 4、录入女朋友的信息
// 遍历数组,依次得到每个元素的索引位置
for (int i = 0; i < girlFriends.length; i++) {
// a.创建一个空的女朋友对象,用于封装录入的女朋友信息
GirlFriend girlFriend = new GirlFriend();
System.out.println("-----开始录入第" + (i + 1) + "个女朋友的信息-----");
// 录入姓名
System.out.println("请输入女朋友的姓名:");
String name = sc.next();
girlFriend.setName(name);
// 录入年龄
try {
while (true) {
System.out.println("请输入女朋友的年龄:");
int age = sc.nextInt();
// 判断输入的年龄是否为负数 或 大于200岁
if (age < 0 || age > 200) {
// 是负数 或 大于200岁
System.out.println("您输入的年龄是非法的~ 请重新输入!");
} else if (age < 200){
// 年龄合法,录入年龄
girlFriend.setAge(age);
break;
}
}
} catch (Exception e) {
System.out.println("您输入的年龄数据有误~ 该女朋友的年龄将设为默认值:0岁");
}
// 录入性别
while (true) {
System.out.println("请输入女朋友的性别:");
String gender = sc.next();
// 判断录入的性别是否为 女
if (gender.equals("女")) {
// 是,则提取性别封装进女朋友对象
char newGender = gender.charAt(0);
girlFriend.setGender(newGender);
// 封装完成,跳出循环
break;
} else {
// 不是,则循环让用户重新录入性别
System.out.println("您输入的性别有误~ 请重新输入!");
}
}
// 录入爱好
System.out.println("请输入女朋友的爱好:");
String happy = sc.next();
girlFriend.setHobby(happy);
// 将封装好的女朋友对象,依次存入数组中
girlFriends[i] = girlFriend;
}
// 5、循环结束,返回存储有女朋友对象的数组
return girlFriends;
}
}
测试结果
-----开始录入第1个女朋友的信息-----
请输入女朋友的姓名:
张靓颖
请输入女朋友的年龄:
19
请输入女朋友的性别:
男
您输入的性别有误~ 请重新输入!
请输入女朋友的性别:
大家
您输入的性别有误~ 请重新输入!
请输入女朋友的性别:
女
请输入女朋友的爱好:
唱歌、跳舞、服装
-----开始录入第2个女朋友的信息-----
请输入女朋友的姓名:
刘亦菲
请输入女朋友的年龄:
20
请输入女朋友的性别:
女
请输入女朋友的爱好:
打游戏、演戏、唱歌
-----开始录入第3个女朋友的信息-----
请输入女朋友的姓名:
杨幂
请输入女朋友的年龄:
28
请输入女朋友的性别:
女
请输入女朋友的爱好:
美食、旅游、逛街
-----开始录入第4个女朋友的信息-----
请输入女朋友的姓名:
田馥甄
请输入女朋友的年龄:
22
请输入女朋友的性别:
女
请输入女朋友的爱好:
爱唱小幸运
所有女朋友的信息如下:
姓名:张靓颖,年龄:19岁,性别:女,爱好:唱歌、跳舞、服装
姓名:刘亦菲,年龄:20岁,性别:女,爱好:打游戏、演戏、唱歌
姓名:杨幂,年龄:28岁,性别:女,爱好:美食、旅游、逛街
姓名:田馥甄,年龄:22岁,性别:女,爱好:爱唱小幸运
最高年龄:28岁
最低年龄:19岁
总年龄:89岁
所有女朋友的平均年龄为:21岁
低于平均年龄的女朋友信息如下:
姓名:张靓颖,年龄:19岁,性别:女,爱好:唱歌、跳舞、服装
姓名:刘亦菲,年龄:20岁,性别:女,爱好:打游戏、演戏、唱歌
低于平均年龄的女朋友有2个。
Process finished with exit code 0
需求:
定义长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同。
学生的属性:学号、姓名、年龄。
要求:
分析:
实现:
学生类:
package com.app.demo20_object_array5;
/*
1、需要定义一个学生类,用于将学生信息封装成一个学生对象。
*/
public class Student {
// 学生属性:学号、姓名、年龄
private String id;
private String name;
private int age;
public Student() {
}
public Student(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
测试类:
package com.app.demo20_object_array5;
import java.util.Scanner;
/*
测试类
*/
public class Test {
public static void main(String[] args) {
// 2、需要定义一个数组,长度为3,用于存储学生对象。
Student[] students = new Student[3];
// 3、需要初始化几个学生对象存入数组。
students[0] = new Student("jj01", "张飞", 34);
students[1] = new Student("jj02", "关羽", 12);
// 主页面
homePage(students);
}
/**
* 主界面
*
* @param students 学生对象数组
*/
public static void homePage(Student[] students) {
// 1、创建键盘录入对象
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("------学生管理界面------");
System.out.println("1、添加学生信息");
System.out.println("2、根据学号删除学生信息");
System.out.println("3、根据学号修改学生年龄(+1岁)");
System.out.println("4、查看所有学生的信息");
System.out.println("5、退出界面");
System.out.println("请您选择:");
String command = sc.next();
switch (command) {
case "1":
// 4、需要实现添加学生的功能
students = addStudent(students, sc);
break;
case "2":
// 根据学号删除学生信息
deleteByStudentId(students, sc);
break;
case "3":
// 根据学号修改学生年龄+1岁
updateByStudentId(students, sc);
break;
case "4":
// 查看所有学生的信息
showStudents(students);
break;
case "5":
System.out.println("成功退出学生管理界面~");
return;
default:
System.out.println("该功能未开发!请敬请等候~~");
}
}
}
/**
* 实现根据学号修改学生信息的功能
* @param students 学生对象数组
* @param sc 键盘录入对象
*/
public static void updateByStudentId(Student[] students, Scanner sc) {
if (students == null || sc == null) {
System.out.println("您的学生对象数组或键盘录入对象不能为null~");
return;
}
System.out.println("-------根据学号修改学生年龄-------");
// 1、输入要修改的学生的学号
System.out.println("请您输入要修改的学生的学号:");
String id = sc.next();
// 2、获取该学生对象在数组中的索引位置
int index = getStudentIndex(students, id);
// 判断该学生对象的索引是否大于等于0
if (index >= 0) {
// 是,则说明学生存在
// 得到该学生对象,接收一下
Student student = students[index];
// 原本的年龄
System.out.println("学生" + student.getName() + "的原年龄为:" + student.getAge() + "岁");
// 拿出该学生的年龄属性,+1岁
int age = students[index].getAge() + 1;
// 再将新的年龄塞回去
students[index].setAge(age);
System.out.println("学号为" + id + "的学生年龄修改成功~");
System.out.println("学生" + students[index].getName() + "修改后的年龄为:" + student.getAge() + "岁");
}else {
// 不是,则说明该学生不存在,修改失败
System.out.println("您要修改的学生不存在!修改失败~");
}
}
/**
* 实现根据学号删除学生信息的功能
* @param students 学生对象数组
* @param sc 键盘录入对象
*/
public static void deleteByStudentId(Student[] students, Scanner sc) {
if (students == null || sc == null) {
System.out.println("您的学生数组或键盘录入对象不能为null~");
return;
}
System.out.println("-------根据学号删除学生信息-------");
// 1、录入要删除的学生学号
System.out.println("请您输入要删除的学生的学号:");
String id = sc.next();
// 2、获取该学生对象在数组中的索引位置
int index = getStudentIndex(students, id);
// 判断该学生对象索引是否大于等于0
if (index >= 0) {
// 是,则删除该学生对象:将该元素赋值为null
students[index] = null;
System.out.println("学号为" + id + "的学生已成功删除~");
}else {
// 不是,则说明该学生不存在,删除失败!
System.out.println("您要删除的学生不存在!删除失败~");
}
}
/**
* 实现获取指定学号的学生对象在数组中的索引位置
* @param students 学生对象数组
* @param id 学生学号
* @return 返回学生对象在数组中的索引位置
*/
public static int getStudentIndex(Student[] students, String id) {
if (students == null || id == null) {
System.out.println("您的学生数组或学生学号不能为null~");
return 0;
}
// 1、遍历学生对象数组,依次获取每个学生对象
for (int i = 0; i < students.length; i++) {
// 每获取到一个学生对象,接收一下
Student student = students[i];
// 判断当前学生对象是否不为null:
if (student != null) {
// 不为null,拿到当前学生对象的学号
String stuId = student.getId();
// 判断学号是否一样:
if (id.equals(stuId)) {
// 一样,则返回该学生在数组中的索引位置
return i;
}
// 不一样,则继续判断下一个学生
}
}
// 2、遍历结束,说明仍然找不到要删除的学生,返回-1
return -1;
}
/**
* 实现查看所有学生信息的功能
*
* @param students 学生对象数组
*/
public static void showStudents(Student[] students) {
if (students == null) {
System.out.println("您的学生对象数组不能为null~");
return;
}
System.out.println("-------查看所有学生的信息-------");
// 1、遍历学生对象数组,依次获取每个学生对象
for (int i = 0; i < students.length; i++) {
// 每获取到一个学生对象,接收一下
Student student = students[i];
// 当该学生对象不为null时,才打印该学生信息
if (student != null) {
System.out.println("学号:" + student.getId() +
"\t姓名:" + student.getName() +
"\t年龄:" + student.getAge() + "岁");
}
}
}
/**
* 实现添加学生的功能
*
* @param students 学生对象数组
* @param sc 键盘录入对象
*/
public static Student[] addStudent(Student[] students, Scanner sc) {
if (students == null || sc == null) {
System.out.println("学生数组或键盘录入对象不能为null~");
return null;
}
System.out.println("-------添加学生信息界面-------");
//4-1、录入学生学号:
while (true) {
System.out.println("请您输入学生学号:");
String id = sc.next();
// a.判断学号的唯一性:
boolean flag = containsId(students, id);
if (flag) {
// 如果存在,则提示:“该学生学号已存在!”,重新录入学号;
System.out.println("该学号的学生已存在~ 请重新录入学号!");
} else {
// 如果不存在,则判断数组是否已存满:
// 获取数组中有多少个元素
int count = getArrayCount(students);
// 判断数组中的元素个数 是否与 数组长度相等
if (count == students.length) {
// 相等,说明数组已存满,则创建一个新数组,长度是老数组长度+1
Student[] newStudents = new Student[students.length + 1];
// 需将老数组的全部学生对象拷贝到新数组中
for (int i = 0; i < students.length; i++) {
newStudents[i] = students[i];
}
// 然后继续录入学生信息:
// 录入学生姓名
System.out.println("请您输入学生姓名:");
String name = sc.next();
// 录入学生年龄:
System.out.println("请您输入学生年龄:");
int age = sc.nextInt();
// 判断年龄合法性:年龄要求大于等于0岁,并小于等于200岁。
if (age >= 0 && age <= 200) {
// 封装学生信息进学生对象
Student student = new Student(id, name, age);
// 将学生对象添加进新数组。
newStudents[count] = student;
System.out.println("名叫" + name + "的学生添加成功~");
// 添加成功后,返回新数组
return newStudents;
}
} else {
// 不相等,说明数组未存满,则继续录入学生信息:
// 录入学生姓名
System.out.println("请您输入学生姓名:");
String name = sc.next();
// 录入学生年龄:
System.out.println("请您输入学生年龄:");
int age = sc.nextInt();
// 判断年龄合法性:年龄要求大于等于0岁,并小于等于200岁。
if (age >= 0 && age <= 200) {
// 封装学生信息进学生对象
Student student = new Student(id, name, age);
// 将学生对象添加进数组。
/*
1、比如现在数组中有2个学生对象,有一个空位:
[学生1, 学生2, null]
索引:0 1 2
2、此时count计数:2
3、students[count] = student:
就是把当前封装好的学生对象放进2索引的位置,由于2索引位置为null,因此添加成功
*/
students[count] = student;
System.out.println("名叫" + name + "的学生添加成功~");
// 添加成功后,返回原数组
return students;
}
}
}
}
}
/**
* 获取数组的元素个数
*
* @param students 学生对象数组
* @return 返回数组的元素个数
*/
public static int getArrayCount(Student[] students) {
if (students == null) {
System.out.println("您的学生数组不能为null");
return 0;
}
// 1、定义计数器,用于统计数组的元素个数
int count = 0;
// 2、遍历学生对象数组,依次获取每个学生对象
for (int i = 0; i < students.length; i++) {
// 每获取到一个学生对象,接收一下
Student student = students[i];
// 判断当前学生对象是否不为null
if (student != null) {
// 不为null,则说明该索引位置存在元素,开始统计
count++;
}
}
// 3、遍历结束,说明统计完成,返回数组的元素个数
return count;
}
/**
* 判断学生学号的唯一性
*
* @param students 学生对象数组
* @param id 学生学号
* @return 存在返回true,不存在返回false
*/
public static boolean containsId(Student[] students, String id) {
// 1、遍历学生对象数组,依次获取每个学生对象
for (int i = 0; i < students.length; i++) {
// 每获取到一个学生对象,接收一下
Student student = students[i];
// 判断当前学生对象是否不为null
if (student != null) {
// 不为null,则获取到当前学生对象的学号,接收一下
String stuId = student.getId();
// 判断学号是否一样
if (stuId.equals(id)) {
// 一样,说明学生存在,返回true
return true;
}
}
}
// 2、遍历结束,仍然找不到该学号的学生,返回false
return false;
}
}
测试结果:
------学生管理界面------
1、添加学生信息
2、根据学号删除学生信息
3、根据学号修改学生年龄(+1岁)
4、查看所有学生的信息
5、退出界面
请您选择:
1
-------添加学生信息界面-------
请您输入学生学号:
jj01
该学号的学生已存在~ 请重新录入学号!
请您输入学生学号:
jj02
该学号的学生已存在~ 请重新录入学号!
请您输入学生学号:
jj03
请您输入学生姓名:
张三
请您输入学生年龄:
28
名叫张三的学生添加成功~
------学生管理界面------
1、添加学生信息
2、根据学号删除学生信息
3、根据学号修改学生年龄(+1岁)
4、查看所有学生的信息
5、退出界面
请您选择:
4
-------查看所有学生的信息-------
学号:jj01 姓名:张飞 年龄:34岁
学号:jj02 姓名:关羽 年龄:12岁
学号:jj03 姓名:张三 年龄:28岁
------学生管理界面------
1、添加学生信息
2、根据学号删除学生信息
3、根据学号修改学生年龄(+1岁)
4、查看所有学生的信息
5、退出界面
请您选择:
1
-------添加学生信息界面-------
请您输入学生学号:
jj04
请您输入学生姓名:
李四
请您输入学生年龄:
39
名叫李四的学生添加成功~
------学生管理界面------
1、添加学生信息
2、根据学号删除学生信息
3、根据学号修改学生年龄(+1岁)
4、查看所有学生的信息
5、退出界面
请您选择:
4
-------查看所有学生的信息-------
学号:jj01 姓名:张飞 年龄:34岁
学号:jj02 姓名:关羽 年龄:12岁
学号:jj03 姓名:张三 年龄:28岁
学号:jj04 姓名:李四 年龄:39岁
------学生管理界面------
1、添加学生信息
2、根据学号删除学生信息
3、根据学号修改学生年龄(+1岁)
4、查看所有学生的信息
5、退出界面
请您选择:
2
-------根据学号删除学生信息-------
请您输入要删除的学生的学号:
jj05
您要删除的学生不存在!删除失败~
------学生管理界面------
1、添加学生信息
2、根据学号删除学生信息
3、根据学号修改学生年龄(+1岁)
4、查看所有学生的信息
5、退出界面
请您选择:
2
-------根据学号删除学生信息-------
请您输入要删除的学生的学号:
jj01
学号为jj01的学生已成功删除~
------学生管理界面------
1、添加学生信息
2、根据学号删除学生信息
3、根据学号修改学生年龄(+1岁)
4、查看所有学生的信息
5、退出界面
请您选择:
4
-------查看所有学生的信息-------
学号:jj02 姓名:关羽 年龄:12岁
学号:jj03 姓名:张三 年龄:28岁
学号:jj04 姓名:李四 年龄:39岁
------学生管理界面------
1、添加学生信息
2、根据学号删除学生信息
3、根据学号修改学生年龄(+1岁)
4、查看所有学生的信息
5、退出界面
请您选择:
3
-------根据学号修改学生年龄-------
请您输入要修改的学生的学号:
jj01
您要修改的学生不存在!修改失败~
------学生管理界面------
1、添加学生信息
2、根据学号删除学生信息
3、根据学号修改学生年龄(+1岁)
4、查看所有学生的信息
5、退出界面
请您选择:
3
-------根据学号修改学生年龄-------
请您输入要修改的学生的学号:
jj03
学生张三的原年龄为:28岁
学号为jj03的学生年龄修改成功~
学生张三修改后的年龄为:29岁
------学生管理界面------
1、添加学生信息
2、根据学号删除学生信息
3、根据学号修改学生年龄(+1岁)
4、查看所有学生的信息
5、退出界面
请您选择:
4
-------查看所有学生的信息-------
学号:jj02 姓名:关羽 年龄:12岁
学号:jj03 姓名:张三 年龄:29岁
学号:jj04 姓名:李四 年龄:39岁
------学生管理界面------
1、添加学生信息
2、根据学号删除学生信息
3、根据学号修改学生年龄(+1岁)
4、查看所有学生的信息
5、退出界面
请您选择:
5
成功退出学生管理界面~
Process finished with exit code 0