Java学习day5——实战——生成一副扑克牌

2020.3.22

学习目的:掌握setter、getter、toString方法,并完成生成一副扑克牌项目,巩固基础

一.准备工作->数组的定义、foreach循环、setter和getter、toString

1.数组的定义

int num[]=new int[30];数组也是对象,需要使用new关键字创建
length->数组的静态属性,使用数组名调用可获取数组的长度,如int length=num.length;
另外一种创建数组的方式:String name[]=new String[]{"jack","rose","xw"};该数组称为静态数组
注:常用创建数组的形式->String[] name=new String[5]; 前后更对称一些

2.foreach循环

foreach循环也称增强for循环,它不关心循环变量i,只需要从给定的数组中取出元素
格式:for(数组中元素的类型 temp:数组名);
temp->临时变量,每一次循环的temp是对应的数组元素,第一次对应第一个,第二次对应第二个,以此类推,直到数组中的元素被取完便退出for循环
使用foreach循环很方便,只要不关心当前元素是第几个便可便捷使用

3.setter和getter方法

为什么需要setter和getter方法:很多时候,成员变量需要使用private修饰,此时在其他类中无法访问这些私有的成员变量,而setter和getter方法便可间接访问
setter:给成员变量赋值   getter:获取成员变量的值
私有的成员变量不能直接通过打点.的方式来调用,只能通过setter、getter方法访问,所以称为间接,这两个方法就好像是为私有成员变量提供给外部了一个通道,可供外部使用
为了提高阅读性,最好将setter、getter方法写在最后

package day3;
public class Person {
    public String name;
    private int pocket_money;
    //获取零花钱的金额
    public int getPocket_money() {
        return pocket_money;
    }
    //设置零花钱的金额
    public void setPocket_money(int pocket_money) {
        this.pocket_money = pocket_money;
    }
    public String toString() {
        return "重写toString方法";
    }
}
--------------------------------------------------------------------------------------------------
package day3;
public class Myclass {
    public static void main(String[] args) {
        Person p=new Person();
        p.name="xiaowang";
        p.setPocket_money(10);//间接设置money的值
        int quantity=p.getPocket_money();//间接获取money的值
        System.out.println("零花钱:"+quantity);
        System.out.println(p);
        //输出结果为重写toString方法
    }
}

4.toString方法

当使用print输出一个对象时,就会去这个对象内部查找toString方法,如果没有重写toString方法,就会调用父类的toString方法->打印对象的地址,所以为了实现我们想要的效果,通常会选择重写toString方法

注:快速添加构造方法、setter和getter等的快捷键->Alt+Insert

二.生成一副扑克牌Demo

下面介绍两种方式完成此Demo,一是面向过程,二是面向对象,无论是哪种都需要Poker这个类->生成一张牌,而面向对象则会多一个PokerManager类->管理一副牌,包括生成一副牌、洗牌显示一副牌,这些都是PokerManager的行为即方法

1.面向过程

package Poker;
public class Poker {
     String dot;//记录点数
     String pic;//记录花色
}
--------------------------------------------------------------------------------------------------
package Poker;
public class Myclass {
        public static void main(String[] args) {
            //生成一副牌,准备一个数组保存所有的点数
            String[] dots=new String[]{"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
            //花色
            String[] pics=new String[]{"♦","♣","♥","♠"};
            //数组保存所有的扑克牌
            Poker[] pokers=new Poker[52];
              for (int i=0;i

2.面向对象

package NewPoker;
public class Poker {
    public String dot;//记录点数
    public String pic;//记录花色
    //准备一个数组保存所有的点数
    public static String[] dots=new String[]{"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
    //花色
    public static String[] pics=new String[]{"♦","♣","♥","♠"};
    //添加构造方法
    public Poker(String dot, String pic) {
        this.dot = dot;
        this.pic = pic;
    }
   //重写toString方法
    public String toString() {
        return dot+pic;
    }
}
--------------------------------------------------------------------------------------------------
package NewPoker;
import java.util.*;
public class PokerManager {
     private ArrayList Pokers;
     public PokerManager(){
         Pokers=new ArrayList<>();
     }
     //生产一副牌
     public void generatePokers(){
         for (int i=0;i

对比总结:第一种写法完全是面向过程的思路,各个功能不够独立化,没有抽出来,写完一个功能就挨着写下一个功能,这是所谓的按功能步骤来执行,修改起来很繁琐,封装性不太好,而面向对象的写法就完全不一样,将各个功能用一个类封装起来,使用的时候很方便,给人的感觉十分清爽,想停用哪个功能就停用哪个功能,检查、修改代码也相对容易

你可能感兴趣的:(Java学习day5——实战——生成一副扑克牌)