第14周Java学习总结

本周观看了黑马Java2022版63-91集的内容,主要包含以下内容:

方法,几个综合练习,面向对象介绍

一.方法

1.最简单的方法构造

public static void 方法名(){

方法体(就是打包起来的代码);

}

调用该方法:        方法名();

2.带参数的方法构造

public static void 方法名(参数){

方法体;

}

调用该方法:        方法名(参数的数值);

3.带返回值的方法构造

public static 返回值类型 方法名(参数){

方法体;

return 返回值;

}

调用该方法:   直接调用,赋值调用,输出调用

应用场景:在调用处要根据方法的结果,去编写另一段代码

4.方法的重载

指在同一类内具有相同名称的多个方法,方法之间 参数不同:

参数个数不同,参数类型不同,参数顺序不同

5.基本数据类型和引用数据类型

(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.类

1.类的一般结构:

[类修饰符] class 类名称{

[修饰符] 数据类型 成员变量名称;            }声明成员变量

                     ...                            

[修饰符] 返回值数据类型 方法名(参数)}          }声明成员方法

     语句序列;

    return [表达式];

}

......

}

如何使用:1.访问属性:对象名.成员变量

               2.访问行为:对象名.方法名();

2.封装

原则:对象代表什么,就封装对应的数据,并记录相应的行为

private:权限修饰符,可以修饰成员变量和成员方法,被修饰的成员只能在本类中使用

!!!被private修饰的成员变量,如果需要被其它类使用,要提供相应的方法:

(1).用"setXxx(参数)"方法,用于给成员变量赋值,用public修饰

(2).用"getXxx()"方法,用于获取成员变量的值,用public修饰

3.构造方法

(1).格式

public class 类名{

修饰符 类名(参数){

方法体;

}

}

(2).特点:方法名与类名相同

             没有返回值类型,连void也没

             没有具体的返回值(不能有return带回结果数据)

作用:创建对象时,由虚拟机自动调用,给成员变量初始化的

(3).构造方法有两种,各自的作用
  •无参数构造方法:初始化的对象时,成员变量的数据均采用默认值。
  •有参数构造方法:在初始化对象的时候,同时可以为对象进行赋值。
(4).注意事项
  •任何类定义出来,默认就自带了无参数构造器,写不写都有。
  •一旦定义了有参数构造器,无参数构造器就没有了,此时就需要自己写无参数构造器了。
  •建议在任何时候都手动写上空参和带全部参数的构造方法

4.标准的javabean类

第14周Java学习总结_第1张图片

 5.成员变量与局部变量

this关键字:区分成员变量和局部变量

this.变量 指成员变量

区别:

第14周Java学习总结_第2张图片

手打,未完待续.......

你可能感兴趣的:(周记,学习,java)