为了账号安全,请及时绑定邮箱和手机立即绑定

Java入门第三季

难度入门
时长 5小时 0分
学习人数
综合评分9.50
1125人评价 查看评价
9.7 内容实用
9.4 简洁易懂
9.4 逻辑清晰
  • throws是声明并向上一层继续抛出异常
    查看全部
  • throw是动作抛出异常 例:throw new EXception() public void 方法名 throws Exception1,Exception2...
    查看全部
  • throwable -error -exception
    查看全部
    0 采集 收起 来源:Java异常简介

    2019-01-20

  • Arrays.asList(arr)将数组转为list
    查看全部
  • Set集合是无序且不可重复的,只能通过循环遍历或迭代遍历获取里面的元素

    Set接口及其实现类--------HashSet

    Set是元素无序并且不可以重复的集合,被称为集

    HashSet-------哈希集,是Set的一个重要实现类


    查看全部
  • 欢迎交流与探讨,玩家数和牌数可自由调整(不要超出牌的数量)

    大神们可以指点下哪里可以优化!

    package com.game;
    
    import java.util.*;
    
    public class Cars implements Comparable<Cars>{
        private List<Cars> cars;
        private Map<Integer,PlayerInfo> player;
        private int player_num = 2;//玩家数
        private int car_num = 2;//每人发牌张数
        private Integer pai_key;//牌的键值,用于比较大小
        private String pai_value;//牌的名称
    
        public Cars(){
            this.cars = new ArrayList<>();
            this.player = new HashMap<>();
        }
    
        public Cars(int pai_key,String pai_value){
            this.pai_key = pai_key;
            this.pai_value = pai_value;
        }
    
        /**
         * 创建手牌(按从小到大的方式,方便后面的比较)
         */
        public void createCars(){
            System.out.println("===================创建一副手牌=====================");
            String[] pai = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
            String[] hua = {"方块","梅花","红桃","黑桃"};
    
            int p_key = 0;
            for (String p:pai){
                for (String h:hua) {
                    System.out.print(h + p + " ");
                    cars.add(new Cars(p_key,h + p));
                    p_key++;
                }
            }
            System.out.println("\n");
        }
    
        //创建玩家
        public void createPlayer(){
            System.out.println("=====================创建游戏玩家===================");
            Scanner console = new Scanner(System.in);
            int num = 0;
            while (num < player_num){
                System.out.println("请输入玩家ID");
                if(console.hasNext()){
                    String id = console.next();
                    //不创建名称了,直接用id代替
                    player.put(num,new PlayerInfo(id,id));
                    System.out.println("成功创建玩家 " + id);
                    num++;
                }
            }
        }
    
        /**
         * 洗牌并发牌
         */
        public void deal(){
            System.out.println("======================开始发牌======================");
            //打乱牌的顺序
            Collections.shuffle(cars);
            //发牌次数 = 玩家数*每人张数
            for (int i=0;i< (this.player_num * this.car_num);i++){
                //本轮获得牌的玩家player的key
                Integer player_num = i%this.player_num;
                //获取玩家对象
                PlayerInfo player = this.player.get(player_num);
                Cars car = this.cars.get(i);
                player.carList.add(car);
                System.out.println("玩家 " + player.id + " 获得手牌:" + car.pai_value);
            }
        }
    
        /**
         * 比较大小
         */
        public void winner(){
            System.out.println("======================比较大小======================");
            Set<Integer> keySet = this.player.keySet();
            int max = -1;
            String win = "";
            for (int p_key:keySet){
                PlayerInfo play = player.get(p_key);
                //按牌的key大小进行排序
                Collections.sort(play.carList);
                Cars max_car = play.carList.get(0);
                int tmp_max = max_car.pai_key;
                if (tmp_max > max){
                    win = play.id;
                    max = Math.max(max,tmp_max);
                }
                System.out.println("玩家 " + play.id + " 最大手牌 : " + max_car.pai_value);
            }
            System.out.println("玩家 " + win + " 获胜!!!");
        }
    
    
        public static void main(String[] args) {
            Cars game = new Cars();
            game.createCars();
            game.createPlayer();
            game.deal();
            game.winner();
        }
    
        @Override
        public int compareTo(Cars o) {
            return o.pai_key.compareTo(this.pai_key);
        }
    }
    package com.game;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class PlayerInfo{
        public String id;
        public String name;
        public List<Cars> carList;//手牌
    
        public PlayerInfo(String id,String name){
            this.id = id;
            this.name = name;
            this.carList = new ArrayList<>();
        }
    
    }


    查看全部
  • Compartor接口——比较工具接口

    1. 用于定义临时比价规则,而不是默认比较规则

    2. 其实现类需要实现compare()方法

    3. Comparator和Comparable都是java集合框架的成员

    查看全部
  • Comparable接口——可比较的

    1. 实现该接口表示:这个类的实例可以比较大小,可以进行自然排序

    2. 定义了默认的比较规则

    3. 其实现类需实现compareTo()方法

    4. compareTo()方法返回正数表示打,负数表示小,0表示相等

    查看全部
  • Java中字符串的不变性

    String 对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指的内存空间不同。

    String s1="爱慕课";

    String s2="爱慕课";

    String s3=new String("爱慕课");

    String s4=new String("爱慕课");

    //多次出现的字符串常量,Java编译程序只创建一个,所以返回true

    System.out.println(s1==s2);

    //s1和s3是不同的对象,所以返回false

    System.out.println(s1==s3);

    //s3和s4是不同的对象,所以返回false

    System.out.println(s3==s4);


    s1="欢迎来到:"+s1;

    //字符串s1被修改,指向新的内存空间

    System.out.println(s1);


    equals ()方法概念:                                                                                                                                  equals()方法是对象比较函数,按照对象比较,系统默认四个类默写该方法:Integer,String,Date,file 。没有覆写equals()方法的类会调用Object的equals()方法,Object类的equals()方法直接用==实现。          比较过程:                                                                                                                                                  1.首先判断两个比较对象类型是否相同,如果不同返回false。                                                                    2.如果相同继续判断对象内容是否相同,如果相同返回true,如果不同返回false。 

     equals使用方法及注意事项:

    e.g1

    String s1=new String("a");

    String s2=new String("a");

    s1.equals(s2);

    即使s1与s2并不是同一个对象,但s1与s2的类型相同并且内容一样,此时equals方法返回值为true。

    e.g2

    String s1=new String("a");

    String s2=new String("b");

    s1.equals(s2);

    s1与s2的类型相同但内容不一样,此时equals方法返回值为false。

    e.g3

    String s1=null;

    String s2=new String("b");

    s1.equals(s2);

    此时会抛出NullPointException异常,在做equals比较的时候一定要确保调用equals方法的对象不为空。


    “==”判等比较概念                                                                                                                                "=="是等值比较,比较的是变量的内容。                                                                                                 1.当比较对象为基本数据类型时,比较的是数据的大小。                                                                           2.当比较对象为引用类型时,比较的是引用类型中存放的地址。  

    e.g1

    int n1=10;

    int n2=10;

    n1==n2;

    因为n1,n2是基本数据类型,并且数据值相等所以此时返回true。

    e.g2

    String n1="a";

    String n2="b";

    n1==n2;

    由于字符串"a"创建时是在方法区的常量池中开辟的空间,并且下次使用时可以重复使用,n1,n2指向的地址是相同的,所以判等结果是true。

    e.g3

    Integer n1=new Integer(45);

    Integer n2=new Integer(45);

    n1==n2;

    n1与n2分别在堆区开辟了空间,两个变量所指向的地址不同,即使指向地址中的内容相同,判等的结果也是为false。

    注意:

    Integer n1=128;

    Integer n2=128;

    n1==n2;

    Integer n3=127;

    Integer n4=127;

    n3==n4;

    Integer包装类型中存在自动装箱的情况,当数据范围在-128~127之间时,创建的对象会在方法区的常量池中开辟空间(可复用),数据超出范围就会在堆区中开辟空间,由于指向不同对象所以n1==n2判等的结果为false,n3与n4指向常量池同一地址池所以判等结果为true。





    查看全部
  • 什么是Java中的字符串


    创建String对象的方法

    //创建一个字符串对象imooc,名为s1

    String s1="imooc";

    //创建一个空字符串对象,名为s2

    String s2=new String();

    //创建一个字符串对象imooc,名为s3

    String s3=new String("imooc");


    查看全部
  • Set集合是无序且不可重复的,只能通过循环遍历或迭代遍历获取里面的元素

    查看全部
  • Math 类位于 java.lang 包中,包含用于执行基本数学运算的方法, Math 类的所有方法都是静态方法,所以使用该类中的方法时,可以直接使用类名.方法名,如: Math.round();

    常用的方法:


    查看全部
  • ava.util.Calendar 类是一个抽象类,可以通过调用 getInstance() 静态方法获取一个 Calendar 对象,此对象已由当前日期时间初始化,即默认代表当前时间,如 Calendar c = Calendar.getInstance();

    那么如何使用 Calendar 获取年、月、日、时间等信息呢?我们来看下面的代码:

    其中,调用 Calendar 类的 getInstance() 方法获取一个实例,然后通过调用 get() 方法获取日期时间信息,参数为需要获得的字段的值, Calendar.Year 等为 Calendar 类中定义的静态常量。

    运行结果: 

    Calendar 类提供了 getTime() 方法,用来获取 Date 对象,完成 Calendar 和 Date 的转换,还可通过 getTimeInMillis() 方法,获取此 Calendar 的时间值,以毫秒为单位。如下所示:

    运行结果:


    查看全部
  • 1. 使用 format() 方法将日期转换为指定格式的文本

    代码中的 “yyyy-MM-dd HH:mm:ss” 为预定义字符串, yyyy 表示四位年, MM 表示两位月份, dd 表示两位日期, HH 表示小时(使用24小时制), mm 表示分钟, ss 表示秒,这样就指定了转换的目标格式,最后调用 format() 方法将时间转换为指定的格式的字符串。

    运行结果: 2014-06-11  09:55:48   

    2. 使用 parse() 方法将文本转换为日期

    代码中的 “yyyy年MM月dd日 HH:mm:ss” 指定了字符串的日期格式,调用 parse() 方法将文本转换为日期。


    查看全部
  • JAVA中异常处理的类型

    https://img1.sycdn.imooc.com//5c40282c0001474c09080700.jpg

    查看全部

举报

0/150
提交
取消
课程须知
此部分为 Java 课程的进阶内容,适合具有一定 Java 基础的伙伴们学习,如果您是新手,建议您移步 《Java入门第一季》 和 《Java入门第二季》,在理解并掌握面向对象相关知识后再回来进修。
老师告诉你能学到什么?
本课程将学习 Java 中的异常处理、集合框架、字符串、常用类等,逐步学习掌握 Java 高级技术。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!