Java自学基础day6

1.面向对象
1.1封装

1.java三大属性:封装、多态、继承

2.封装:就是对象代表什么,就得封装相对应的数据,并且提供数据对应的行为。

3.private关键字是个权限修饰符。被private修饰的成员变量只能在本类中访问,如果需要被其他类访问,必须要提供get,set方法进行调用,也可以在get方法中进行持续的过滤。

//主函数中代码块去调用
BoyFriend by1=new BoyFriend();     //在代码块中创建一个对象
by1.setAge(19);
by1.setName("猪猪侠");
System.out.println(by1.getName());
System.out.println(by1.getAge());
//boyfriend类
package org.example;
public class BoyFriend {
    private String name;
    private int age;

public void setName(String n){
    name=n;
}
public String getName(){
    return name;
}

//getset方法对值进行过滤
public void setAge(int a){
    if (a >= 18 && a <= 50) {
        age=a;
    }else{
        System.out.println("非法数据");
    }
}
public int getAge(){
    return age;
}
}
1.2构造方法

1.作用:创建对象时,虚拟机会自动调用构造方法,为了给成员变量初始化。

2.类别:有参构造(可同时为变量赋值)与无参构造(虚拟机会自动给出初始化的值)

3.tips:①、任何类的定义默认带无参构造器的。如果先定义了有参数构造器,无参构造器就不会自动生成。②、无参、有参构造方法在实际开发过程中最好两者均写入

public Student(String name,int age){
    this.name=name;
    this.age=age;
}//有参构造相当与set方法
public Student(){
   System.out.println("看看我是否被执行!");
}//无参构造方法

4.标准的JavaBean

 1.3面向对象内存图

①class字节码文件加载至方法区(main方法同时也被临时存储至方法区,同时压入栈中)。

②将方法临时加载到方法区中。

③BoyFriend by1=new BoyFriend();   (对左边的变量声明空间<栈>中,右边的变量加载空间<堆>中,右边的空间地址会将成员变量以及成员方法地址加载至堆中,并进行显式初始化与隐式初始化,以及构造方法初始化,最后将右边的空间地址赋值给与左边的变量)

基本数据类型:实际变量的地址存储的是真实的数据

引用数据类型:实际存储的是 真实数据的地址值(变量存在在栈中,数据存储在堆中)

1.4this关键字

this关键字遵循就近原则,调用就近原则的成员变量。

本质是区分局部变量与成员变量。

this代表的是被调用者的地址值 

2.小练习(双色球系统)

import java.util.Random;
import java.util.Scanner;

public class Main {
    //生成中将号码的代码
    public static int[] Reward() {
        Random sc = new Random();
//       int[] arr ={21,2,4,7,24,16,1};  //测试数组
        int[] arr=new int[7];
        for (int i = 0; i < 6; i++) {
            int index = sc.nextInt(33);
            arr[i] = index;
        }//生成随机红球的号码
        for (int i = 0; i < 1; i++) {
            int index = sc.nextInt(16);
            arr[i + 6] = index;
        } //生成蓝球的号码
        System.out.print("\n本期中奖号码为:");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        return arr;
    }

    //中奖规则
    public static int Guize(int arr[], int arr1[]) {
        int RedCount = 0;
        int BuleCount = 0;
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr1.length - 1; j++) {
                if (arr[i] == arr1[j]) {
                    RedCount++;
                }
            }
        }
        if (arr1[6] == arr[6]) {
            BuleCount++;
        }
        if ((RedCount == 1 && BuleCount == 1) || (RedCount == 0 && BuleCount == 1) || (RedCount == 2 && BuleCount == 1)) {
            return 6;
        } else if ((RedCount == 3 && BuleCount == 1) || (RedCount == 4 && BuleCount == 0)) {
            return 5;
        } else if ((RedCount == 4 && BuleCount == 1) || (RedCount == 5 && BuleCount == 0)) {
            return 4;
        } else if ((RedCount == 5 && BuleCount == 1)) {
            return 3;
        } else if ((RedCount == 6 && BuleCount == 0)) {
            return 2;
        }else if((RedCount == 6 && BuleCount == 0)){
            return 1;
        }
        return 0;//根据中奖规则返回中奖等级
    }

    public static void main(String[] args) {
        System.out.print("请输入红球的号码:");
        int arr1[] = new int[7];  //arr1用于存放用户输入的数字
        for (int i = 0; i < 6; ) {
            Scanner sc = new Scanner(System.in);
            arr1[i] = sc.nextInt();
            if (arr1[i] >= 1 && arr1[i] <= 33) {
                i++;
            } else {
                System.out.print("数据输入非法!请重新输入!");
            }
        }

        System.out.print("请输入蓝球的号码:");
        while (true){
            Scanner sc = new Scanner(System.in);
            int index = sc.nextInt();
            if (index >= 1 && index <= 16) {
                arr1[6] = index;
                break;
            }else{
                System.out.println("数据输入非法!请重新输入");
            }
        }
        System.out.print("=========================\n");
        System.out.print("您输入的号码为:");
        for (int i = 0; i < arr1.length; i++) {
            System.out.print( arr1[i]+" ");
        }
        int num=Guize(Reward(), arr1);
        switch (num){
            case 1:
                System.out.println("恭喜你,中了一等奖!获得1000w元");
                break;
            case 2:
                System.out.println("恭喜你,中了二等奖!获得500w元");
                break;
            case 3:
                System.out.println("恭喜你,中了三等奖!获得3000元");
                break;
            case 4:
                System.out.println("恭喜你,中了四等奖!获得200元");
                break;
            case 5:
                System.out.println("恭喜你,中了五等奖!获得10元");
                break;
            case 6:
                System.out.println("恭喜你,中了六等奖!获得5元");
                break;
            default:
                System.out.print("\n=========================\n");
                System.out.println("很遗憾,没有中奖!(´。_。`)");
        }
    }
}

 暴力解(有规则的限制)

-------

原来彩票的中奖概率那么的低啊,以后不买彩票了。我自己框框做个假数据中一等奖,哈哈哈哈哈。

①在判断篮球号码时候的条件限制用while循环很巧妙,但是忘记了写break。导致代码报错。

②写的速度有些慢,希望可以快一点。小菜菜一定可以学会的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值