本周观看了黑马Java2022版63-91集的内容,主要包含以下内容:
方法,几个综合练习,面向对象介绍
public static void 方法名(){
方法体(就是打包起来的代码);
}
调用该方法: 方法名();
public static void 方法名(参数){
方法体;
}
调用该方法: 方法名(参数的数值);
public static 返回值类型 方法名(参数){
方法体;
return 返回值;
}
调用该方法: 直接调用,赋值调用,输出调用
应用场景:在调用处要根据方法的结果,去编写另一段代码
指在同一类内具有相同名称的多个方法,方法之间 参数不同:
参数个数不同,参数类型不同,参数顺序不同
(1).基本数据类型: 整型byte,short,int,long
浮点型:float,double
布尔型:boolean
字符型:char
数据值储存在自己的空间中
特点:赋值给其他变量,也是赋的真实值
(2).引用数据类型:除了基本数据类型的其他数据类型
数据值储存在其他空间中,自己的空间储存的是地址值
特点:赋值给其他变量,赋的也是地址值
挑了几个练习
1.开发验证码
package bb;
import java.util.Random;
import java.util.Scanner;
public class Demo3 {
public static void main(String[] args) {
//随机产生一个5位的验证码 格式:长度为5,前四位是小写字母或大写字母,最后一位是数字
//方法:如果要在一堆没有什么规律的数据中随机抽取,可以把这些数据放到数组中,再随机抽索引 a97 A65
char[]chs=new char[52];
for (int i = 0; i < chs.length; i++) {//把大小写放进数组
if(i<=25) {
chs[i]=(char)(65+i);//ASCII码表 大写
}else{
chs[i]=(char)(97+i-26);//小写
}
}
Random r=new Random();
String result="";//弄一个空字符串
for (int i = 0; i <4; i++) {
int random=r.nextInt(chs.length);
result=result+chs[random];
}
int random=r.nextInt(10);
result=result+random;
System.out.println("验证码是 "+result);
}
}
2.双色球彩票系统
package bb;
import java.util.Scanner;
import java.util.Random;
public class Demo5 {
//双色球:号码由6个红色球和1个蓝色球组成.红色1-33,蓝1-16.
//左红右蓝 中6+1得最高1000万 中6+0得最高500万 中5+1得3000 中5+0或4+1得200
//中4+0或3+1得10 中2+1或1+1或0+1得5
public static void main(String[] args) {
int[]arr=creatNumber(); //1.生成中奖号码
/*System.out.println("作弊程序已打开-------");
for (int i = 0; i < arr.length; i++) {//作弊程序
System.out.print(arr[i]+" ");
}
System.out.println("-------");*/
int[]inputArr=userInput();//2.生成输入的中奖号码
int redCount=0;
int blueCount=0;//3.统计中奖的红球和篮球个数
for (int i = 0; i < inputArr.length-1; i++) {
for (int j = 0; j < arr.length-1; j++) {
if (arr[j]==inputArr[i]) {
redCount++;
}
}
}
if (inputArr[inputArr.length-1]==arr[arr.length-1]) {
blueCount++;
}
if (redCount==6&&blueCount==1) {
System.out.println("你中了1000万");
} else if(redCount==6&&blueCount==0){
System.out.println("你中了500万");
}else if(redCount==5&&blueCount==1){
System.out.println("你中了3000元");
}else if(redCount==5&&blueCount==0||redCount==4&&blueCount==1){
System.out.println("你中了200元");
}else if(redCount==4&&blueCount==0||redCount==3&&blueCount==1){
System.out.println("你中了10元");
}else if(redCount==2&&blueCount==1||redCount==1&&blueCount==1
||redCount==0&&blueCount==1){
System.out.println("你中了5元");
}else {
System.out.println("谢谢惠顾");
}
}
public static boolean contain(int[]arr,int redNumber) {//判断是否存在的方法
for (int i = 0; i < arr.length; i++) {
if (arr[i]==redNumber) {
return true;
}
}return false;
}
public static int[] creatNumber() {//生成中奖号码的方法
int[]arr=new int[7];
Random r=new Random();
for (int i = 0; i < arr.length-1; ) {
int redNumber=r.nextInt(33)+1;//生成红球
if (!contain(arr,redNumber)) {//判断是否存在
arr[i]=redNumber;
i++;//!!!
}
}
int blueNumber=r.nextInt(16)+1;//生成蓝球
arr[arr.length-1]=blueNumber;
return arr;
}
public static int[] userInput() {//用户输入的方法
Scanner sc=new Scanner(System.in);
int[]inputArr=new int[7];
for (int i = 0; i < inputArr.length-1;) {//输入红球
System.out.println("请输入红球");
int redNum=sc.nextInt();
if (redNum>=1&&redNum<=33) {//红球需要在这个范围还需要数字唯一
if (!contain(inputArr,redNum)) {
inputArr[i]=redNum;
i++;
} else {
System.out.println("您输入的红球数字重复,请重新输入");
}
} else {
System.out.println("您输入的红球号码不可行,请重新输入");
}
}
while(true) {
System.out.println("请输入蓝球");
int blueNum=sc.nextInt();
if (blueNum>=1&&blueNum<=16) {
inputArr[inputArr.length-1]=blueNum;
break;//输入正确的蓝球数字可以跳出循环
} else {
System.out.println("输入的蓝球号码不可行,请重新输入");
}
}
return inputArr;
}
3.文字版格斗游戏
package bb;
import java.util.Scanner;
import java.util.Random;
public class Demo5 {
//文字版格斗游戏
public static void main(String[] args) {
Role r1=new Role("朱毅",100);
Role r2=new Role("纳西妲",100);
while (true) {
r1.attack(r2);
if (r2.getBlood()==0) {
System.out.println(r1.getName()+"打了"+r2.getName());
break;
}
r2.attack(r1);
if (r1.getBlood()==0) {
System.out.println(r2.getName()+"打了"+r1.getName());
break;
}
}
}
}
package bb;
import java.util.Random;
public class Role {
private String name;
private int blood;
public Role() {
}
public Role(String name, int blood) {
this.name = name;
this.blood = blood;
}
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 void attack(Role role) {//方法调用者攻击参数
Random r=new Random();
int hurt=r.nextInt(20)+1;
int remainBlood=role.getBlood()-hurt;
if (remainBlood<=0) {
remainBlood=0;
}
role.setBlood(remainBlood);
System.out.println(this.getName()+"打了"+role.getName()+",造成了"+hurt+"伤害,"+
role.getName()+"还剩"+remainBlood+"点血");
}
}
4.模拟抽奖
package bb;
import java.util.Scanner;
import java.util.Random;
public class Demo5 {
//抽奖{2,588,888,1000,10000}5个奖金,模拟抽奖
//打印出每个奖项,奖项的出现顺序随机且不重复!!!
public static void main(String[] args) {
int[]award= {2,588,888,1000,10000};//奖池
int[]arr=new int[award.length];//新数组表示抽奖结果
Random r=new Random();
for (int i = 0; i < award.length;) {//开始抽奖
int random=r.nextInt(award.length);
int prize=award[random];
if(!contain(arr,prize)) {//调用方法判断抽奖结果是否相同
arr[i]=prize;
i++;//不相同再索引增加
}
}for (int i = 0; i < arr.length; i++) {
System.out.println("中了"+arr[i]);
}
}
public static boolean contain(int[]award,int prize) {//创造抽奖结果是否相同的方法
for (int i = 0; i < award.length; i++) {
if (award[i]==prize) {
return true;
}
}return false;
}
5.评委打分
package bb;
import java.util.Scanner;
import java.util.Random;
public class Demo5 {
//6个评委打分,分数在{0-100}之间
//最终得分为去掉最高分和最低分后的4位评委的平均分
public static void main(String[] args) {
int[]arr=arrScore();
int max=getMax(arr);
int min=getMin(arr);
int sum=sum(arr);
double ave=(double)(sum-max-min)/4;
System.out.println("最终得分为"+ave);
}
public static int[] arrScore() {//打分数组
Scanner sc=new Scanner(System.in);
int[]arr= new int[6];
for (int i = 0; i < arr.length;) {
System.out.println("请输入评委打分");
int num=sc.nextInt();
if (num>=0&&num<=100) {
arr[i]=num;
i++;//!!!!只有输入正确数据才能i+1
} else {
System.out.println("您输入的分数不合规,请重新输入");
}
}return arr;
}
public static int getMax(int[]arr) {
int max=arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i]>=max) {
max=arr[i];
}
}return max;
}
public static int getMin(int[]arr) {
int min=arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i]<=min) {
min=arr[i];
}
}return min;
}
public static int sum(int[]arr) {
int sum=0;
for (int i = 0; i < arr.length; i++) {
sum=sum+arr[i];
}return sum;
}
1.类的一般结构:
[类修饰符] class 类名称{
[修饰符] 数据类型 成员变量名称; }声明成员变量
...
[修饰符] 返回值数据类型 方法名(参数)} }声明成员方法
语句序列;
return [表达式];
}
......
}
如何使用:1.访问属性:对象名.成员变量
2.访问行为:对象名.方法名();
原则:对象代表什么,就封装对应的数据,并记录相应的行为
private:权限修饰符,可以修饰成员变量和成员方法,被修饰的成员只能在本类中使用
!!!被private修饰的成员变量,如果需要被其它类使用,要提供相应的方法:
(1).用"setXxx(参数)"方法,用于给成员变量赋值,用public修饰
(2).用"getXxx()"方法,用于获取成员变量的值,用public修饰
(1).格式
public class 类名{
修饰符 类名(参数){
方法体;
}
}
(2).特点:方法名与类名相同
没有返回值类型,连void也没
没有具体的返回值(不能有return带回结果数据)
作用:创建对象时,由虚拟机自动调用,给成员变量初始化的
(3).构造方法有两种,各自的作用
•无参数构造方法:初始化的对象时,成员变量的数据均采用默认值。
•有参数构造方法:在初始化对象的时候,同时可以为对象进行赋值。
(4).注意事项
•任何类定义出来,默认就自带了无参数构造器,写不写都有。
•一旦定义了有参数构造器,无参数构造器就没有了,此时就需要自己写无参数构造器了。
•建议在任何时候都手动写上空参和带全部参数的构造方法
this关键字:区分成员变量和局部变量
this.变量 指成员变量
区别:
手打,未完待续.......