随笔 - 9,  文章 - 0,  评论 - 0,  阅读 - 5312

1、编程题

设计一个用户类User,类中的变量有用户名、密码和记录用户数量的变量,

定义3个构造方法:无参的、为用户名赋值的、为用户名和密码赋值的,还有获取和设置密码的方法和返回类信息的方法。

代码部分:

复制代码
//定义一个User类
public class User {
    // 1、编程题
    // 设计一个用户类User,类中的变量有用户名、密码和记录用户数量的变量,
    // 定义3个构造方法:无参的、为用户名赋值的、为用户名和密码赋值的,还有获取和设置密码的方法和返回类信息的方法。

    // 成员变量:
    String user;// 用户名
    String cipher;// 密码
    int quantity;// 记录用户数量

    // 构造方法:
    // (1)无参构造方法
    public User() {

    }

    // (2)为用户名赋值的构造方法
    public User(String user) {
        this.user = user;

    }

    // (3)为用户名和密码赋值的构造方法
    public User(String user, String cipher) {
        this.user = user;
        this.cipher = cipher;
    }

    // 获取密码的方法
    public String getCipher() {
        return cipher;
    }

    // 设置密码的方法
    public void setCipher(String cipher) {
        this.cipher = cipher;

    }

    // 返回类信息的方法
    public void show() {
        System.out.println("用户名为:" + user + ",密码为:" + cipher + ",当前的用户数量为:" + quantity);
    }

}
复制代码

 

2、编程题

设计一副牌Poker的外部类和一张牌Card的内部类。

(1)Poker类中定义私有成员花色数组、点数数组以及一副牌的数组属性,提供构造方法(创建并初始化一副牌的数组)、随机洗牌方法shuffle(Math.random()获取     [0,1)的随机数;获取[n,m)的随机数公式为Math.random()*(m-n)+n)和发牌方法deal。

(2)Card类中定义花色和点数属性,提供打印信息方法。

(3)定义测试类并在main()方法中创建一副牌Poker对象,并调用shufle()进行洗牌,调用deal()进行发牌。

 

(1)代码部分:

复制代码
package temp;

import java.util.Arrays;

//2、编程题
// 设计一副牌Poker的外部类和一张牌Card的内部类。
// (1)Poker类中定义私有成员花色数组、点数数组以及一副牌的数组属性,提供构造方法(创建并初始化一副牌的数组)、
// 随机洗牌方法shuffle(Math.random()获取[0,1)的随机数;获取[n,m)的随机数公式为Math.random()*(m-n)+n)和发牌方法deal。
// (2)Card类中定义花色和点数属性,提供打印信息方法。
// (3)定义测试类并在main()方法中创建一副牌Poker对象,并调用shufle()进行洗牌,调用deal()进行发牌。

//一副牌Poker的外部类
public class Poker {
    // 一张牌Card的内部类
    public class Card {
        private String suite;// 定义牌的花色
        private String face;// 定义牌的点数

        // 定义内部类的满参构造方法
        public Card(String suite, String face) {
            this.suite = suite;
            this.face = face;
        }

        // 定义toString()方法,返回扑克牌的花色和点数组合的字符串
        public String toString() {
            return suite + face;
        }

    }

    // 定义私有成员花色数组、点数数组以及一副牌的数组属性
    private String[] suites = { "黑桃", "红心", "梅花", "方块" };
    private String[] faces = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
    // 该牌的数组属性定义为Card类型,意为可以用来储存Card数据类型的变量,即为Card内部类创建出的对象
    // 此处定义的数组属性为静态成员变量,因为后面用到的Arrays类的toString方法为静态方法,需要传入静态的成员变量作为参数
    private static Card[] cards;

    // 创建一个外部类的构造方法,用于实现初始化一副牌的数组
    public Poker() {
        // 定义cards 数组长度为52,用于存储52个Card内部类创建出的对象,每个对象代表一张牌
        cards = new Card[52];
        // 外for循环,用于遍历出所有的花色
        for (int i = 0; i < suites.length; i++) {
            // 内for循环,用于遍历出所有的点数
            for (int j = 0; j < faces.length; j++) {
                // 外层循环遍历花色,一共有四种,取值为0到3,内层循环遍历点数,每个花色对应的点数有13种,取值为0到12;
                // 外层循环每执行一次,代表选择了一种花色,内层循环需要完全执行,将13个点数与之(花色)结合。
                // i*13+j为数组的索引位置,需要将52个对象依次储存进去,当i为0时,代表一种花色,存储的索引为0到12;
                // 当i为1时,代表另一种花色,存储的索引位置需要从13开始,当i为2时,存储的索引位置需要从26开始,依次累加;
                // 所以索引位置为i*13+j。
                cards[i * 13 + j] = new Card(suites[i], faces[j]);
                // 将这些对象存储在牌的数组属性里,这样便实现了初始化一副牌的数组
            }
        }
    }

    // 构造随机洗牌的方法shuffle
    public void shuffle() {

        for (int i = 0; i < cards.length; i++) {
            // random()方法为Math类的静态方法,可以直接用Math.random()的形式去调用
            // 功能为获取[0,1)范围内数据类型为double的随机数
            // 因为有double类型的随机数参与运算,故需要添加(int)将其强制转换为int类型的数据
            int num = (int) (Math.random() * cards.length);
            Card temp = cards[num];
            cards[num] = cards[i];
            cards[i] = temp;
        }
    }

    // 构造发牌的方法deal
    public void deal(Card[] cards) {
        // 此处调用了Arrays类的toString方法,可以将数组中存储的内容以字符串的表示形式出来;
        // 此方法属于静态方法,可以直接用(类名)Arrays.toString()的形式来调用,
        // 需要传入静态的外部类成员变量作为参数,故前面定义的Card[] cards为静态成员变量
        System.out.println(Arrays.toString(cards));

    }

    public static void main(String[] args) {
        // 构建一个外部类对象,在构造方法的内部初始化了一副牌的数组
        Poker poker = new Poker();
        System.out.println("洗牌前:");
        // 调用deal成员方法发牌
        poker.deal(cards);
        // 调用shuffle成员方法进行洗牌
        poker.shuffle();
        System.out.println("洗牌后:");
        // 洗牌后,再次调用deal成员方法发牌
        poker.deal(cards);
    }

}
复制代码

 

(2)效果截图:

 

 

 
 
posted on   ^十月  阅读(422)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示