(1)第一套:
nextInt()接收整数
nextDouble()接收小数
next()接收字符串
注意:遇到空格,制表符,回车就停止接受。这些符号后面的数据就不会接受了
(2)第二套:
nextLine()接收字符串
注意:只有遇到回车才停止
(3)禁止混用以上的两套体系:
弊端:先用nextInt,再用nextLine会导致下面的nextLine接受不到数据;
格斗游戏,每个游戏角色姓名、血量、都不相同,在选定人物的时候(new对象的时候),这些信息就应该被确定下来。
例:
package com.PlayGame;
?
import java.util.Random;
?
public class Role {
? ?private String name;
? ?private int blood;
? ?public void attack(Role role ){
// ? ? ? 计算造成的伤害1~20
? ? ? ?Random random = new Random();
? ? ? ?int hurt=random.nextInt(20)+1;
// ? ? ? 剩余血量
? ? ? ?int count=role.getBlood()-hurt;
// ? ? ? 对剩余血量做一个验证,为负数则修改为0;
? ? ? ?count=count<0?0:count;
// ? ? ? 修改挨揍人的血量
? ? ? ?role.setBlood(count);
? ? ? ?System.out.println(this.getName()+"打了"+role.getName()+"一下,造成"+hurt+"点的伤害,"+role.getName()+"还剩下"+count+"点的血量");
? }
?
? ?public Role() {
? }
?
? ?public Role(String name, int blood) {
? ? ? ?this.name = name;
? ? ? ?this.blood = blood;
? }
?
? ?/**
? ? * 获取
? ? * @return name
? ? */
? ?public String getName() {
? ? ? ?return name;
? }
?
? ?/**
? ? * 设置
? ? * @param name
? ? */
? ?public void setName(String name) {
? ? ? ?this.name = name;
? }
?
? ?/**
? ? * 获取
? ? * @return blood
? ? */
? ?public int getBlood() {
? ? ? ?return blood;
? }
?
? ?/**
? ? * 设置
? ? * @param blood
? ? */
? ?public void setBlood(int blood) {
? ? ? ?this.blood = blood;
? }
?
? ?public String toString() {
? ? ? ?return "XW{name = " + name + ", blood = " + blood + "}";
? }
}
?public static void main(String[] args) {
?
? ? ? ?Role r1 = new Role("乔峰",100);
? ? ? ?Role r2 = new Role("小五",100);
// ? ? ? r1.攻击(xw)方法的调用者攻击参数
? ? ? ?while (true){
? ? ? ? ? ?r1.attack(r2);
? ? ? ? ? ?if(r2.getBlood()==0){
? ? ? ? ? ? ? ?System.out.println(r1.getName()+"ko了"+r2.getName());
? ? ? ? ? ? ? ?break;
? ? ? ? ? }
? ? ? ? ? ?r2.attack(r1);
? ? ? ? ? ?if(r1.getBlood()==0){
? ? ? ? ? ? ? ?System.out.println(r2.getName()+"ko了"+r1.getName());
? ? ? ? ? ? ? ?break;
? ? ? ? ? }
? ? ? }
? }
package com.Test;
?
import java.util.Random;
?
public class Role {
? ?private String name;
? ?private int blood;
? ?private String gender;
? ?private String face;//长相随机
? ?String[] boyfaces = {"风流俊雅", "气宇轩昂", "相貌英俊", "五官端正"};
? ?String[] girlfaces = {"沉鱼落雁", "亭亭玉立", "相貌平平", "惨不忍睹"};
// ? attack受伤描述
? ?String[] attacks_desc={
? ? ? ? ? ?"%s使出一招【背心钉】,转到对方身后,一掌向%s背心的灵台穴拍去",
? ? ? ? ? ?"%s使出一招【游空探爪】,转到对方身后,一掌向%s抓去",
? ? ? ? ? ?"%s使出一招【掌心雷】,转到对方身后,一掌向%s拍去",
? };
? ?//injured受伤描述:
? ?String[] injureds_desc={
? ? ? ? ? ?"%s退了半步,毫发无损",
? ? ? ? ? ?"%s造成一处淤伤",
? ? ? ? ? ?"%s一击命中,疼的弯下腰",
? };
?
? ?public Role() {
? }
?
? ?public Role(String name, int blood, String gender) {
? ? ? ?this.name = name;
? ? ? ?this.blood = blood;
? ? ? ?this.gender = gender;
? ? ? ?setFace(gender);
? }
? ?public void showRoleInfo(){
? ? ? ?System.out.println("姓名为:"+getName());
? ? ? ?System.out.println("血量为:"+getBlood());
? ? ? ?System.out.println("性别为:"+getGender());
? ? ? ?System.out.println("长相为:"+getFace());
? }
?
?
? ?public void attack(Role role) {
? ? ? ?Random random = new Random();
? ? ? ?int index = random.nextInt(attacks_desc.length);
? ? ? ?String kungfu=attacks_desc[index];
// ? ? ? 输出一个攻击的效果
? ? ? ?System.out.printf(kungfu,this.getName(),role.getName());
// ? ? ? 计算造成的伤害1~20
?
? ? ? ?int hurt = random.nextInt(20) + 1;
// ? ? ? 剩余血量
? ? ? ?int count = role.getBlood() - hurt;
// ? ? ? 对剩余血量做一个验证,为负数则修改为0;
? ? ? ?count = count < 0 ? 0 : count;
// ? ? ? 修改挨揍人的血量
? ? ? ?role.setBlood(count);
// ? ? ? 受伤描述
// ? ? ? 血量>90 0索引
// ? ? ? 40~90 1索引
// ? ? ? 0~30 2索引
? ? ? ?if(count>90){
? ? ? ? ? ?System.out.printf(injureds_desc[0],role.getName());
? ? ? } else if (count>=40&&count<=90) {
? ? ? ? ? ?System.out.printf(injureds_desc[1],role.getName());
? ? ? }else {
? ? ? ? ? ?System.out.printf(injureds_desc[2],role.getName());
? ? ? }
? ? ? ?System.out.println( role.getName() + ",还剩下" + count + "点的血量");
? }
?
? ?/**
? ? * 获取
? ? *
? ? * @return name
? ? */
? ?public String getName() {
? ? ? ?return name;
? }
?
? ?/**
? ? * 设置
? ? *
? ? * @param name
? ? */
? ?public void setName(String name) {
? ? ? ?this.name = name;
? }
?
? ?/**
? ? * 获取
? ? *
? ? * @return blood
? ? */
? ?public int getBlood() {
? ? ? ?return blood;
? }
?
? ?/**
? ? * 设置
? ? *
? ? * @param blood
? ? */
? ?public void setBlood(int blood) {
? ? ? ?this.blood = blood;
? }
?
? ?/**
? ? * 获取
? ? *
? ? * @return gender
? ? */
? ?public String getGender() {
? ? ? ?return gender;
? }
?
? ?/**
? ? * 设置
? ? *
? ? * @param gender
? ? */
? ?public void setGender(String gender) {
? ? ? ?this.gender = gender;
? }
?
? ?/**
? ? * 获取
? ? *
? ? * @return face
? ? */
? ?public String getFace() {
? ? ? ?return face;
? }
?
? ?/**
? ? * 设置
? ? *
? ? * @param gender
? ? */
? ?public void setFace(String gender) {
? ? ? ?Random r = new Random();
? ? ? ?if (gender == "男") {
? ? ? ? ? ?int index = r.nextInt(boyfaces.length);
? ? ? ? ? ?this.face = boyfaces[index];
? ? ? } else if (gender == "女") {
? ? ? ? ? ?int index = r.nextInt(girlfaces.length);
? ? ? ? ? ?this.face = girlfaces[index];
? ? ? } else {
? ? ? ? ? ?this.face = "面目狰狞";
? ? ? }
? }
?
? ?public String toString() {
? ? ? ?return "Role{name = " + name + ", blood = " + blood + ", gender = " + gender + ", face = " + face + "}";
? }
}
public static void main(String[] args) {
? ? ? ?Role r1 = new Role("乔峰", 100, "男");
? ? ? ?Role r2 = new Role("小五",100,"男");
? ? ? ?r1.showRoleInfo();
? ? ? ?r2.showRoleInfo();
// ? ? ? r1.攻击(xw)方法的调用者攻击参数
? ? ? while (true){
? ? ? ? ? ?r1.attack(r2);
? ? ? ? ? ?if(r2.getBlood()==0){
? ? ? ? ? ? ? ?System.out.println(r1.getName()+"ko了"+r2.getName());
? ? ? ? ? ? ? ?break;
? ? ? ? ? }
? ? ? ? ? ?r2.attack(r1);
? ? ? ? ? ?if(r1.getBlood()==0){
? ? ? ? ? ? ? ?System.out.println(r2.getName()+"ko了"+r1.getName());
? ? ? ? ? ? ? ?break;
? ? ? ? ? }
? ? ? }
? }
public static void main(String[] args) {
? ? ? ?//两部分参数:
? ? ? ?//第一部分参数:要输出的内容%s(占位)
// ? ? ? 第二部分参数:填充的数据
? ? ? ?System.out.printf("你好啊%s","张三");
? ? ? ?System.out.println();
? ? ? ?System.out.printf("%s你好啊%s","张三","李四");
? }
(1)例1:定义一个数组存储3个商品的对象。
商品的属性:商品的id,名字,价格,库存。
创建三个商品对象,并把商品对象存入2到数组中;
public static void main(String[] args) {
// ? ? ? 创建一个数组
? ? ? ?Goods[] arr = new Goods[3];
// ? ? ? 创建三个商品对象
? ? ? ?Goods g1 = new Goods("1","华为p40",5999.0,100);
? ? ? ?Goods g2 = new Goods("2","保温杯",227.0,50);
? ? ? ?Goods g3 = new Goods("3","枸杞",12.7,70);
// ? ? ? 把商品添加到数组中
? ? ? ?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.getCount());
? ? ? }
? }
(2)例2:定义数组存储3部汽车对象;
汽车的属性:品牌、价格、颜色。
创建三个汽车对象,数据通过键盘录入而来,并把数据存入到数据当中。
public static void main(String[] args) {
? ? ? ?Car[] cars = new Car[3];
? ? ? ?Scanner sc = new Scanner(System.in);
// ? ? ? 注意:创建对象放在循环里面。否则在外面只会认为是仅一个对象,输入的结果会被最后输入的值覆盖,从而输出三次
? ? ? ?for (int i = 0; i < cars.length; i++) {
// ? ? ? ? ? 创建汽车对象
? ? ? ? ? ?Car c = new Car();
? ? ? ? ? ?System.out.println("请输入品牌,价格,颜色");
? ? ? ? ? ?String name=sc.next();
? ? ? ? ? ?c.setName(name);
? ? ? ? ? ?double price=sc.nextDouble();
? ? ? ? ? ?c.setPrice(price);
? ? ? ? ? ?String color=sc.next();
? ? ? ? ? ?c.setColor(color);
? ? ? ? ? ?cars[i]=c;
? ? ? }
? ? ? ?for (int i = 0; i < cars.length; i++) {
? ? ? ? ? ?Car car = cars[i];
? ? ? ? ? ?System.out.println(car.getName()+" ,"+car.getPrice()+" ,"+car.getColor());
? ? ? }
? }
(3)例3:定义数组存储3部手机对象。
手机的属性:品牌,价格,颜色。
要求,计算出三部手机平均价格。
public static void main(String[] args) {
? ?Phone[] phones = new Phone[3];
? ?Phone c1 = new Phone("小米",599.0,"红色");
? ?Phone c2 = new Phone("华为",9999.0,"黑色");
? ?Phone c3 = new Phone("苹果",5999.0,"白色");
?
? ?phones[0]=c1;
? ?phones[1]=c2;
? ?phones[2]=c3;
?
? ?double price=0;
? ?for (int i = 0; i < phones.length; i++) {
? ? ? ?Phone phone = phones[i];
? ? ? ?price=price+phone.getPrice();
? }
? ?System.out.println(price/ phones.length);
}
(4)例4:定义数组存储4个女朋友的对象,
女朋友属性:姓名、年龄、性别、爱好
要求1:计算出四女朋友的平均年龄
要求2:统计年龄比平均值低的女朋友有几个?并把她们的所有信息打印出来。
public static void main(String[] args) {
? ?/*
? ?要求1:计算出四女朋友的平均年龄
? ?要求2:统计年龄比平均值低的女朋友有几个?并把她们的所有信息打印出来。
? ?*/
? ?girlFriends[] gf = new girlFriends[4];
? ?girlFriends gf1 = new girlFriends("小时",23,"女","打麻将");
? ?girlFriends gf2 = new girlFriends("小虎",20,"女","旅游");
? ?girlFriends gf3 = new girlFriends("小妲",19,"女","玩游戏");
? ?girlFriends gf4 = new girlFriends("小商",28,"女","旅游");
? ?gf[0]=gf1;
? ?gf[1]=gf2;
? ?gf[2]=gf3;
? ?gf[3]=gf4;
? ?int age=0;
? ?for (int i = 0; i < gf.length; i++) {
? ? ? ?girlFriends girlFriends = gf[i];
? ? ? ?age+=girlFriends.getAge();
? }
? ?int avg=age/gf.length;
? ?System.out.println(avg);
? ?int count=0;
? ?for (int i = 0; i < gf.length; i++) {
? ? ? ?girlFriends girlFriends = gf[i];
? ? ? ?if(girlFriends.getAge()<avg){
? ? ? ? ? ?count++;
? ? ? ? ? ?System.out.println(girlFriends.getName()+","+girlFriends.getAge()+","+girlFriends.getSex()+","+girlFriends.getLove());
? ? ? }
? }
? ?System.out.println(count);
}
(5)例5:定义一个长度为3的数组,数组存储1~3名学生对象作为初始化数据,学生对象的学号,姓名各个不相同。
学生的属性:学号、姓名、年龄;
要求1:再添加一个学生对象,并在添加的时候进行学号的唯一性;
要求2:添加完成后,遍历所有学生信息;
public static void main(String[] args) {
? ? ? ?/*
? ? ? ?要求1:再添加一个学生对象,并在添加的时候进行学号的唯一性;
? ? ? ?要求2:添加完成后,遍历所有学生信息;
? ? ? ?*/
? ? ? ?Student[] students = new Student[3];
? ? ? ?Student s1 = new Student(110, "dhh", 18);
? ? ? ?Student s2 = new Student(121, "xdd", 28);
? ? ? ?Student s3 = new Student(212, "css", 24);
? ? ? ?students[0] = s1;
? ? ? ?students[1] = s2;
? ? ? ?students[2] = s3;
// ? ? ? 要求1:再添加一个学生对象,并在添加的时候进行学号的唯一性;
// ? ? ? 新建一个学生对象
? ? ? ?Student s4 = new Student(210, "dff", 21);
// ? ? ? 判断学号是否唯一,唯一则添加,不唯一不用添加
? ? ? ?boolean flag = contains(students, s4.getSno());
? ? ? ?if(flag){
// ? ? ? ? ? 已存在,不用添加
? ? ? ? ? ?System.out.println("当前sno重复,请修改sno后再进行添加");
? ? ? }else {
// ? ? ? ? ? 不存在--就可以添加进数组
// ? ? ? 添加入数组:数组没满直接添加
// ? ? ? 数组满了,在原来的数组长度+1
? ? ? ? ? ?int count = count(students);
? ? ? ? ? ?if(count==students.length){
// ? ? ? ? ? ? ? 已存满
? ? ? ? ? ? ? ?Student[] newStu = creat(students);
? ? ? ? ? ? ? ?newStu[count]=s4;
? ? ? ? ? ? ? ?printStu(newStu);
? ? ? ? ? }else {
// ? ? ? ? ? ? ? 没有存满
// ? ? ? ? ? ? ? [s1,s2,null]方法count获取到2,表示数组当中已经有2个元素
// ? ? ? ? ? ? ? 还有一层意思:如果下一次要添加数据,就是添加到2索引的位置
? ? ? ? ? ? ? ?students[count]=s4;
? ? ? ? ? ? ? ?printStu(students);
?
? ? ? ? ? }
? ? ? }
? }
? ?public static void printStu(Student[] students){
? ? ? ?for (int i = 0; i < students.length; i++) {
? ? ? ? ? ?Student stu = students[i];
? ? ? ? ? ?if(students[i]!=null){
? ? ? ? ? ? ? ?System.out.println(stu.getSno()+","+stu.getName()+","+stu.getAge()+",");
? ? ? ? ? }
? ? ? }
? }
?
// ? 创建一个新数组,长度=老数组的长度+1
// ? 然后把老数组的元素,拷贝到新数组当中
? ?public static Student[] creat(Student[] students){
? ? ? ?Student[] stu1 = new Student[students.length+1];
// ? ? ? 循环得到老数组中的每一个元素
? ? ? ?for (int i = 0; i < students.length; i++) {
? ? ? ? ? ?stu1[i]=students[i];
? ? ? }
? ? ? ?return stu1;
? }
?
? ?public static int count(Student[] students){
? ? ? ?int count=0;
? ? ? ?for (int i = 0; i < students.length; i++) {
? ? ? ? ? ?if(students[i]!=null){
? ? ? ? ? ? ? ?count++;
? ? ? ? ? }
? ? ? }
? ? ? ?return count;
? }
?
? ?// ? 1:我要干嘛? 唯一性判断
// ? 2:我干这件事情需要什么才能完成? 数组,id
// ? 3:调用处是否需要继续使用方法的结果? 是
? ?public static boolean contains(Student[] students, int sno) {
? ? ? ?for (int i = 0; i < students.length; i++) {
? ? ? ? ? ?Student stu = students[i];
? ? ? ? ? ?if(stu!=null){
? ? ? ? ? ? ? ?if (stu.getSno() == sno) {
? ? ? ? ? ? ? ? ? ?return true;
? ? ? ? ? ? ? }
? ? ? ? ? }
? ? ? }
? ? ? ?return false;
? }
要求3:通过id删除学生信息,如果存在,则删除,如果不存在,则提示删除失败。
要求4:删除完毕后,遍历所有学生信息;
public static void main(String[] args) {
? ? ? /*
? ? ? ?要求3:通过id删除学生信息,如果存在,则删除,如果不存在,则提示删除失败。
? ? ? ?要求4:删除完毕后,遍历所有学生信息;
? ? ? ?*/
? ? ? ?Student[] stu = new Student[3];
? ? ? ?Student s1 = new Student(1, "zs", 18);
? ? ? ?Student s2 = new Student(2, "ls", 28);
? ? ? ?Student s3 = new Student(3, "ww", 24);
? ? ? ?stu[0]=s1;
? ? ? ?stu[1]=s2;
? ? ? ?stu[2]=s3;
// ? ? ? ? 要求3:通过id删除学生信息,如果存在,则删除,如果不存在,则提示删除失败。
? ? ? ?Scanner sc = new Scanner(System.in);
? ? ? ?System.out.println("请输入您要删除的学号:");
? ? ? ?int id= sc.nextInt();
? ? ? ?int index = index(stu,id);
? ? ? ?if(index>=0){
? ? ? ? ? ?stu[index]=null;
? ? ? ? ? ?printStu(stu);
? ? ? }else {
? ? ? ? ? ?System.out.println("该学号不存在!");
? ? ? }
? }
? ?public static void printStu( Student[] stu) {
? ? ? ?for (int i = 0; i < stu.length; i++) {
? ? ? ? ? ?Student s = stu[i];
? ? ? ? ? ?if(s!=null){
? ? ? ? ? ? ? ?System.out.println(s.getSno()+","+s.getName()+","+s.getAge());
? ? ? ? ? }
? ? ? }
? }
? ?public static int index( Student[] stu,int id) {
? ? ? ?for (int i = 0; i < stu.length; i++) {
? ? ? ? ? ?Student s = stu[i];
? ? ? ? ? ?if (s!= null) {
? ? ? ? ? ? ? ?int sno = s.getSno();
? ? ? ? ? ? ? ?if (sno==id) {
? ? ? ? ? ? ? ? ? ?return i;
? ? ? ? ? ? ? }
? ? ? ? ? }
? ? ? }
? ? ? ?return -1;
? }
要求5:查询数组id为“212”学生,如果存在,则将他的年龄+1;
public static void main(String[] args) {
? /*
? ?要求5:查询数组id为“212”学生,如果存在,则将他的年龄+1;
? ?*/
? ?Student[] stu = new Student[3];
? ?Student s1 = new Student(1, "zs", 18);
? ?Student s2 = new Student(2, "ls", 28);
? ?Student s3 = new Student(3, "ww", 24);
? ?stu[0]=s1;
? ?stu[1]=s2;
? ?stu[2]=s3;
? ?Scanner sc = new Scanner(System.in);
? ?System.out.println("请输入您的学号:");
? ?int id= sc.nextInt();
? ?int index = index(stu,id);
? ?if(index>=0){
? ? ? ?stu[index].setAge(stu[index].getAge()+1);
? ? ? ?printStu(stu);
? }else {
? ? ? ?System.out.println("该学号不存在!");
? }
}
public static void printStu( Student[] stu) {
? ?for (int i = 0; i < stu.length; i++) {
? ? ? ?Student s = stu[i];
? ? ? ?if(s!=null){
? ? ? ? ? ?System.out.println(s.getSno()+","+s.getName()+","+s.getAge());
? ? ? }
? }
}
public static int index( Student[] stu,int id) {
? ?for (int i = 0; i < stu.length; i++) {
? ? ? ?Student s = stu[i];
? ? ? ?if (s!= null) {
? ? ? ? ? ?int sno = s.getSno();
? ? ? ? ? ?if (sno==id) {
? ? ? ? ? ? ? ?return i;
? ? ? ? ? }
? ? ? }
? }
? ?return -1;
}