就发牌问题优化所得知识及java编程规范

一.Iterator的三个方法:hasNext()、next()、remove()

当创建完成指向某个集合或者容器的Iterator对象时,此时指针指向第一个元素的上方,即空。
当调用hasNext()方法时,判断下一个元素的有无,并不移动指针,当下面没有元素时,停止移动,常用于遍历集合判断循环结束。
当调用next()方法时,向下移动指针,并且返回指针指向的元素,如果指针指向的内存中没有元素,报异常,常用于遍历集合取数。
当调用remove()方法时,删除指针指向的元素,如果当前指针指向的内存中没有元素,那么同样会抛出异常。
在这里插入图片描述
对应扑克牌读取每个人手牌,遍历集合
`

 private static void printSet(TreeSet<Poke> pokes) {// 模拟看牌的方法
        for (Iterator<Poke> iterator = pokes.iterator(); iterator.hasNext();) {    //没有指针下移操作,只是判断是否存在下一个元素,没有下一个元素时退出循环
            Poke poke = iterator.next();         //指针下移
            System.out.print(poke.getName() + " ");
        }
        System.out.println();
    }

}

二.set集合(HashSet类和TreeSet类)

HashSet类由一个哈希表支持,不保证Set的迭代顺序
TreeSet类实现在遍历集合时按照自然顺序递增排序,也可以按照指定比较器递增排序,其中comparator()方法返回对此Set集合中的元素进行排序的比较器((如果此Set使用自然规律,返回null)

class MyCompare implements Comparator<Poke> {// 自定义比较器,创建类实现Comparator()方法,是返回此set中元素进行递增排序的比较器


    public int compare(Poke o1, Poke o2) {    // 通过比较牌的序号来确定排序位置
       return o1.getCode()-o2.getCode();
    }

}
TreeSet<Poke> last = new TreeSet<Poke>(new MyCompare());       // 底牌      TreeSet类实现set类按指定比较器递增排序
TreeSet<Poke> one = new TreeSet<Poke>(new MyCompare());        // 玩家1的牌
TreeSet<Poke> two = new TreeSet<Poke>(new MyCompare());     // 玩家2的牌
TreeSet<Poke> three = new TreeSet<Poke>(new MyCompare());   // 玩家3的牌

三.this关键字,类的构造方法

class Poke {                 // 扑克牌类
    private int code;        // 扑克牌序号,用来对牌排序(定义一个int型成员变量)
    private String name;     // 扑克牌名称,用来对牌排序(定义一个String型成员变量)

    public Poke(int code, String name) {     //定义Poke有参构造方法,可以为成员变量赋值
        this.code = code;
        this.name = name;
    }

    public int getCode() {        //getCode()方法中,方法返回值为int类,使用return code形式将int类对象返回
        return code;
    }

    public void setCode(int code) {      //定义一个setCode()方法,将参数值赋予类中的成员变量
        this.code = code;
    }

    public String getName() {        //getName()方法中,方法返回值为String类,使用return name形式将String类对象返回
        return name;
    }

    public void setName(String name) {  //定义一个setName()方法,将参数值赋予类中的成员变量
        this.name = name;
    }

}

对于this name=name,将形参name的值赋给成员变量name。
如果省略关键字直接写出name=name,那只是把参数name赋值给参数变量本身而已,成员变量name值没有改变,因为参数name在方法的作用域内覆盖了成员变量name。
类的构造方法:public Poke(参数1,参数2){
…//构造方法体
}
构造方法没有返回值,且构造方法的名称要与本类的名称相同;
构造方法中可以为成员变量赋值,当实例化一个本类的对象时,相应的成员变量也将被初始化。

四.运行结果

在这里插入图片描述

实现每个人手牌是有序的(按花色不同,序号递增来排)

五.java编程规范

采用该领域的术语,不去创造一些普通的词汇
采用大小写混合,提高名字的可读性。一般应该采用小写字母,但是类和接口的名字的首字母,以及任何中间单词的首字母应该大写。
尽量少用缩写,
包的命名都是使用小写的英文字母组成,每个包名称之间用点号分隔开来。如java.lang;javax.servlet.http 等
全局包的名字用所在机构的 Internet 保留域名开头。如:com.sun com.oracle. 等等
标准 Java类约定是使用完全的英文描述符,所有单词的第一个字母要大写,并且单词中大小写混合。类名应是单数形式。(如Customer)
采用完整的英文描述符说明接口封装,所有单词的第一个字母大写。习惯上,名字后面加上后缀 able,. ible 或者 er。(如Runnable接口)
成员函数的命名应采用完整的英文描述符,大小写混合使用:所有中间单词的第一个字母大写。成员函数名称的第一个单词常常采用一个有强烈动作色彩的动词。
openAccount()
获取函数作为一个成员函数,返回一个字段的值。除了布尔字段之外,应采用 get 作为字段的前缀;布尔字段采用 is 作为前缀。
public String getUserCode() {
设置函数,也叫变值函数,是可以修改一个字段值的成员函数。无论何种字段类型,都要在字段名的前面加上 set 前缀。
public void setUserCode(String userCode) {
目前理解这些,日后再补充吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值