需求:格斗游戏,每个游戏角色的姓名,血量都不同,在选定人物的时候(new对象的时候),这些信息就应该被确定下来。
思路:
- 创建一个Role(角色)类,分别定义名字,血量,性别,等私有变量
- 定义一个空参构造体
- 定义一个含有全部参数的构造体
- 再分别给私有变量定义set和get方法
- (1.2.3.4步是创建javabean)
- 准备工作都做完了,接下来定义一个flight(战斗)方法,在flight中要有 调用flight方法的人给敌人随机造成了多少伤害,敌人还剩多少血量,敌人血量低于0会怎样。
- 在main()方法中分别用Role创建两个角色并附上初始值
- 接下来角色调用flight方法开始战斗
- 当己方或敌方血量为则游戏结束
javabean类如下,main()在下面:
package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;
import java.util.Random;
public class Role {
private String name;
private int blood;
private String gender;
private String face;//长相随机
//face
String[] boyface = {"风流俊雅", "气宇轩昂", "相貌英俊", "五官端正", "一塌糊涂", "面目狰狞"};
String[] girlface = {"美艳绝伦", "沉鱼落雁", "亭亭玉立", "身材姣好", "相貌平平", "惨不忍睹"};
//attach 攻击描述
String[] attacks_desc = {
"%s使出了一招【直捣黄龙】,蹲到对方胯下,一爪向%s的命根抓去",
"%s使出了一招【黯然幽魂掌】,大臂一挥,一掌向%s的脸坝子拍去"
};
//injured 受伤的描述
String[] injured_desc = {
"结果%s退了半步,毫发无伤",
"结果给%s打的退了几步",
"结果%s痛的哇哇大叫",
"结果%s像烂泥一样倒下"
};
//空参
public Role() {
}
//全参
public Role(String name, int blood, String gender) {
this.name = name;
this.blood = blood;
this.gender = gender;
//this.face = face; 开局随机长相所以用this.facehi直接赋值固定长相,直接调用setFace
setFace(gender);
}
//set 和 get 方法 先赋值再返回
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setBlood(int blood) {
this.blood = blood;
}
public int getBlood() {
return blood;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getGender() {
return gender;
}
public void setFace(String gender) {
Random r = new Random();
if (gender == "男") {
int x = r.nextInt(boyface.length);
this.face = boyface[x];
} else if (gender == "女") {
int y = r.nextInt(girlface.length);
this.face = girlface[y];
} else
System.out.println("卧槽,人妖,run!!!");
}
public String getFace() {
return face;
}
//定义一个方法用于攻击别人
//思考:谁攻击谁
//Role r1 = new Role();
//Role r2 = new Role();
//r1.攻击(r2);
public void flight(Role role) {
//使出一个攻击的效果
Random r = new Random();
int indexA = r.nextInt(attacks_desc.length);
String KungFu = attacks_desc[indexA];
System.out.printf(KungFu, this.getName(), role.getName());
//this表示方法的调用者
//用随机数编写造成了多少血量
int hurt = r.nextInt(11) + 20; //20-30
int remainBlood = role.getBlood() - hurt;
//对剩余血量进行验证,如果是负数就修改为0
remainBlood = remainBlood < 0 ? 0 : remainBlood;
//修改一下挨揍人的血量
role.setBlood(remainBlood);
//受伤描述
//如果血量>90 就采用0索引
// 60 -- 90 就采用1索引
// 30 -- 60 就采用2索引
// 0 -- 30 3索引
if (remainBlood > 90) {
System.out.printf(injured_desc[0], role.getName());
System.out.println(); //println本身就有换行
} else if (remainBlood > 60) {
System.out.printf(injured_desc[1], role.getName());
System.out.println();
} else if (remainBlood > 30) {
System.out.printf(injured_desc[2], role.getName());
System.out.println();
} else {
System.out.printf(injured_desc[3], role.getName());
System.out.println();
}
/*
String ShouShang = injured_desc[indexJ];
System.out.printf(ShouShang,role.getName());*/
}
}
主方法:
package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;
public class RoleTest {
public static void main(String[] args) {
//创建第一个角色
Role r1 = new Role("奥特曼",100,"男");
//创建第二个角色
Role r2 = new Role("小可爱",100,"女");
//开始战斗 回合制游戏
while (true){
//1.r1开始攻击r2
r1.flight(r2);
//判断r2还剩多少血量 如果r2血量变为0,游戏停止
if(r2.getBlood() == 0){
System.out.println(r1.getName()+"k.0"+r2.getName());
break;
}
//r2开始攻击r1
r2.flight(r1);
if(r1.getBlood()==0){
System.out.println(r2.getName()+"k.o"+r1.getName());
break;
}
}
}
}
对象数组练习
定义数组存储3个商品对象。
商品的属性:商品的id,名字,价格,库存
创建三个商品对象,并把商品对象存入到数组当中
思路:首相窗创建Goods的javabean类,再去main()里创建数组存放商品
package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;
//创建一个Goods的javabean
public class Goods {
private String id;
private String name;
private double price;
private int stock;
public Goods() {
}
public Goods(String id, String name, double price, int stock) {
this.id = id;
this.name = name;
this.price = price;
this.stock = stock;
}
/**
* 获取
* @return id
*/
public String getId() {
return id;
}
/**
* 设置
* @param id
*/
public void setId(String id) {
this.id = id;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return price
*/
public double getPrice() {
return price;
}
/**
* 设置
* @param price
*/
public void setPrice(double price) {
this.price = price;
}
/**
* 获取
* @return stock
*/
public int getStock() {
return stock;
}
/**
* 设置
* @param stock
*/
public void setStock(int stock) {
this.stock = stock;
}
}
package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;
public class GoodsTest {
public static void main(String[] args){
//int[] arr = new int[3]; int类型的数组只能放整形的数
//1.创建数组
Goods[] arr = new Goods[3];//装商品的数组,类型就得是定义好的Goods类
//2.创建三个商品对象 ctrl+p 可以看形参顺序
Goods g1 = new Goods("001","苹果10",3999,10000);
Goods g2 = new Goods("002","苹果11",4999,1000);
Goods g3 = new Goods("003","苹果12",6999,100);
//将商品对象存入到数组中
arr[0] = g1;
arr[1] = g2;
arr[2] = g3;
//遍历数组,看是否存进去了
for (int i = 0; i < arr.length; i++) {
Goods goods = arr[i];
System.out.println(goods.getId()+","+goods.getName()+","+goods.getPrice()+","+goods.getStock());
}
}
}
对象数组2(加大难度):
需求:
定义数组存储3部汽车对象。
汽车的属性:品牌,价格,颜色。
创建三个汽车对象,数据通过键盘录入而来,并把数据存入到数组当中。
创建Cars的javabean:
package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;
public class Cars {
//1.先定义Cars的私有变量
private String band;
private double price;
private String color;
//2.定义空参
public Cars(){}
//3.定义全参构造器
public Cars(String band,double price,String color){
this.band = band;
this.price = price;
this.color = color;
}
//4.写set和get方法
public void setBand(String band){
this.band = band;
}
public String getBand(){
return band;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
键盘录入:
package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;
import java.util.Scanner;
public class CarsTest {
public static void main(String[] args) {
//5.创建数组存放小汽车
Cars[] arr = new Cars[3];
//录入数据有两套体系:第一套体系
/* nextInt(); 接收整数
nextDouble(); 接收小数
next(); 接收字符串
这套体系遇到空格,遇到制表符,回车就会停止接收数据
如果你定义了两个输入语句 你在第一次输入 123空格123
则会将123赋值给第一个数 剩下的123直接赋值给第二个数不会有提示信息*/
// 第二套体系
//nextLine(); 接收字符串 同上如果输入 123 123 则会全部赋值给第一个数 包括空格
//6.new出小汽车 数据通过键盘录入而来 7.存入数组
Scanner sc = new Scanner(System.in);
for (int i = 0; i < arr.length; i++) {
Cars car = new Cars();
System.out.println("请录入汽车的品牌:");
String brand = sc.next();
car.setBand(brand);
System.out.println("请录入汽车的价格:");
Double price = sc.nextDouble();
car.setPrice(price);
System.out.println("请录入汽车的颜色·:");
String color = sc.next();
car.setColor(color);
arr[i] = car ; //将小汽车的所有数据直接装入数组
}
//遍历数组
for (int i = 0; i < arr.length; i++) {
Cars cars = arr[i];
System.out.println(cars.getBand()+","+cars.getPrice()+","+cars.getColor());
}
}
}
对象数组3
需求:定义数组存储3部手机对象。
手机的属性:品牌,价格,颜色。
要求,计算出三部手机的平均价格
手机javabean
package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;
public class Phone {
private String brand;
private int price;
private String color;
public Phone(){}
public Phone(String brand,int price,String color){
this.brand = brand;
this.price = price;
this.color = color;
}
public void setBrand(String brand){
this.brand = brand;
}
public String getBrand(){
return brand;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
main()方法:
package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;
public class PhoneTest {
public static void main(String[] args){
//定义数组存储3部手机
Phone[] arr = new Phone[3];
//创建3台手机
Phone p1 = new Phone("苹果11",1999,"白色");
Phone p2 = new Phone("苹果12",4999,"黑色");
Phone p3 = new Phone("苹果13",3999,"玫瑰金色");
//把手机放到数组里
arr[0] = p1;
arr[1] = p2;
arr[2] = p3;
int sumPrice = 0;
//获取3部手机的平均价格
for (int i = 0; i < arr.length; i++) {
sumPrice = sumPrice + arr[i].getPrice();
}
double phoneAvg = sumPrice*1.0/arr.length;
System.out.printf("%.2f",phoneAvg);
}
}
对象数组4
需求:定义数组存储4个女朋友对象
女朋友的属性:姓名,年龄,性别,爱好
要求1:计算出四个女朋友的平均年龄
要求2:统计年龄比平均值低的女朋友有几个?并把他们的所有信息打印出来
javabean类在下边
package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;
public class GirlFriendTest {
public static void main(String[] args) {
//定义数组 存四个女朋友
GirlFriend[] arr = new GirlFriend[4];
//创4个女朋友
GirlFriend g1 = new GirlFriend("小可爱1",18,'女',"画画");
GirlFriend g2 = new GirlFriend("小可爱2",19,'女',"买菜");
GirlFriend g3 = new GirlFriend("小可爱3",20,'女',"吃");
GirlFriend g4 = new GirlFriend("小可爱4",21,'女',"睡觉");
//装入数组
arr[0] = g1;
arr[1] = g2;
arr[2] = g3;
arr[3] = g4;
//获取年纪总和 并 求出平均值
int sumAge=0;
for (int i = 0; i < arr.length; i++) {
sumAge = sumAge + arr[i].getAge();
}
double avg = sumAge*1.0/arr.length;
int count = 0;
for (int i = 0; i < arr.length; i++) {
if(arr[i].getAge()<avg)
count++;
}
System.out.println(count);
for (int i = 0; i < arr.length; i++) {
if(arr[i].getAge()<avg)
System.out.println(arr[i].getName()+" "+arr[i].getAge()+" "+arr[i].getGender()+" "+arr[i].getHoby());;
}
}
}
package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;
public class GirlFriend {
private String name;
private int age;
private char gender;
private String hoby;
public GirlFriend(){}
public GirlFriend(String name,int age,char gender,String hoby){
this.name = name;
this.age = age;
this.gender = gender;
this.hoby = hoby;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return 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 getHoby() {
return hoby;
}
public void setHoby(String hoby) {
this.hoby = hoby;
}
}
对象数组5
需求:定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同。
学生的属性:学号,姓名,年龄。
要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断。
要求2:添加完毕之后,遍历所有学生信息。
要求3:通过id删除学生信息
如果存在,则删除,如果不存在,则提示删除失败。
要求4:删除完毕之后,遍历所有学生的信息
要求5:查询数组id为”002“的学生,如果存在,则将他的年龄+1岁
package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;
public class StudentTest {
public static void main(String[] args) {
//功能不完善,使用其中一个功能必须将其他功能注释
//定义一个长度为3的数组
Student[] arr = new Student[3];
//new3个学生存数组里
Student s1 = new Student(1, "王刚", 21);
Student s2 = new Student(2, "王芳", 20);
Student s3 = new Student(3, "王磊", 22);
arr[0] = s1;
arr[1] = s2;
arr[2] = s3;
//要求1:添加学生对象,并在添加的时候进行学号的唯一性判断
Student s4 = new Student(4, "王爽", 22);
//1.老数组已经满了---只能创建一个新的数组,新的数组长度 = 老数组长度 + 1
//2.数组未存满直接添加
//3.唯一性判断,id不可以重复,存在--不可以添加,不存在--直接添加
boolean flag = contains(arr, s4.getId());
if (flag) {
System.out.println("当前id重复,请修改id后进行添加");
} else {
//定义方法判断数组已经存了几个元素
int result = getCount(arr);
if(result == arr.length){
//老数组已经满了---只能创建一个新的数组,新的数组长度 = 老数组长度 + 1
//创建一个方法写 全写这里太乱了
Student[] newArr = creatNewArr(arr);
newArr[arr.length] = s4;
print(newArr);
}else {
//没存满 直接放进去 得到的result 是数组中一共有几个元素
//result也代表我下次要存放数据的索引 你细品
arr[result] = s4;
print(arr);
}
//最后遍历所有的信息
}
//要求3:根据id删除学生信息
//1.找到id对应的索引
int index1 = getIndex(arr,1);
System.out.println(index1);
//如果存在就删除,不存在就给提示
if(index1 >= 0) {
//存在 把要删除的索引变成null就ok了
arr[index1] = null;
//删除之后遍历数组
print(arr);
} else {
System.out.println("删除失败,当前索引不存在");
}
//要求5:查询数组中id为 002 的学生如果存在 ,年龄+1
int index2 = getIndex(arr,2);
//如果存在 年龄+1 并 输出 否则报错
if(index2 >= 0){
Student stu = arr[index2];
int newAge = stu.getAge()+1;
//把+1之后的数存进数组
stu.setAge(newAge);
//成功之后 调用方法 遍历数组
print(arr);
}else {
System.out.println("当前id不存在,年龄修改失败");
}
}
//方法:
//1.找到id对应的索引 要把数组传进去 id传进去
public static int getIndex(Student[] arr,int id){
for (int i = 0; i < arr.length; i++) {
//得到每个学生的信息
Student stu = arr[i];
if(stu!=null){
int sid = stu.getId();
if(sid == id){
return i;
}
}
}
//当判断结束之后还没找到要删除对应的索引,就返回当前删除id不存在
return -1;
}
//遍历数组
public static void print(Student[] arr){
for (int i = 0; i < arr.length; i++) {
if(arr[i]!=null)
System.out.println(arr[i].getId()+" "+arr[i].getName()+" "+arr[i].getAge());
}
}
public static boolean contains(Student[] arr, int id) {
for (int i = 0; i < arr.length; i++) {
if(arr[i] != null) {
if (id == arr[i].getId())
return true;
}
}
return false;
}
//定义一个新方法
public static int getCount(Student[] arr) {
//对arr【i】做一个非空判断 如果不为空则count++
int count = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] != null)
count++;
}
return count;
}
public static Student[] creatNewArr(Student[] arr){
Student[] newArr = new Student[arr.length+1];
//将旧数组里的东西放入新数组里 并返回
for (int i = 0; i < arr.length; i++) {
newArr[i] = arr[i];
}
return newArr;
}
}
javabean:
package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;
public class Student {
private int id;
private String name;
private int age;
public Student() {
}
public Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public void setId(int id){
this.id = id;
}
public int getId(){
return 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;
}
}